我想知道着色器内部的“ 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-(-)
也许硬件或者着色器编译器现在更好了,他们以某种方式修复了这个(可能不存在)性能问题。
编辑:
这个例子是什么意思呢,这里让我们说 able 是一个统一的变量,它总是被设置为0:
if(enable == 1) //never happens
{
output = vec4(0,0,0,0);
}
else //always happens
{
output = calcPhong(normal, lightDir);
}
我想我们在着色器里面有一根树枝可以减慢着色器的速度,对吗?
这是否更有意义,使2个不同的着色器喜欢一个为其他部分和其他的如果部分?