modelNormalMatrix
modelNormalMatrix
一个 mat3 矩阵,用于将法线向量(Normal Vector)从模型局部空间正确地变换到世界空间。它能自动处理非均匀缩放,确保光照计算的物理正确性。
核心优势
将复杂的“逆转置矩阵”计算完全封装,开发者无需关心底层数学。它在 CPU 端为每个物体自动高效地计算并提供正确的法线矩阵,避免了在 GPU 上执行昂贵的矩阵求逆运算,同时保持了着色器代码的整洁和语义化。
常见用途
标准光照模型(PBR/Phong):计算世界空间法线,作为所有光照计算的基础。
法线贴图:构建 TBN 矩阵,将切线空间的法线转换到世界空间。
菲涅尔效应与边缘光:计算表面法线与视线夹角,以确定效果强度。
卡通渲染与描边:为光照阶梯化和轮廓检测提供准确的世界法线。
如何调整
该节点没有可直接调整的参数。它的值由渲染物体的变换(尤其是缩放)被动决定。要观察其效果,可以对一个受光照的物体进行非均匀缩放(如 `object.scale.set(2, 0.5, 1)`)。使用 `modelNormalMatrix` 将确保光照在拉伸后的表面上依然正确分布;若不使用它,光照会发生严重扭曲,失去真实感。
代码示例
1
2// 计算世界空间中的法线
3// 这是几乎所有光照效果的第一步
4const normalWorld = modelNormalMatrix.mul( normal() ).normalize();
5