HLSL
HLSL
HLSL的一些基础机制和常用函数
常用函数
基本运算
名称 | 用例 | 描述 | 最小着色器模型 | 备注 |
---|---|---|---|---|
max | max(x, y) | 返回x和y中的最大值 | 1 | |
min | min(x, y) | 返回x和y中的最小值 | 1 | |
mul | mul(x, y) | 返回x和y相乘的结果 | 1 | |
abs | abs(x) | 返回x的绝对值 | 1 | |
round | round(x) | 返回x的四舍五入结果 | 1 | |
sqrt | sqrt(x) | 返回x的平方根 | 1 | |
rsqrt | rsqrt(x) | 返回x的平方根的倒数 | 1 | |
degrees | degrees(x) | 将弧度x转换为角度 | 1 | |
redians | redians(x) | 将角度x转换为弧度 | 1 | |
noise | noise(x) | 使用Perlin噪声算法生成-1到1之间的随机数 | 1 | |
rcp | rcp(x) | 对分量求倒数 | 5 |
幂函数&指数函数&对数函数
名称 | 用例 | 描述 | 最小着色器模型 | 备注 |
---|---|---|---|---|
pow | pow(x, y) | 返回x的y次幂 | 1 | |
exp | exp(x) | 返回e的x次幂 | 1 | |
exp2 | exp2(x) | 返回2的x次幂 | 1 | |
ldexp | ldexp(x, exp) | 返回x和2的exp次方的乘积 | 1 | |
log | log(x) | 返回以e为底,x的对数 | 1 | |
log10 | log10(x) | 返回以10为底,x的对数 | 1 | |
log2 | log2(x) | 返回以2为底,x的对数 | 1 | |
frexp | frexp(x, out exp) | 将浮点数x分解为尾数和指数:$x=ret*2^{exp}$,函数返回尾数,exp返回指数 | 1 |
三角函数和双曲函数
名称 | 用例 | 描述 | 最小着色器模型 | 备注 |
---|---|---|---|---|
sin | sin(x) | 返回x弧度的正弦 | 1 | |
cos | cos(x) | 返回x弧度的余弦 | 1 | |
tan | tan(x) | 返回x弧度的正切 | 1 | |
sincos | sincos(x, out s, out c) | 返回x弧度的正弦和余弦 | 1 | |
asin | asin(x) | 返回x弧度的反正弦 | 1 | |
acos | acos(x) | 返回x弧度的反余弦 | 1 | |
atan | atan(x) | 返回x弧度的反正切 | 1 | |
atan2 | atan2(y, x) | 返回y/x的反正切值 | 1 | |
sinh | sinh(x) | 返回x弧度的双曲正弦值,$\frac{e^x-e^{-x}}{2}$ | 1 | |
cosh | cosh(x) | 返回x弧度的双曲余弦值,$\frac{e^x+e^{-x}}{2}$ | 1 | |
tanh | tanh(x) | 返回x弧度的双曲正切值,$\frac{e^x-e^{-x}}{e^x+e^{-x}}$ | 1 |
数据范围
名称 | 用例 | 描述 | 最小着色器模型 | 备注 |
---|---|---|---|---|
ceil | ceil(x) | 返回x的向上取整 | 1 | |
floor | floor(x) | 返回x的向下取整 | 1 | |
step | step(x, y) | 如果x小于等于y则返回1,否则返回0 | 1 | |
saturate | saturate(x) | 将x限定在[0, 1] | 1 | |
clamp | clamp(x, min, max) | 将x限制在[min, max] | 1 | |
fmod | fmod(x, y) | 返回x对y取余的余数 | 1 | |
frac | frac(x) | 返回x的小数部分 | 1 | |
modf | modf(x, out ip) | 将值x分为小数和整数部分,每个部分的符号与x相同,ip返回整数部分,函数返回小数部分 | 1 | |
lerp | lerp(x, y, s) | 使用s在x和y之间线性插值:$x+s(y-x)$ | 1 | |
smoothstep | smoothstep(min, max, x) | 如果x在[min,max]范围内,则返回介于0和1之间的平滑Hermite插值,如果x小于min则返回0,如果x大于max则返回1 | 1 |
类型判断
名称 | 用例 | 描述 | 最小着色器模型 | 备注 |
---|---|---|---|---|
all | all(x) | 如果x的所有分量都不为0,则返回true;否则返回false | 1 | |
clip | clip(x) | 如果x小于0,则丢弃当前像素 | 1 | |
sign | sign(x) | 如果x小于0,返回-1,如果x等于0,返回0,如果x大于0,返回1 | 1 | |
isinf | isinf(x) | 如果x为正无穷或负无穷,返回true,否则返回false | 1 | |
isfinite | isfinite(x) | 与isinf相反 | 1 | |
isnan | isnan(x) | 如果x为NAN,则返回true,否则返回false | 1 |
向量和矩阵
名称 | 用例 | 描述 | 最小着色器模型 | 备注 |
---|---|---|---|---|
length | length(v) | 返回向量v的长度 | 1 | |
normalize | normalize(v) | 返回v的归一化向量 | 1 | |
distance | distance(a, b) | 返回a和b之间的距离 | 1 | |
dot | dot(a, b) | 返回a和b的点积 | 1 | |
cross | cross(a, b) | 返回a和b的叉积 | 1 | |
determinant | determinant(m) | 返回矩阵m的行列式的值 | 1 | |
transpose | transpose(m) | 返回m的转置 | 1 |
光线运算
名称 | 用例 | 描述 | 最小着色器模型 | 备注 |
---|---|---|---|---|
reflect | reflect(i, n) | 以i为入射方向,n为法线的反射光 | 1 | |
refrect | refrect(i, n, ri) | 以i为入射方向,n为法线方向,ri为折射率的折射光 | 1 | |
lit | lit(n_dot_l, n_dot_h, m) | 输入归一化的法线和光向量的点积,半角向量和法线的点积,高光指数,返回光照向量(环境光,漫反射,高光,1) | 1 | |
faceforward | faceforward(n, i, ng) | 返回面向视图方向的曲面法向量 | 1 |
纹理查找
名称 | 用例 | 描述 | 最小着色器模型 | 备注 |
---|---|---|---|---|
tex1D | tex1D(s, t) | 返回s在t处的值 | 1 | |
tex1D | tex1D(s, t, ddx, ddy) | 使用偏导数对2D纹理进行采样以选择Mip级别 | 1 | |
tex1Dproj | tex1Dproj(s, t) | 将xyz除以w,然后进行纹理查找 | 1 | |
tex1Dlod | tex1Dlod(s, t) | 使用lod查找纹理s在t.w处的值 | 1 | |
tex1Dbias | tex1Dbias(s, t) | 将t.w决定的某个Mip层偏置后的纹理查找 | 1 | |
tex1Dgrad | tex1Dgrad(s, t, ddx, ddy) | 使用微分并指定Mip层的纹理查找 | 1 |
评论
还沒有留言。