着色器变量归一化任务

时间:2014-12-13 20:08:07

标签: opengl glsl shader

让我们假设我们在顶点着色器中有几个矢量变量(即光线方向,相机方向和顶点法线),我们想要通过片段着色器。

我知道着色器矢量变量应该在使用它们进行进一步计算之前进行标准化。 特别是可以在每个片段中更改的向量,如顶点法线,应首先在顶点着色器中进行标准化。

我想知道哪些变量不需要在片段着色器中进行规范化,这样我就可以节省一些计算。

1 个答案:

答案 0 :(得分:4)

我试图对这个有点模糊的问题做出一般性回答。

当然,您必须对任何需要单位长度的向量进行标准化,以便进一步计算。在经典的基于phong的光照计算的背景下,这些包括所有方向向量,因为实际要计算的是方向之间角度的余弦,它将等于单位长度向量的点积。

在这种情况下,值得注意的是,每个片段的变量插值将保留矢量长度。因此,即使顶点着色器输出已经规范化,您也必须重新规范片段着色器中的向量。并且你不能保存每个顶点归一化步骤:如果你插入不同长度的向量,你将引入某种加权,增加更长向量的影响。因此,您必须确保顶点着色器输出已标准化,并且必须在片段着色器中再次重新规范化它们。