Popularne jest renderowanie treści proceduralnych w GPU, np. W wersji demonstracyjnej (rysowanie pojedynczego kwadratu, aby wypełnić ekran i pozwalanie GPU na obliczenie pikseli).
Marsz Ray jest popularny:
Oznacza to, że GPU wykonuje nieznaną liczbę iteracji pętli na piksel (chociaż możesz mieć górną granicę jak maxIterations
).
Jak posiadanie pętli o zmiennej długości wpływa na wydajność modułu cieniującego?
Wyobraź sobie prosty kod psuedokodu:
t = 0.f;
while(t < maxDist) {
p = rayStart + rayDir * t;
d = DistanceFunc(p);
t += d;
if(d < epsilon) {
... emit p
return;
}
}
Jak wpływa to na różne główne rodziny GPU (Nvidia, ATI, PowerVR, Mali, Intel itp.)? Shadery wierzchołków, a szczególnie fragmentatory?
Jak można to zoptymalizować?