objectScale
objectScale
一个 vec3 向量,代表物体在世界空间中的最终缩放比例。它能精确地反映物体在X、Y、Z轴上被拉伸或压缩的程度,综合了其自身及所有父级的缩放影响。
核心优势
它能防止非均匀缩放导致的纹理和光照变形,是实现“挤压与拉伸”等形变特效的基础。它通过自动从世界矩阵中分解缩放值,简化了开发流程,避免了手动传递 uniform 和复杂的计算。
常见用途
校正三平面纹理映射:抵消物体缩放,确保程序化纹理保持正确的比例。
“挤压与拉伸”特效:作为形变程度的直接输入,驱动颜色变化或顶点位移。
自定义光照中的法线校正:为精确的光照计算提供关键的缩放数据。
如何调整
该节点在着色器中是只读的。调整其效果需要在 JavaScript 中修改物体的 `.scale` 属性(如 `mesh.scale.set(2, 0.5, 1)`)。着色器会实时响应这些变化,例如,在三平面映射中,这会改变用于抵消拉伸的校正因子。
代码示例
1
2// 使用 objectScale 校正三平面映射的坐标
3// 防止因物体非均匀缩放导致的纹理拉伸
4const correctedCoords = positionWorld.div( objectScale() );
5const triplanarTexture = texture( myTexture, correctedCoords );
6