Замедляет ли оператор If мой шейдер?
Я хочу знать, действительно ли «операторы If» внутри шейдеров (вершина / фрагмент / пиксель ...) действительно замедляют работу шейдера. Например:
Это лучше использовать это:
vec3 output;
output = input*enable + input2*(1-enable);
вместо того, чтобы использовать это:
vec3 output;
if(enable == 1)
{
output = input;
}
else
{
output = input2;
}
на другом форуме был разговор об этом (2013):http://answers.unity3d.com/questions/442688/shader-if-else-performance.html Здесь парни говорят, что операторы If действительно плохо влияют на производительность шейдера.
Также здесь они говорят о том, сколько внутри операторов if / else (2012):https://www.opengl.org/discussion_boards/showthread.php/177762-Performance-alternative-for-if-(-)
возможно, аппаратное обеспечение или шейдерный компилятор теперь лучше, и они как-то исправляют эту (возможно, не существующую) проблему с производительностью.
РЕДАКТИРОВАТЬ:
Что в данном случае, допустим, что enable - это единообразная переменная, и она всегда установлена в 0:
if(enable == 1) //never happens
{
output = vec4(0,0,0,0);
}
else //always happens
{
output = calcPhong(normal, lightDir);
}
Я думаю, что здесь у нас есть ветвь внутри шейдера, которая замедляет шейдер. Это верно?
Имеет ли смысл создавать 2 разных шейдера, как один для другого, а другой для части if?