È popolare rendere il contenuto procedurale all'interno della GPU, ad esempio nel demoscene (disegnare un singolo quad per riempire lo schermo e consentire alla GPU di calcolare i pixel).
La marcia del raggio è popolare:
Ciò significa che la GPU sta eseguendo un numero sconosciuto di iterazioni di loop per pixel (anche se puoi avere un limite superiore come maxIterations
).
In che modo avere un loop di lunghezza variabile influisce sulle prestazioni dello shader?
Immagina il semplice psuedocode che marcia i raggi:
t = 0.f;
while(t < maxDist) {
p = rayStart + rayDir * t;
d = DistanceFunc(p);
t += d;
if(d < epsilon) {
... emit p
return;
}
}
In che modo sono interessate le varie famiglie di GPU tradizionali (Nvidia, ATI, PowerVR, Mali, Intel, ecc.)? Shader di vertici, ma shader di frammenti in particolare?
Come può essere ottimizzato?