# 【UnityShader常用数学函数】
# 函数
sin(x) - 返回x的正弦值。
cos(x) - 返回x的余弦值。
tan(x) - 返回x的正切值。
asin(x) - 返回x的反正弦值。
acos(x) - 返回x的反余弦值。
atan(x) - 返回x的反正切值。
atan2(y,x) - 返回y/x的反正切值。
sqrt(x) - 返回x的平方根。
pow(x,y) - 返回x的y次方。
exp(x) - 返回e的x次幂。
log(x) - 返回x的自然对数。
abs(x) - 返回x的绝对值。
min(x,y) - 返回x和y中较小的值。
max(x,y) - 返回x和y中较大的值。
lerp(x,y,t) - 返回从x到y之间的线性插值,t控制插值位置。
ceil(x) - 返回不小于x的最小整数。
floor(x) - 返回不大于x的最大整数。
round(x) - 返回最接近x的整数。
sign(x) - 返回x的符号。如果x大于0,则返回1;如果x小于0,则返回-1;如果x等于0,则返回0。
fmod(x,y) - 返回x/y的余数。
frac(x) - 返回x的小数部分。
modf(x,out) - 分别返回x的整数部分和小数部分,将整数部分存储在out中。
clamp(x,min,max) - 返回一个值,该值被限制在min和max之间。
smoothstep(min,max,x) - 返回一个值,该值在min和max之间,如果x小于min,则返回0,如果x大于max,则返回1;否则返回一个在0和1之间的平滑过渡值。
step(edge,x) - 如果x小于边缘,则返回0,否则返回1。
saturate(x) - 返回一个值,该值被限制在0和1之间。
lerp(x,y,a) - 返回从x到y之间的线性插值,a控制插值位置。
mix(x,y,a) - 等价于 lerp(x,y,a)。
dot(x,y) - 返回向量x和y的点积。
cross(x,y) - 返回向量x和y的叉积。
normalize(x) - 返回向量x的单位向量。
length(x) - 返回向量x的长度。
distance(x,y) - 返回向量x和y之间的距离。
transpose(m) - 返回矩阵m的转置矩阵。
determinant(m) - 返回矩阵m的行列式。
inverse(m) - 返回矩阵m的逆矩阵。
reflect(i,n) - 返回入射向量i关于法向量n的反射向量。
refract(i,n,eta) - 返回入射向量i经过介质n与介质之间折射率比为eta的界面发生折射后的折射向量。
faceforward(n,i,nref) - 如果向量i和法向量n之间的夹角小于90度,则返回n,否则返回-n。
mod(a,b) - 返回a除以b的余数。
exp2(x) - 返回2的x次幂。
log10(x) - 返回x的以10为底的对数。
pow(x,y) - 返回x的y次方。
rsqrt(x) - 返回x的平方根的倒数。
smoothstep(min,max,x) - 返回一个值,该值在min和max之间,如果x小于min,则返回0,如果x大于max,则返回1;否则返回一个在0和1之间的平滑过渡值。
step(edge,x) - 如果x小于边缘,则返回0,否则返回1。
fwidth(p) - 返回向量p相对于像素在屏幕上移动时的变化率,通常用于计算抗锯齿。
mul(pos,矩阵) - 把点进行应用矩阵转换,Unity默认的矩阵都是 mul(矩阵,pos) 矩阵放在左侧的方式。
# 数学算法
0~1 转 -1~1 (x * 2 - 1)
-1 ~ 1 转 0 ~ 1 (x * 0.5 + 0.5)