【Unity Shader编程】之常见函数及变量总结

以下是 Unity Shader 中常见且常用的函数列表、变量列表以及基础运算函数的整理,均附带详细注释,方便理解和使用。


常见 Unity Shader 函数列表及注释

以下是 Unity Shader 中常用的内置函数,涵盖向量运算、光照计算、插值和纹理采样等功能:

函数 说明
dot(a, b) 计算两个向量的点积,返回标量。常用于光照计算(如漫反射强度)。
cross(a, b) 计算两个向量的叉积,返回一个垂直于两者的向量。常用于计算法线。
normalize(v) 将向量归一化,返回单位向量。常用于方向计算。
reflect(i, n) 计算入射向量 i 相对于法线 n 的反射向量。用于镜面反射。
refract(i, n, eta) 计算入射向量 i 相对于法线 n 的折射向量,eta 是折射率。
length(v) 返回向量的长度(模)。用于距离或大小计算。
distance(a, b) 返回两点之间的欧几里得距离。
clamp(x, min, max) x 限制在 minmax 之间。用于值范围控制。
saturate(x) 等同于 clamp(x, 0, 1),将 x 限制在 0 到 1 之间。
lerp(a, b, t) ab 之间线性插值,t 为插值因子(0 到 1)。
smoothstep(a, b, x) ab 之间平滑插值,返回 0 到 1 之间的值。
step(edge, x) 如果 x >= edge 返回 1,否则返回 0。用于二值化处理。
frac(x) 返回 x 的小数部分。常用于循环或纹理重复效果。
floor(x) 返回小于或等于 x 的最大整数。
ceil(x) 返回大于或等于 x 的最小整数。
abs(x) 返回 x 的绝对值。
sin(x), cos(x), tan(x) 三角函数,返回正弦、余弦、正切值。常用于波形动画。
asin(x), acos(x), atan(x) 反三角函数,返回弧度制的角度。
atan2(y, x) 返回 y/x 的反正切,考虑象限,返回弧度值。
pow(x, y) 返回 xy 次方。常用于光照衰减或指数效果。
exp(x) 返回 e 的 x 次方。
log(x) 返回 x 的自然对数。
sqrt(x) 返回 x 的平方根。
rsqrt(x) 返回 1 / sqrt(x),快速求逆平方根。
min(a, b) 返回 ab 中的较小值。
max(a, b) 返回 ab 中的较大值。
mul(M, v) 将矩阵 M 与向量 v 相乘,返回变换后的向量。
transpose(M) 返回矩阵 M 的转置矩阵。
inverse(M) 返回矩阵 M 的逆矩阵(如果存在)。
determinant(M) 返回矩阵 M 的行列式。
tex2D(sampler, uv) 从 2D 纹理采样颜色,uv 是纹理坐标。
TRANSFORM_TEX(v.uv, _MainTex) 将顶点原始的 UV 坐标与材质面板中的 **Tiling(缩放)**和 **Offset(偏移)**参数结合运算,生成最终的纹理采样坐标
texCUBE(sampler, dir) 从立方体纹理采样颜色,dir 是方向向量。

常见 Unity Shader 变量列表及注释

以下是 Unity Shader 中常见的内置变量,提供场景、物体、光照和时间等信息:

变量 说明
_Time 当前时间(float4: t/20, t, t2, t3),用于动画效果。
_SinTime 正弦时间(float4: sin(t/8), sin(t/4), sin(t/2), sin(t))。
_CosTime 余弦时间(float4: cos(t/8), cos(t/4), cos(t/2), cos(t))。
_WorldSpaceCameraPos 摄像机在世界空间中的位置(float3)。
_ProjectionParams 投影参数(float4: 1, near, far, 1/far)。
_ScreenParams 屏幕参数(float4: width, height, 1/width, 1/height)。
_ZBufferParams Z 缓冲区参数,用于线性化深度值。
unity_ObjectToWorld 当前物体的模型矩阵(float4x4),将物体空间转换到世界空间。
unity_WorldToObject 当前物体的世界到物体矩阵(float4x4),将世界空间转换到物体空间。
unity_MatrixVP 当前的视图投影矩阵(float4x4),将世界空间转换到裁剪空间。
unity_MatrixV 当前的视图矩阵(float4x4),将世界空间转换到视图空间。
unity_MatrixP 当前的投影矩阵(float4x4),将视图空间转换到裁剪空间。
unity_DeltaTime 时间增量(float4: dt, 1/dt, smoothDt, 1/smoothDt)。
_LightColor0 当前光源的颜色(float4),用于光照计算。
_WorldSpaceLightPos0 当前光源在世界空间中的位置(float4),用于定向光和点光源。
_MainTex 主纹理(sampler2D),常用于漫反射贴图。
_BumpMap 法线贴图(sampler2D),用于凹凸效果。
_Specular 镜面反射颜色(float4),用于高光计算。
_Glossiness 光泽度(float),控制高光的锐度。

基础运算函数

以下是最基础的运算函数,常用于 Shader 的核心计算:

函数 说明
mul(M, v) 将矩阵 M 与向量 v 相乘,返回变换后的向量。
dot(a, b) 计算两个向量的点积,返回标量。
cross(a, b) 计算两个向量的叉积,返回一个垂直于两者的向量。
normalize(v) 将向量归一化,返回单位向量。
length(v) 返回向量的长度(模)。
distance(a, b) 返回两点之间的欧几里得距离。
clamp(x, min, max) x 限制在 minmax 之间。
lerp(a, b, t) ab 之间线性插值,t 为插值因子。
smoothstep(a, b, x) ab 之间平滑插值,返回 0 到 1 之间的值。
pow(x, y) 返回 xy 次方。
exp(x) 返回 e 的 x 次方。
log(x) 返回 x 的自然对数。
sqrt(x) 返回 x 的平方根。
sin(x), cos(x), tan(x) 三角函数,返回正弦、余弦、正切值。
asin(x), acos(x), atan(x) 反三角函数,返回弧度制的角度。
atan2(y, x) 返回 y/x 的反正切,考虑象限。

总结

以上列表涵盖了 Unity Shader 中最常用的函数和变量,以及基础运算函数。这些工具广泛应用于光照计算(如 dotreflect)、纹理采样(如 tex2D)、矩阵变换(如 mulunity_ObjectToWorld)和动画效果(如 _Time)。掌握这些函数和变量,可以帮助你高效实现各种视觉效果。