É popular renderizar conteúdo procedural dentro da GPU, por exemplo, na demoscene (desenhar um único quad para preencher a tela e permitir que a GPU calcule os pixels).
A marcha dos raios é popular:
Isso significa que a GPU está executando um número desconhecido de iterações de loop por pixel (embora você possa ter um limite superior como maxIterations
).
Como ter um loop de comprimento variável afeta o desempenho do shader?
Imagine o psuedocode simples de marchar com raios:
t = 0.f;
while(t < maxDist) {
p = rayStart + rayDir * t;
d = DistanceFunc(p);
t += d;
if(d < epsilon) {
... emit p
return;
}
}
Como são afetadas as várias famílias principais de GPU (Nvidia, ATI, PowerVR, Mali, Intel etc.)? Shaders de vértice, mas particularmente shaders de fragmentos?
Como isso pode ser otimizado?