Files
Seele/Culling.md
T
2024-04-23 17:08:39 +02:00

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.