GLSL 内置函数手册

写 shader 时最常用的内置函数,每一个都用通俗的语言讲清楚它做什么、什么时候用、容易在哪里出错,并附一个可以直接修改的实时示例。

常用函数

三角与指数函数

radians()float radians(float degrees)把角度从角度制换算成弧度制,sin、cos 等三角函数要求的正是弧度。degrees()float degrees(float radians)把角度从弧度制换算成角度制,方便用 45 度、90 度这样的数来思考。sin()float sin(float angle)返回弧度角的正弦值,是一条每 2 * PI 重复一次、始终在 -1.0 到 1.0 之间的平滑波形。cos()float cos(float angle)返回弧度角的余弦值:和 sin 是同一条波,只是提前了四分之一圈。tan()float tan(float angle)返回弧度角的正切值,即 sin / cos。在接近 90 度时会冲向无穷大。atan()float atan(float y, float x)返回正切值为 y / x 的弧度角。双参数形式 atan(y, x) 给出一个点绕原点的完整角度,范围是 -PI 到 PI。acos()float acos(float x)返回余弦值为 x 的弧度角。acos(dot(a, b)) 可以得到两个单位向量之间的夹角。pow()float pow(float x, float y)返回 x 的 y 次幂。作用在 0.0 到 1.0 之间的值上时,会把一条直线斜坡弯成曲线。sqrt()float sqrt(float x)返回 x 的平方根。作用在 0.0 到 1.0 之间时,会抬高低端:先快速上升,再逐渐变平。inversesqrt()float inversesqrt(float x)返回 1.0 / sqrt(x)。常用于向量归一化,以及随距离衰减的光照。exp()float exp(float x)返回 e(约 2.718)的 x 次幂。exp(-k * d) 是做光晕和雾效时最常用的平滑衰减。exp2()float exp2(float x)返回 2 的 x 次幂。适合每一级翻倍或减半的场景,比如噪声的倍频层和曝光档位。log()float log(float x)返回 x 的自然对数,是 exp 的反函数。它把乘法变成加法,可以用来做无限缩放效果。log2()float log2(float x)返回以 2 为底的对数:1.0 要翻倍几次才能得到 x。是 exp2 的反函数。

几何函数

纹理与导数

想系统地学?

函数手册适合随时查阅。如果你刚开始学 GLSL,可以从学习路径的第一课开始,每课一个知识点,并附练习。

开始学习