基本数学运算
max(a,b) 返回较大的
min(a,b)返回较小的
mul(a,b) 两向量相乘
abs(a)返回a的绝对值
round(x)返回与x最近的整数
sqrt(x)返回x的平方根
rsqrt(x)返回x的平方根倒数
degrees(x)将弧度转化为角度
redians(x)将角度转化为弧度
noise(x) 噪声函数
网站:https://graphtoy.com/ 可将数学公式输入可视化
幂指对函数与偏导数
pow(x,y)x的y次幂
exp(x)返回以e为底的指数函数
exp2(value x)返回以2为底,x为指数的幂
ldexp(x,exp)返回与2的exp次方的乘积
log(x) 返回指定值的以e为底数的对数
log10(x) 以10为底的对数
log2(x)以2为底数的对数
三角函数和双曲线函数
sin(x)、cos(x)、tan(x)
下划线前X均为弧度
三角函数(弧度制:1°=π/180 rad)
asin(x)、acos(x)、atan(x)
反三角函数
数据范围
ceil(x)返回>=x的最小整数
floor(x)返回<=x的最大整数
step(x,y) x<=y返回1,否则返回0
saturate(x) 返回将x钳制到[0,1]范围之间的值
clamp(x,min,max) 将x限制在[min,max]范围的值,比min小返回min,比max大返回max
fmod(x,y)返回x对y取余的余数
frac(x)取x的小数部分
modf(x,out ip)将x分为小数和整数部分(输出的ip为整数部分,返回值为小数部分)
lerp(x,y,s)按照s在x到y之间插值
smoothstep(min,max,x)如果x在[min,max]范围内,就返回介于[0,1]之间的平滑插值
类型判断类
all(x)确定指定量的所有分量是否均为非零,均非零则返回true,否则返回false(处理由浮点型、整型、布尔型数据定义的标量、向量或者矩阵)
clip(x)
如果输入值小于零,则丢弃当前像素 常用于判定范围(不仅仅针对0,返回值为void)
常用于Alpha Test,如果每个分量代表到平面的距离,还可以用来模拟剪切平面
sign(x)返回x的正负性
如果x小于零返回-1
如果x等于零返回0
如果x大于零返回1
isinf(x)
如果x参数为+ INF或-INF(无穷+无穷仍无穷,0x3f3f3f3f),返回true,否则返回False
isfinite(x)
判断x参数是有限,即有界的,与isinf(x)相反
isnan(x)
如果x参数为NAN(非数字),返回true,否则返回false
向量和矩阵类
length(v) 返回向量的长度
normalize(v) 向量归一化,x/length(x) 方向向量归一化
distance(a,b) 返回两个向量之间的距离,不平行的两个向量应该为0,此处表示为根号下各分量之差的平方和
dot(a,b) 点积
cross(a,b) 叉积
determinant(m) 返回指定浮点矩阵的按行列式方式计算的值
transpose(m) 返回矩阵m的转置矩阵
光线运算类
reflect(i,n) 以i为入射向量n为法线方向的反射光
refract(i,n,ri) 以i为入射向量n为法线方向,ri为折射率的折射光
纹理查找
2D纹理查找
tex2D(s, t) 普通二维纹理查找 返回纹理采样器s在vector t位置的颜色
tex2D(s,t,ddx,ddy) 使用微分查询二维纹理,t和ddxy均为vector
tex2Dlod(s, t) 使用LOD查找纹理s在t.w位置的color4
tex2Dbias(s, t) 将t.w决定的某个MIP层偏置后的二维纹理查找
tex2Dgrad(s,t,ddx,ddy) 使用微分并指定MIP层的二维纹理查找
tex2Dproj(s, t) 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询
立体纹理查找
texCUBE(s,t) 返回纹理采样器s在vector t位置的颜色
texCUBE(s,t,ddx,ddy) 使用微分查询立方体维纹理 ,t和ddxy均为vector
texCUBEDload(s,t) 使用LOD查找纹理s在t.w位置的color4
texCUBEbias(s,t) 将t.w决定的某个MIP层偏置后的立方体纹理查找
texCUBEgrad(s,t,ddx,ddy) 使用微分并指定MIP层的立方体纹理查找
texCUBEproj(s,t) 使用投影方式的立方体纹理查找