Es ist beliebt, prozeduralen Inhalt innerhalb der GPU zu rendern, z. B. in der Demoszene (Zeichnen eines einzelnen Quadrats, um den Bildschirm auszufüllen, und Ermöglichen, dass die GPU die Pixel berechnet).
Ray Marschieren ist beliebt:
Dies bedeutet, dass die GPU eine unbekannte Anzahl von Schleifeniterationen pro Pixel ausführt (obwohl Sie eine Obergrenze wie haben können maxIterations
).
Wie wirkt sich eine Schleife mit variabler Länge auf die Shader-Leistung aus?
Stellen Sie sich den einfachen Pseudocode vor, der mit dem Marsch marschiert:
t = 0.f;
while(t < maxDist) {
p = rayStart + rayDir * t;
d = DistanceFunc(p);
t += d;
if(d < epsilon) {
... emit p
return;
}
}
Wie sind die verschiedenen gängigen GPU-Familien (Nvidia, ATI, PowerVR, Mali, Intel usw.) betroffen? Vertex-Shader, aber vor allem Fragment-Shader?
Wie kann es optimiert werden?