在片段着色器和顶点着色器中计算照明的点积有区别吗?
Is there a difference between calculating the dot product for lighting in the fragment shader vs the vertex shader?
当使用公式 float intensity = clamp(dot(normal, light), 0, 1)
(其中 light
是聚光灯的方向)计算光照值时,将法线传递给片段着色器并在那里计算与在顶点着色器中执行计算并将结果传递给片段着色器?我假设在顶点着色器中计算它更便宜,但我不确定它是否影响结果。
顶点着色器输出在传递到片段着色器之前进行线性插值(使用三角形的重心坐标)。
如果您的强度函数在整个三角形上呈线性变化,那么在顶点着色器中计算它会减少计算它的次数。然而,更高级的光照方程可能不会在整个三角形上线性变化;为了让他们获得准确的结果,他们需要在片段着色器中完成(尽管您可能愿意用准确性来换取性能)。
当使用公式 float intensity = clamp(dot(normal, light), 0, 1)
(其中 light
是聚光灯的方向)计算光照值时,将法线传递给片段着色器并在那里计算与在顶点着色器中执行计算并将结果传递给片段着色器?我假设在顶点着色器中计算它更便宜,但我不确定它是否影响结果。
顶点着色器输出在传递到片段着色器之前进行线性插值(使用三角形的重心坐标)。
如果您的强度函数在整个三角形上呈线性变化,那么在顶点着色器中计算它会减少计算它的次数。然而,更高级的光照方程可能不会在整个三角形上线性变化;为了让他们获得准确的结果,他们需要在片段着色器中完成(尽管您可能愿意用准确性来换取性能)。