diff --git a/PLANNING.md b/PLANNING.md index a1258be..bab3b26 100644 --- a/PLANNING.md +++ b/PLANNING.md @@ -16,8 +16,9 @@ 2. [Frame](#frame) 9. [Scene](#scene-scene) 10. [3D Graphics](#3d-graphics-gfx3d) - 11. [3D Physics](#3d-physics-physics3d) - 12. [Artificial Intelligence](#artificial-intelligence-ai) + 11. + 12. [3D Physics](#3d-physics-physics3d) + 13. [Artificial Intelligence](#artificial-intelligence-ai) @@ -159,9 +160,6 @@ This will be the core of the engine. The following systems are not essential to the core engine, but are instead major systems that should be defined in their operation order: -**3D Systems will apply *before* their 2D Variants** - - ### Tick - **Update** - Events @@ -182,7 +180,10 @@ in their operation order: ### Frame - **Graphics** - - See [Stages](#stages-gfx3d) + - Physics Interpolation + - [2D Graphics](#2d-graphics-gfx2d) + - Generate 3D Mask + - [3D Graphics](#3d-graphics-gfx3d) - **Audio** @@ -212,7 +213,8 @@ implementations than I could write. ## 2D Graphics (`gfx2d`) - + - BVH + - Quadtree @@ -246,7 +248,6 @@ Specifications for debugging views via early breaks are included in the stages. ### Stages (`gfx3d`) This is the set of stages for the graphics pipeline that runs every frame: -Unless otherwise specified, each stage will be run on the GPU. - BVH - Octree @@ -255,6 +256,7 @@ Unless otherwise specified, each stage will be run on the GPU. - Max Object Size - Scene Center - Scene Edge + - Buffer has implicit locations due to the tree having 8 children. - Insertions and Updates are done on the CPU - Nodes - ID 16-bits @@ -265,14 +267,15 @@ Unless otherwise specified, each stage will be run on the GPU. - Culling - Starting at each Octree Leaf, traverse upwards. - Insert Visible Leaf IDs - - Track using atomic buffer + - Track using atomic buffer + - At the second level, if a node is an edge, add the sister nodes to the visible buffer. - Output: Buffer of Visible Leaves * LOD Selection * Generate the Command Buffer for Culled Mesh LODs from the Visible Leaf Buffer * Track counts using atomic buffers * To avoid double counting due to the structure of the Octree output, we have some options - * Ignore Leaf Instances based on occurrences of the mesh in the surrounding 16 Octree Leaves. This would require + * Ignore Leaf Instances based on occurrences of the mesh in the surrounding 26 Octree Leaves. This would require a bias towards a specific corner of the filter. * Perform a preprocessing step on the CPU to erase duplicate elements and fix the buffer continuity. * Let the duplicates be rendered.