inverse
inverse
返回输入矩阵的逆矩阵(支持 mat2 / mat3 / mat4)。用于把一个线性变换“还原”为其反变换,是坐标空间互换与许多光照/几何运算的基础。
核心优势
将 GLSL 内置 inverse() 封装为可组合的 TSL 节点:类型安全、可与任意动态矩阵链路相连,并在 GPU 端即时求逆,无需在 JS 端手动计算与同步 uniform。
常见用途
世界↔局部:inverse(modelWorldMatrix).mul( positionWorld ) 将世界坐标还原到对象局部。
构造法线矩阵的数学形式(逆转置),用于非均匀缩放时的法线校正。
撤销自定义 2D/3D 变换(如 UV 变换矩阵、骨骼/实例矩阵)。
在投影、重建或后期处理中,获取从目标空间回到源空间的映射。
如何调整
该节点为纯函数,调整在于修改其输入矩阵。确保矩阵可逆(行列式非零);当存在接近 0 的缩放或退化矩阵时会导致数值不稳定。实践中避免将缩放设为 0,必要时在构造矩阵时将极小值夹紧到 EPSILON。
代码示例
1
2// 将世界空间坐标还原为局部空间(演示 inverse 的通用用法)
3const localPos = inverse( modelWorldMatrix ).mul( positionWorld );
4
5// (可选)结合转置可构造法线矩阵:transpose( inverse( mat3( modelViewMatrix ) ) )
6
7// 基于局部 Y 值混合颜色
8const t = localPos.y.remap( -1.0, 1.0 ).saturate();
9material.colorNode = mix( bottomColor, topColor, t );
10