faceDirection
faceDirection
在 TSL 着色器中提供一个数值(正面为 1.0,背面为 -1.0),用于区分几何体的正面与背面,它是对底层 `frontFacing` 布尔状态的数值化封装。
核心优势
将一个布尔状态转换为一个浮点数,极大地简化了着色器逻辑。它非常适合用作数学运算(尤其是 `mix` 函数)的因子,避免了条件分支,使代码更简洁、更符合 TSL 的函数式风格。
常见用途
作为 `mix` 函数的因子,为物体正反面混合不同的颜色或纹理。
在卡通渲染中,用于识别背面以实现“反转外壳”描边效果。
动态调整菲涅尔等视觉效果在物体内外两侧的强度。
作为调试工具,将正反面映射到不同颜色以检查模型法线方向。
如何调整
此节点的值不可调整。它的输出是固定的 1.0(正面)或 -1.0(背面)。关键在于如何使用这个值,通常是将其重新映射到 [0, 1] 范围,用作混合因子。要使其生效,必须在 JavaScript 中将材质的 `side` 属性设置为 `THREE.DoubleSide`。
代码示例
1// 将 faceDirection 的 [-1, 1] 输出范围映射到 [0, 1]
2const alpha = faceDirection.add( 1.0 ).mul( 0.5 );
3
4// 使用 alpha 在背面颜色和正面颜色之间进行混合
5// 当为背面时 alpha=0, 结果为 backColor
6// 当为正面时 alpha=1, 结果为 frontColor
7const finalColor = mix( backColor, frontColor, alpha );