GLSL 内置函数

min()

返回 x 和 y 中较小的那个。传入向量时,逐个分量比较。

函数签名

float min(float x, float y)
vec2 min(vec2 x, vec2 y)
vec2 min(vec2 x, float y)
vec3 min(vec3 x, vec3 y)
vec3 min(vec3 x, float y)

参数

x
第一个值。
y
第二个值。x 是向量时,y 也可以是单个浮点数。

返回值

较小的那个值,类型与 x 相同。

在线示例

修改右侧代码,左侧预览会实时更新。

工作原理

min(x, y) 返回两者中较小的那个。min(0.3, 0.8) 是 0.3。

它在有符号距离场(SDF)里最有用:距离小于 0 表示"在图形内部"。对两个距离取 min,像素只要在任意一个图形里就算在内部,所以示例画出的是两个圆的并集。右边的圆来回移动时,重叠的部分会合并成一个整体轮廓。

float d = min(da, db); // 两个图形的并集

常见用法

  • 合并图形:min(sdfA, sdfB) 就是 A 和 B 的并集。
  • 设上限:min(brightness, 1.0) 让数值不超过 1.0。
  • 找最近的点:循环遍历多个点,保留 min(d, distance(p, point)),就能找到最近的那个,这是 Voronoi 图案的核心。

常见错误

  • 想用 min 同时限制上下限。那需要 clamp(x, lo, hi),它等于 min(max(x, lo), hi)。
  • 以为向量版 min 会挑出"较小的向量"。min(vec2(1.0, 0.0), vec2(0.0, 1.0)) 的结果是 vec2(0.0, 0.0),因为每个分量单独比较。

相关函数

用到 min() 的教程