以下是 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 限制在 min 和 max 之间。用于值范围控制。 |
saturate(x) |
等同于 clamp(x, 0, 1) ,将 x 限制在 0 到 1 之间。 |
lerp(a, b, t) |
在 a 和 b 之间线性插值,t 为插值因子(0 到 1)。 |
smoothstep(a, b, x) |
在 a 和 b 之间平滑插值,返回 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) |
返回 x 的 y 次方。常用于光照衰减或指数效果。 |
exp(x) |
返回 e 的 x 次方。 |
log(x) |
返回 x 的自然对数。 |
sqrt(x) |
返回 x 的平方根。 |
rsqrt(x) |
返回 1 / sqrt(x) ,快速求逆平方根。 |
min(a, b) |
返回 a 和 b 中的较小值。 |
max(a, b) |
返回 a 和 b 中的较大值。 |
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 限制在 min 和 max 之间。 |
lerp(a, b, t) |
在 a 和 b 之间线性插值,t 为插值因子。 |
smoothstep(a, b, x) |
在 a 和 b 之间平滑插值,返回 0 到 1 之间的值。 |
pow(x, y) |
返回 x 的 y 次方。 |
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 中最常用的函数和变量,以及基础运算函数。这些工具广泛应用于光照计算(如 dot
、reflect
)、纹理采样(如 tex2D
)、矩阵变换(如 mul
、unity_ObjectToWorld
)和动画效果(如 _Time
)。掌握这些函数和变量,可以帮助你高效实现各种视觉效果。