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 里大多用负数作为输入:
| d | exp(-4.0 * d) |
|---|---|
| 0.0 | 1.0 |
| 0.25 | 0.37 |
| 0.5 | 0.14 |
| 1.0 | 0.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遮罩。