Unity Shader 常用函数列表
CG 标准函数库
和 C 的标准函数库类似,Cg 提供了一系列内建的标准函数。这些函数用于执行数学上的通用计算或通用算法(纹理映射等),例如,需要求取入射光线的反射光线方向向量可以使用标准函数库中的 reflect 函数,求取折射光线方向向量可以使用 refract 函数,做矩阵乘法运算时可以使用 mul 函数。
有些函数直接和 GPU 指令相对应,所以执行效率非常高。绝大部分标准函数都被重载过,用于支持不同长度的数组和向量作为输入参数。
Cg 标准函数会随着未来 GPU 硬件的发展而不断优化,所以基于标准函数库写的程序是可以用在以后的 GPU 硬件上的。 Cg 标准函数库主要分为五个部分:
数学函数(Mathematical Functions);
几何函数(Geometric Functions);
纹理映射函数(Texture Map Functions)
偏导数函数(Derivative Functions);
调试函数(Debugging Function)
数学函数(Mathematical Functions)
数学函数用于执行数学上常用计算,包括:三角函数、幂函数、园函数、向量和矩阵的操作函数。这些函数都被重载,以支持标量数据和不同长度的向量作为输入参数。
函数 功能
abs(x) 返回输入参数的绝对值
acos(x) 反余切函数,输入参数范围为[-1,1],返回[0,π]区间的角度值
all(x) 如果输入参数均不为0,则返回 ture;否则返回 flase。&&运算
any(x) 输入参数只要有其中一个不为 0,则返回 true。||运算
asin(x) 反正弦函数,输入参数取值区间为[−1,1],返回角度值范围为[−π/2 ,π/2 ]
atan(x) 反正切函数,返回角度值范围为⎡−π/2 ,π/2 ⎤
atan2(y,x) 计算 y/x 的反正切值。实际上和 atan(x)函数功能完全一样,至少输入参数不同。atan(x) = atan2(x, float(1))
ceil(x) 对输入参数向上取整。例如:ceil(float(1.3)) ,其返回值为 2.0
clamp(x,a,b) 如果 x 值小于 a,则返回 a;如果 x 值大于 b,返回 b;否则,返回 x
cos(x) 返回弧度 x 的余弦值。返回值范围为[−1,1]
osh(x) 双曲余弦(hyperbolic cosine)函数,计算 x 的双曲余弦值
cross(A,B) 返回两个三元向量的叉积(cross product)。注意,输入参数必须是三元向量
degrees(x) 输入参数为弧度值(radians),函数将其转换为角度值(degrees)
determinant(m) 计算矩阵的行列式因子
dot(A,B) 返回 A 和 B 的点积(dot product)。参数 A 和 B 可以是标量,也可以是向量(输入参数方面,点
积和叉积函数有很大不同)
exp(x) 计算ex 的值,e= 2.71828182845904523536
exp2(x) 计算2x 的值
floor(x) 对输入参数向下取整。例如floor(float(1.3)) 返回的值为 1.0;但是 floor(float(-1.3))返回的值为-2.0。
fmod(x,y) 返回 x/y 的余数。如果 y 为 0,结果不可预料
frexp(x, out exp) 将浮点数 x 分解为尾数和指数,即 x = m* 2^exp,返回 m,并将指数存入 exp 中;如果 x 为 0,则尾数和指数都返回 0
frac(x) Returns the fractional portion of a scalar or each vector component
isfinite(x) 判断标量或者向量中的每个数据是否是有限数,如果是返回 true;否则返回false;无限的或者非数据(not-a-number NaN)
isinf(x) 判断标量或者向量中的每个数据是否是无限,如果是返回 true;否则返回false;
isnan(x) 判断标量或者向量中的每个数据是否是非数据(not-a-number NaN),如果是返回 true;否则返回 false;
ldexp(x, n) 计算x∗2n 的值
lerp(a, b, f) 计算(1− f )∗ + ∗a b f 或者a+ f ∗ −(b a)的值。即在下限 a 和上限 b 之间进行插值,f 表示权值。注意,如果 a 和 b 是向
量,则权值 f 必须是标量或者等长的向量。
lit(NdotL, NdotH, m) N 表示法向量;L 表示入射光向量;H 表示半角向量;m 表示高光系数。
函数计算环境光、散射光、镜面光的贡献,返回的 4 元向量:
1.位表示环境光的贡献,总是 1.0;
2.位代表镜面光的贡献,如果 N •L <0,则为0;否则为 N •L;
3.位代表镜面光的贡献,如果N •L<0或者 N •H <0 ,则位 0;否则为(N •H)m ;
W 位始终位 1.0
log(x) 计算ln(x)的值,x 必须大于 0
log2(x) 计算log(2x) 的值,x 必须大于 0
log10(x) 计算log10(x) 的值,x 必须大于 0
max(a, b) 比较两个标量或等长向量元素,返回 大值
min(a,b) 比较两个标量或等长向量元素,返回 小值
空间变化图:
以上仅供自己学习使用
更详细内容可查看此博客:
转载出自:https://www.cnblogs.com/lancidie/p/7827633.html