Популярно рендерить процедурный контент внутри графического процессора, например, на демосцене (рисовать один квад для заполнения экрана и позволить графическому процессору вычислять пиксели).
Лучевой марш популярен:
Это означает, что графический процессор выполняет некоторое неизвестное число итераций цикла на пиксель (хотя вы можете иметь верхнюю границу, например maxIterations
).
Как петля переменной длины влияет на производительность шейдера?
Представьте себе простой маршевый псевдокод:
t = 0.f;
while(t < maxDist) {
p = rayStart + rayDir * t;
d = DistanceFunc(p);
t += d;
if(d < epsilon) {
... emit p
return;
}
}
Как влияют различные семейства графических процессоров (Nvidia, ATI, PowerVR, Mali, Intel и т. Д.)? Вершинные шейдеры, но особенно фрагментные шейдеры?
Как это можно оптимизировать?