Add docs/NOTES_renderer_v3.md

This commit is contained in:
Kevin Trogant 2024-06-03 08:47:06 +02:00
parent 07efd27209
commit 6b830f3ff2

43
docs/NOTES_renderer_v3.md Normal file
View File

@ -0,0 +1,43 @@
# GFX/Renderer v3
- Build around draw indirect
- Keep many meshlets together in one large buffer
- Meshlet: 128 triangles
- Mesh: List of meshlets
- Do compute based culling per VIEW
- Each View gets a list of mesh-refs (expanded to meshlet refs), and associated transforms
- **Optional:**
- These are, by default, permanent, allowing us to build a efficient bvh.
- Mark nodes as deleted, only collapse once the entire subtree is deleted.
Draw/Materials:
- Culling outputs tri-idx, meshlet for every pixel (For hardware that supports it, this could use raytracing)
- Meshlet refers to a (sub)material (via index)
- Per tile, create a list of draw indirect commands and a read-back buffer containing the (sub-)material index for each draw (+ total nr of draws)
- CPU loops over materials, issueing draw indirect calls upon material changes
- The ref to a sub-material may be made via meshlet -> material and view type -> sub-material
Some (most) sub-materials could draw into a gbuffer.
SubMaterialData is baked into structs containing constants and/or bindless ids.
Kept in one huge buffer
SubMaterial:
- Data
- PSO
Material:
- View Type -> SubMaterial
Frame Graph - Each view is a pass. Can re-use existing?
Renderer API:
- CreateMesh(data) -> MeshRef
- InstantiateMesh(MeshRef) -> MeshRef
- CreateView(type) -> View
- AddToView(MeshRef, Transform, Material) -> InstanceRef
- RemoveFromView(InstanceRef)
- UpdateInView(InstanceRef, Transform, Material)
- SetViewCamera(View, Camera)
- RenderView(View)
- CreateMaterial(NumSubMaterials, SubMaterialInfo*) -> Material
- CreateTexture(Format, W, H, NumMipLevels, Optional<InitialData*>) -> Texture
- EnqueueTextureUpdate(Texture, MipLevel, NewData)