本文内容来自
【技术美术百人计划】图形 2.3 常用函数介绍
观后记录
美术岗位代码或者算法一类的问题可能不太懂
本文仅用来记录学习,如果有不对的请指出谢谢
图形部分 第二章 常用函数介绍
一.基本数学运算
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)噪声函数
可视化数学函数工具
二.幂指对函数
函数 | 公式 |
---|
pow(x,y) | x的y次幂(x和y均可为自变量或具体的数) 即
x
y
x^y
xy |
exp(x) | 返回以e为底的指数函数 即
e
x
e^x
ex |
exp2(value x) | 返回以2为底,x为幂的指数
2
x
2^x
2x |
ldexp(x,exp) | 返回x与2的exp次方的乘机x*
2
e
x
p
2^{exp}
2exp |
log(x) | 返回指定值的以e为底的对数 即ln x |
log10(x) | 求以10为底的对数 即
l
o
g
10
x
log_{10}x
log10x |
log2(x) | 求以2为底的对数 即
l
o
g
2
x
log_{2}x
log2x |
| |
frexp(x,out exp) 把浮点数 x 分解成尾数和指数 x=ret*
2
e
x
p
2^exp
2exp
返回值是尾数,exp参数返回的值是指数
(如果x参数为0,则此函数的尾数和指数均返回0)
三.三角函数与双曲函数
函数 | 含义 |
---|
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的双曲正弦值 即(
e
x
e^x
ex-
e
−
x
e^{-x}
e−x)/2 |
cosh(x) | 返回x的双曲余弦值 即(
e
x
e^x
ex+
e
−
x
e^{-x}
e−x)/2 |
tanh(x) | 返回x的双曲正切值 即(
e
x
e^x
ex-
e
−
x
e^{-x}
e−x)/(
e
x
e^x
ex+
e
−
x
e^{-x}
e−x) |
四.数据范围类
函数 | 定义 |
---|
ceil(x) | 返回>=x的最小整数 |
floor(x) | 返回<=x的最小整数 |
step(x) | x<=y为1,否则为0 |
saturate(x) | 返回将x钳制到0和1之间的值 |
clamp(x,min,max) | 把x限制在[min,max]范围内,小于返回min,大于返回max |
fmod(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,返回值为void)常用于测试alpha,如果每个分量代表到平面的距离,还可以用来模拟裁切平面 |
sign(x) | 返回x的正负性 如果x小于零返回-1,如果x等于零返回0,如果x大于0返回1 |
isinf(x) | 如果x参数为+INF或-INF(无穷+无穷仍无穷,0x3f3f3f),返回true,否则返回False |
isfinite(x) | 判断x参数是有限,即有界的,与isinf(x)相反相反 |
isnan(x) | 如果x参数为NAN非数字,返回truee,否则返回false |
六.向量矩阵类
函数 | 定义 |
---|
length(v) | 返回向量的长度 |
normalize(v) | 向量归一化,x/length(x)方向向量归一化 |
distance(a,b) | 返回两个向量之间的距离,按理说应该为0,此处表示为根号下各分量之差的平方和 |
dot(a,b) | 返回a和b这两个向量的点积(a在b上的投影长,a·b=丨a丨丨b丨·cosθ) |
cross(a,b) | 返回a和b这两个向量的叉积(返回值是一个向量,而且a,b都垂直,大小上丨a x b丨 =丨a丨* 丨b丨 * sinθ ) |
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和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除以透视值),然后使用投影纹理坐标进行查询 |
十.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) | 使用投影方式的立方体纹理查找 |
作业
常用的五个函数
纹理查找 tex2D函数
点积/叉积 dot/cross函数
向量归一化 normalize(v)函数
插值 lerp函数
pow函数