Switch
Switch
根据一个整数索引,从一系列选项中选择一个输出,是 TSL 中实现多路分支(switch-case)的核心节点。
核心优势
它将底层的 GLSL switch 逻辑抽象为一个简洁的节点,允许在单一材质中封装多种视觉效果。通过更新一个 uniform 整数,即可在运行时动态切换效果,避免了管理多个材质或切换材质带来的性能开销,极大地提升了代码的可读性和交互性。
常见用途
通过“Splat Map”实现地形材质混合,根据纹理中的索引值选择草地、沙地或岩石材质。
创建 PBR 材质的调试器,通过一个 uniform 变量切换显示最终颜色、法线、UV 或金属度等视图。
根据角色状态(如正常、中毒、狂暴)切换不同的视觉特效。
实现材质级别的 LOD,根据距离切换使用简单光照模型或复杂 PBR 光照模型。
如何调整
调整 Switch 节点主要有两种方式。一是改变其 `index` 输入(通常是一个 uniform 整数),这会决定当前选择哪个 `case` 输出,从而在预设的选项之间切换视觉效果,例如从“最终颜色”视图切换到“法线”视图。二是修改 `cases` 数组中的某个节点,这会改变该选项本身的内容,例如将“中毒”效果的紫色替换为“冰冻”效果的蓝色。
代码示例
1// debugMode 是一个 uniform 整数 (e.g., 0, 1, 2)
2const finalOutput = Switch( debugMode, [
3 pbrColor, // Case 0: 最终 PBR 颜色
4 normalWorld, // Case 1: 世界空间法线
5 vec3( uv, 0 ) // Case 2: UV 坐标
6] );