百人计划 图形2.3 常用函数介绍

本文详细介绍了微软的高级着色器语言HLSL,涵盖基本数学运算、类型判断、向量与矩阵类、光线运算类以及1D至3D纹理查询等关键函数。通过这些函数,开发者可以实现复杂的图形效果,如向量归一化、光照计算、纹理采样等。此外,还讨论了LOD、偏置和微分查询在纹理查找中的应用。
摘要由CSDN通过智能技术生成

        HLSL(微软定义的高阶着色器语言:High Level Shader Language)

        基本数学运算

函数作用
max(a,b)返回较大的那个
min(a,b)返回小的那个
mul(a,b)两数相乘,常用于矩阵运算
abs(a)返回输入值的绝对值
round(x)返回与x最近的整数
sqrt(x)返回x的平方根
rsqrt(x)返回x的平方根的倒数
degrees(x)转换成弧度
radians(x)将角度转换为弧度
noise(x)噪声函数:返回一个the Perlin noise value within a range between -1 and 1.

        幂指对函数

        

函数作用
pow(x,y)x的y次幂
ldexp(x,exp)x*2exp
exp(x)返回以e为底的指数函数
exp2(x)返回以2为底,幂是x的的指数函数
log(x)返回以e为底的对数(ln(x))
log10(x)返回以10为底的对数
log2(x)返回以2为底的对数
frexp(x,out exp)把浮点值x分解为指数和尾数,返回值是尾数,exp参数返回的值是指数(如果x参数为0,则此函数的尾数和指数均返回0)

                        out关键字:传值引用,不要求在传值钱初始化变量。

        三角函数与双曲线函数

        

函数作用
asin(x)返回输入值的反正弦值
acos(x)返回输入值的反余弦值
atan(x)返回输入值的反正切值
atan2(y,x)返回y/x的反正切值
sincos(x,out s,out c)返回x的正弦值和余弦值
tan(y,x)返回y/x的正切值
sinh(x)返回x的双曲正弦值,即0.5*(e^x-e^-x)
cosh(x)返回x的双曲余弦值,即0.5*(e^x+e^-x)
tanh(x)返回x的双曲正切值,即(e^x-e^-x)/(e^x+e^-x)

                其中sin(x)、cos(x)、tan(x)中x均为弧度

         数据范围类

                

函数作用
ceil(x)返回>=x的最小整数
step(x,y)x<=y则为1,否则为0
floor(x)返回小于或者等于x的最大整数
saturate(x)返回将x钳制到(0,1)
clamp(x,min,max)把x限制在[min,max]
frac(x)返回x的小数部分
modf(x,out ip)将x分为整数和小数部分(各部分符号与x相同),ip返回整数部分,整体返回小数部分。
smoothstep(min,max,x)如果x在(min,max)内,则返回在(0,1)之间的光滑Hermite插值,使用smoothstep HLSL内在函数在两个值之间创建平滑过渡。例如使用此函数平滑过渡两种颜色。

                lerp(x,y,s)=x*(1-s)+y*s

        类型判断

                all(x):确定指定量的所有分量是否均为非零,均非零返回true,否则返回false(处理由浮点型、整形、布尔型数据定义的标量、向量、矩阵)

                clip(x):如果输入值小于0,则丢弃当前像素。常用于判定范围(不仅仅针对0,返回值为void)常用于测试alpha。如果每个分量代表到平面的距离,还可以用来模拟剪切平面。

                sign(x):x小于0 返回-1,x大于0返回1,相等于0返回0。

                isfinite(x):判断x参数是有限的(有界)。

                isnan(x):如果x参数为NAN(非数字),返回true否则返回false

        向量与矩阵类

                length(v):返回向量的长度(x/length(x)方向向量归一化)

                normalize(v):向量归一化

                distance(a,b):返回两个向量间距离(按理说不平行时应该是0),此处表示为根号下各分量之差的平方和。

                dot(a,b):返回a,b两个向量的标积、内积、数量积、点积(a在b上的投影长:a·b=|a||b|cosθ)。 

                cross(a,b):返回a,b两个向量的矢积、外积、向量积、叉积(返回一个与a,b向量所在平面垂直的向量(即该平面的法线))

                determinant(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)        下图Blinn Phong模型 

                                                

                faceforward(n,i,ng):得到面向示图方向的曲面法线向量,输入输出为同元向量,返回-n*sign(dot(i,ng)) (normal, light,normal)

        1D纹理查找

                GPU在PS阶段是在屏幕空间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在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除以透视值),然后使用投影纹理坐标进行查询。

        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层的三位纹理查找

                text3Dproj(s,t):把纹理当作一张幻灯片投影到场景中,先使用纹理投影技术需要计算出投影纹理坐标(t.w除以透视值),然后使用投影纹理坐标进行查询。

                

                lod:查找时使用mipmap图;bias:查找mipmap后使用偏置;grad:使用微分并指定miamap层的查找

        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决定的某个mipmap层偏移后的立方体查找

        texCUBEgrad(s,t,ddx,ddy):使用微分并指定Mip层的立方体纹理查找

        textCUBEproj(s,t):是用投影方式的立方体纹理查找

作业

        1、最常用的5个函数:dot、normalize、mul、distance、tex2D(s,t)

        2、ddx、ddy实际使用测试

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值