硬边遮罩
25 / 30
通过 step() 函数构造一个具有明确边界的遮罩,掌握 GLSL 中的二值化处理。
mix 的因子通常是 0 到 1 的连续值,产生平滑渐变。step 函数让因子只输出 0 或 1,产生硬切边。
step 是什么
step(edge, x) 只返回两个值:
x < edge→ 返回0.0x >= edge→ 返回1.0
这行代码:左半边(vUv.x < 0.5)得到 0,右半边(vUv.x >= 0.5)得到 1。没有过渡,边界是硬的。
用 mask 选择颜色
把 mask 传给 mix,就能在两种颜色之间做硬切换:
试着改一改
把阈值从 0.5 改成其他值,切线会移动:
| 阈值 | 效果 |
|---|---|
| 0.3 | 左边只占 30% |
| 0.7 | 左边占 70% |
| 0.5 | 左右各一半(默认) |
练习
练习代码里 mask = 0.0(画面全是 leftColor)。用 step(0.5, vUv.x) 计算 mask,让画面左半边和右半边颜色不同。
答案解析
step(0.5, vUv.x) 在 vUv.x = 0.5 处从 0 跳到 1,产生垂直切线。
mix(leftColor, rightColor, mask) 用这个 0/1 值切换颜色:mask 为 0 时全是左边颜色,为 1 时全是右边颜色。
把阈值改成 step(vUv.y, 0.5) 试试,切线方向会变成水平的。