1.6 KiB
1.6 KiB
Mesh Shading for Visibility Culling
Generelle TODO
- Bounding Box/Sphere intersection fix
Meshlet generation effizienter machen(Index Buffer mit Tipsy optimiert)- Vertex Attribute compression
Culling Ablauf
- Erstes Frame: Alle Meshlets Drawcall
- Immer: View Frustum Culling (fertig, wenn Bounding intersection gefixt ist)
- Meshlet ID in separaten Buffer rendern
- Compute Shader über ID Buffer sammelt die Meshlets, die sichtbar waren
- Diese Meshlets wieder rendern
- Aus Depth Buffer eine Mipmap Pyramide generieren
- Im nächsten Frame: Meshlets aus ID Buffer Drawcall
- Für alle anderen Meshlets: Bounding Box/Sphere minimum Depth berechnen und mit Depth Pyramide vergleichen
- Wenn berechnete Depth < Previous, also potentiell visible: Draw call (Indirect mesh invocation aus compute shader?)
Evaluierung
Vergleich mit Traditioneller Vertex Pipeline
Demo Szene
Viel Overdraw, Camera Movement was die Occlusion stark verändert (Work in Progress)
- Ich hätte mir überlegt eine Art Arena mit Säulen vorgestellt, wo die Kamera hinter den Säulen fliegt die immer wieder die Szene verdecken
- Vielleicht verändert sich die Szene nach jeder Säule für pseudo "Animationen", vielleicht nicht sinnvoll und wichtig
Scripted Benchmark Run
Fixierter Kameraflug durch die Demo Szene, sammelt Timings und andere Statistiken und schreibt sie in eine Datei
Platformen(optional)
Ich hätte Zugriff auf sowohl Nvidia, AMD und Apple Hardware mit Mesh Shading, und es würde Sinn machen den Unterschied Mesh-Traditionell auf allen Platformed zu vergleichen. Um Apple zu benchmarken, müsste ich ein Metal-Backend implementieren.