平滑边缘

29 / 30
学习使用smoothstep函数创建平滑的边缘过渡效果,对比step函数的硬边缘。

step 产生硬切边,但很多效果需要柔和的过渡。smoothstep 在两个阈值之间做平滑插值。


smoothstep 是什么

smoothstep(edge0, edge1, x)edge0edge1 之间平滑地从 0 过渡到 1:

  • x <= edge0 → 返回 0.0
  • x >= edge1 → 返回 1.0
  • 中间 → 平滑过渡
  • d < 0.2:mask = 1.0(圆心,白色)
  • d > 0.3:mask = 0.0(圆外,黑色)
  • 0.2 < d < 0.3:柔和过渡

对比 step 和 smoothstep

step 在边界处突变,smoothstep 在 edge0~edge1 之间慢慢过渡。过渡宽度 = edge1 - edge0,越小越接近硬边。


练习

练习代码里 mask = 0.0(全黑)。用 smoothstep(0.2, 0.3, d) 计算软边圆形遮罩。

答案解析

smoothstep(0.2, 0.3, d) 在 d = 0.2 处开始从 0 增长,到 d = 0.3 时变成 1。用 1.0 - 反转:圆心为白,圆外为黑。

过渡范围是 0.3 - 0.2 = 0.1。把 0.3 改成 0.25,过渡变窄,边缘更硬;改成 0.5,过渡变宽,边缘更模糊。

GLSL 代码编辑器

正确代码预览

当前代码预览