lightViewPosition
lightViewPosition
在 TSL 中,自动提供指定光源在当前相机视图空间(View Space)中的位置坐标(`vec3`),是实现视图空间光照计算的关键。
核心优势
保证了光照计算的坐标空间正确性,并将复杂的坐标变换过程完全自动化。它在CPU端高效地完成变换,避免了在GPU上对每个顶点进行矩阵乘法,同时使着色器代码更简洁、意图更清晰。
常见用途
在视图空间中,与顶点的视图空间位置结合,计算标准光照模型中的光照方向向量(L)。
用于计算精确的镜面高光,尤其是在 Blinn-Phong 模型中计算半程向量。
计算片元与光源在视图空间中的距离,以实现与观察者无关的距离衰减。
用于调试,通过将光源的视图空间位置可视化为颜色来验证坐标系变换。
如何调整
此节点的值无法直接调整。它的值由两个因素共同决定:光源在世界空间中的位置,以及相机在世界空间中的位置和朝向。移动光源或相机都会改变此节点的输出值。
代码示例
1// 在视图空间中,计算从表面指向光源的方向向量
2const lightVector = lightViewPosition( myLight ).sub( positionView ).normalize();
3
4// 在视图空间中,计算半程向量用于高光计算
5const viewVector = positionView.negate().normalize();
6const halfway = lightVector.add( viewVector ).normalize();