29 lines
1.6 KiB
Markdown
29 lines
1.6 KiB
Markdown
# 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.
|