GLSL 内置函数

inversesqrt()

返回 1.0 / sqrt(x)。常用于向量归一化,以及随距离衰减的光照。

函数签名

float inversesqrt(float x)
vec2 inversesqrt(vec2 x)
vec3 inversesqrt(vec3 x)

参数

x
大于 0 的值。

返回值

1.0 / sqrt(x),类型与 x 相同。

在线示例

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

工作原理

inversesqrt(x) 一次调用就算出 1.0 / sqrt(x):inversesqrt(4.0) 是 0.5。

配合 dot(v, v)(长度的平方)使用,就得到 1.0 / length(v)。示例把它当作每盏灯的亮度:紧挨着灯非常亮,随距离缓慢变暗,于是出现了重叠处会叠加的柔和光球。

常见用法

  • 手动归一化:v * inversesqrt(dot(v, v)) 和 normalize(v) 完全一样。
  • 光晕和衰减:k * inversesqrt(dot(q, q)) 得到按 1 / 距离 衰减的光晕。

常见错误

  • 传入 0 或负数。结果未定义,要加一个很小的数,比如 dot(q, q) + 1e-4。
  • 只是为了性能才用它。现代 GPU 上 normalize 和 length 都很快,哪个更易读就用哪个。

相关函数