一、基础常用函数
-
max(a,b)
-
返回较大数值
-
-
min(a,b)
-
返回较小数值
-
-
mul(a,b)
- 两变量相乘,常用矩阵运算
-
abs(a)
- 返回a的绝对值
-
round(x)
- 返回与x最近的整数
-
sqrt(x)
- 返回x的平方根
-
rsqrt(x)
- 返回x的平方根的倒数
-
degress(x)
- 将弧度转换成角度
-
redians(x)
- 将角度转换成弧度
-
noise(x)
- 噪声函数
二、幂指对函数
-
pow(x,y)
- x的y次幂(x和y均可为自变量或具体的数) 即
- x的y次幂(x和y均可为自变量或具体的数) 即
-
exp(x)
- 返回以e为底的指数函数 即
- 返回以e为底的指数函数 即
-
exp2(value x)
- 返回以2为底,x为指数的幂 即
- 返回以2为底,x为指数的幂 即
-
ldexp(x,exp)
- 返回x与2的exp次方的乘积 即x *
- 返回x与2的exp次方的乘积 即x *
-
log(x)
- 返回指定值的以e为底的对数 即ln x
-
log10(x)
- 求对比度10为底的对数 即log
- 求对比度10为底的对数 即log
-
log2(x)
- 求以2为底的对数 即log
- 求以2为底的对数 即log
-
frexp(x,out exp)
- 把浮点数x分解成尾数和指数 x= ret*
,返回值是尾数,exp参数返回的值是指数(如果x参数为0,则此函数的尾数和指数均返回0)
- 把浮点数x分解成尾数和指数 x= ret*
三、三角函数与双曲函数
-
sin(x),cos(x),tan(x)
- 下划线前x元旦为弧度
-
sincos(x,out s,out c)
- 返回x的正弦值和余弦值
-
tan(y,x)
- 返回y/x的正切值
-
asin(x)
- 返回输入值的反正弦值
-
acos(x)
- 返回输入值反余弦值
-
atan(x)
- 返回输入值的反正切值
-
atan2(y,x)
- 返回y/x的反正切值
-
sinh(x)
- 返回x扔双曲正弦值 即(
-
)/2
- 返回x扔双曲正弦值 即(
-
cosh(x)
- 返回x的双曲余弦值 即(
+
)/2
- 返回x的双曲余弦值 即(
-
tanh(x)
- 返回x的双曲正切值 即(
-
) / (
+
)
- 返回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,大于返回max
-
fmord(x,y)
- 返回x对y取余的余数
-
frac(x)
- 返回x的小数部分
-
modf(x,out ip)
- 将x分为小数的整数部份(各部份符号与x相同),ip返回整数部份,整体返回小数部份
-
lerp(x,y,s)
- 按照s在x到y之间插值,即返回x*(1-s)+y*s
-
smoothstep(min,max,x)
- 如果x在[min,max]范围内,则返回介于0和1之间的平滑Hermite插值,使用smoothstep在两个值之间创建平滑过渡。例如平滑地混合两种颜色。
五、类型判断类
-
all(x)
- 确定指定量的所有分量是否均为非零,均非零则返回true,否则返回false(处理由浮点型、整型、布尔型数据定义的标量、向量或者矩阵)
-
clip(x)
- 如果输入值小于0,则丢弃当前像素,常用于判定范围(不仅仅针对0,返回值为void)常用于测试alpha,如果每个分量代表到平面的距离,还可以用来模拟剪切平面
-
sign(x)
- 返回x的正负性,如果x小于0返回-1,如果x等于0返回0,如果x大于0返回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)
- 返回a和b这两个向量的点积(又叫标积/内积/数量积)(a在b上的投影长,a
b=|a||b|
)
- 返回a和b这两个向量的点积(又叫标积/内积/数量积)(a在b上的投影长,a
-
cross(a,b)
- 返回a和b这两个向量的叉积(又叫矢积/外积/向量积)(返回值是个向量,而且与a、b都垂直,大小上|a x b| = |a| * |b| *
)
- 返回a和b这两个向量的叉积(又叫矢积/外积/向量积)(返回值是个向量,而且与a、b都垂直,大小上|a x b| = |a| * |b| *
-
determinant(m)
- 返回矩阵m按行列式方式计算的值
-
transpose(m)
- 返回矩阵m的转置矩阵
七、光线运算类
-
reflect(i,n)
- 以i为入射向量n为法线方向的反射光
-
refract(i,n,ri)
- 以i为入射向量n为法线方向,ri为折射率的折射光
-
lit(n_dot_l,n_dot_h,m)
- 输入标量(normal,light,半角向量h,镜面反射系数m)返回光照向量(环境光,漫反射光,镜面高光反射,1)
-
faceforward(n,i,ng)
- 得到面向视图方向的曲面法向量,输入输出为同元向量,返回-n*sign(dot(i,ng) (normal,light,normal)
八、1D纹理查找
- GPU在片元处理(PixelShader)阶段是在屏幕空间XY坐标系中对每一个像素去对应的纹理中查找对应的纹素来确定像素的颜色
-
tex1D(s,t)
- 普通一维纹理查找 返回纹理采样器s在标量t位置的color4
-
tex1D(s,t,ddx,ddy)
- 使用微分查询一维纹理t和ddxy均为vector
-
tex1Dlod(s,t)
- 使用LOD查找纹理s在t.w位置的color4
-
tex1Dbias(s,t)
- 将t.w决定的某个MIP层偏置后的一维纹理查找
-
tex1Dgrad(s,t,ddx,ddy)
- 使用微分并指定MIP层的一维纹理查找
-
tex1Dproj(s,t)
- 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询
九、2D纹理查找
-
tex2D(s,t)
- 普通二维纹理查找 返回纹理采样器s在标量t(x,y)位置的颜色
-
tex2D(s,t,ddx,ddy)
- 使用微分查询二维纹理t和ddx和ddy均为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除以透视值),然后使用投影纹理坐标进行查询
十、3D纹理查找
-
tex3D(s,t)
- 普通三维纹理查找 返回纹理采样器s在vector t位置的颜色
-
tex3D(s,t,ddx,ddy)
- 使用微分查询三维纹理t和ddxy均为vector
-
tex3Dlod(s,t)
- 使用LOD查找纹理s在t.w位置的color4
-
tex3Dbias(s,t)
- 将t.w决定的某个MIP层偏置后的三维纹理查找
-
tex3Dgrad(s,t,ddx,ddy)
- 使用微分并指定MIP层的三维纹理查找
-
tex3Dproj(s,t)
- 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询
十一、立方体纹理查找
-
texCUBE(s,t)
- 返回纹理采样器s在vector t位置的颜色
-
texCUBE(s,t,ddx,ddy)
- 使用微分查询立方体纹理t和ddxy均为vector
-
texCUBElod(s,t)
- 使用LOD查找纹理s在t.w位置的color4
-
texCUBEbias(s,t)
- 将t.w决定的某个MIP层偏置后的立方体纹理查找
-
texCUBEgrad(s,t,ddx,ddy)
- 使用微分并指定MIP层的立方体纹理查找
-
texCUBEproj(s,t)
- 使用投影方式的立方体纹理查找