GLSL 内置函数

exp()

返回 e(约 2.718)的 x 次幂。exp(-k * d) 是做光晕和雾效时最常用的平滑衰减。

函数签名

float exp(float x)
vec2 exp(vec2 x)
vec3 exp(vec3 x)
vec4 exp(vec4 x)

参数

x
指数。为负数时,结果在 0.0 到 1.0 之间。

返回值

e 的 x 次幂,结果总大于 0。

在线示例

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

工作原理

exp(x) 在 x 为正数时增长得非常快,所以在 shader 里大多用负数作为输入:

dexp(-4.0 * d)
0.01.0
0.250.37
0.50.14
1.00.02

结果从 100% 开始,距离每增加一步就按相同的比例缩小,但永远不会真正变成 0。光线在雾中、或在发光物体周围自然衰减就是这个样子。示例里 d 是到中心的距离,k 控制光晕衰减的快慢。

常见用法

  • 光晕:在点、线或任意 SDF 周围用 exp(-k * distance)。
  • 距离雾:mix(fogColor, color, exp(-density * depth))。
  • 与帧率无关的平滑跟随:mix(current, target, 1.0 - exp(-speed * dt))。

常见错误

  • 不小心传入正数。exp(10.0) 超过 22000,会超出 mediump 精度,颜色直接饱和。
  • 以为光晕会在固定半径处结束。exp 永远不会到 0,需要硬边界时,再乘一个 smoothstep 遮罩。

相关函数