平滑最小值
13 / 18
练习着色器中常用的数学基础积木。
普通的 min(a, b) 会在两个形状边界处产生硬折痕。smin(smooth minimum)用一条曲线平滑地连接两个距离场,让形状「融合」在一起:
min 和 smin 的区别
min(d1, d2) 取两者中较小的那个,两个圆的边界会在交汇处出现一个尖锐的折角——因为距离场在那里不连续。
smin(d1, d2, k) 在两个形状靠近时,把它们的距离场柔和地混合在一起,交汇处变成圆滑的连接,视觉上像橡皮泥被捏在一起。
第三个参数 k 控制融合范围
k = 0.2 时,融合发生在两个形状距离约 0.2 单位的范围内。k 越大,融合区域越宽越软;k 趋近于 0,效果接近普通 min。
场景中有什么
画布里有两个圆形 SDF(有向距离场),圆心分别在 (-0.12, 0) 和 (0.12, 0),半径都是 0.18。它们微微重叠。用 min 合并时,交汇处有硬折;改用 smin 后,两圆像水滴一样融合成一个整体。
试着改一改
| 改动 | 效果 |
|---|---|
0.2 改为 0.05 | 融合区域缩小,接近硬 min 的效果 |
0.2 改为 0.5 | 融合区域很大,两圆像被强力捏在一起 |
两圆圆心间距从 0.24 改为 0.4 | 两圆不再重叠,但 smin 仍会在近处产生细微融合 |
半径从 0.18 改为 0.12 | 两圆变小,间距更明显 |
练习
把 float d = min(d1, d2); 改为使用 smin,让两个圆平滑地融合在一起。
答案解析
初始状态:min(d1, d2) 在两圆交汇处产生尖角——两个距离场直接相切,没有过渡。
改动后:smin(d1, d2, 0.2) 在两圆距离约 0.2 单位的范围内引入一条平滑混合曲线,距离场在交汇处变得连续,渲染出来的形状就像两个水滴合并。
试着把 k 改为 1.0,感受极宽融合区域下整个形状如何变成一个椭圆形的整体。