Es popular para mostrar contenido procesal dentro de la GPU, por ejemplo, en el demoscene (dibujando un único quad para llenar la pantalla y dejando que la GPU calcule los píxeles).
La marcha de rayos es popular:
Esto significa que la GPU está ejecutando un número desconocido de iteraciones de bucle por píxel (aunque puede tener un límite superior como maxIterations
).
¿Cómo afecta tener un bucle de longitud variable el rendimiento del sombreador?
Imagine el simple psuedocódigo de marcha de rayos:
t = 0.f;
while(t < maxDist) {
p = rayStart + rayDir * t;
d = DistanceFunc(p);
t += d;
if(d < epsilon) {
... emit p
return;
}
}
¿Cómo se ven afectadas las diversas familias de GPU convencionales (Nvidia, ATI, PowerVR, Mali, Intel, etc.)? ¿Sombreadores de vértices, pero particularmente sombreadores de fragmentos?
¿Cómo se puede optimizar?