GLSL 内置函数

log()

返回 x 的自然对数,是 exp 的反函数。它把乘法变成加法,可以用来做无限缩放效果。

函数签名

float log(float x)
vec2 log(vec2 x)
vec3 log(vec3 x)

参数

x
大于 0 的值。

返回值

x 的自然对数。

在线示例

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

工作原理

log(x) 回答"e 的几次方等于 x":log(1.0) 是 0,log(2.718) 是 1。

它有用的性质是:x 乘以一个倍数,log(x) 就加上一个常数。距离翻倍时,不管离得近还是远,结果总是增加同样的量(约 0.69)。

示例把 log(length(p)) 作为棋盘格的一个轴,角度作为另一个轴。每一圈格子都比里面那圈大固定的倍数,所以沿着 log 轴移动,看起来就像在隧道里无限前进。

常见用法

  • 无限缩放和隧道:像示例那样使用对数极坐标。
  • 压缩大范围数值:亮度或密度跨越好几个数量级时,用 log(1.0 + x)。

常见错误

  • log(0.0) 或负数输入结果未定义,要加一个小偏移:log(length(p) + 1e-4)。
  • 以为是以 10 为底。GLSL 的 log 是自然对数,以 2 为底请用 log2。

相关函数