TA百人计划学习笔记 HLSL常用函数

  • HLSL是什么
    • 高级着色器语言(即 HLSL,缩写自High Level Shader Language或High-Level Shading Language),是由微软拥有及开发的一种着色器语言
  • 相关查询
    • 微软api库
      • 内部函数 - Win32 apps | Microsoft Learn
    • 数学公式可视化工具
      • Graphtoy
    • Shader Forge
      • Shader Forge
  • 目录
    • TA百人计划学习笔记 HLSL常用函数_第1张图片

  • 基本数学运算
    • 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)
      • 定义
        • 噪声函数
          • TA百人计划学习笔记 HLSL常用函数_第2张图片

          • 将uv的坐标作为x传入,随机的返回一个[0,1]的值
      • 举例
        • TA百人计划学习笔记 HLSL常用函数_第3张图片

  • 幂指对函数与偏导数
    • pow(x,y)
      • 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为底数的对数
    • frexp(x,out exp)
      • 把浮点数分解为尾数和指数,x的返回值是尾数(x=ret*2^exp),exp参数返回的是指数
      • 是按照计算机存储浮点数的方式分解的
        • eg:1.2这个数,是分为两部分的,尾数为12,指数为0.1
        • out关键字:exp也会作为一个返回值传出,也就是说这个函数有两个返回值。
        • 如果x参数为0,则此函数的尾数和指数均返回0
  • 三角函数和双曲线函数
    • sin(x)、cos(x)、tan(x)
      • 三角函数(弧度制:1°=π/180 rad)
    • asin(x)、acos(x)、atan(x)
      • 反三角函数
    • sincos(x,out s,out c)
      • 返回x的正弦和余弦
    • tan(y,x)
      • 返回y/x的正切
    • atan2(y,x)
      • 返回y/x的反正切
    • 双曲正余弦
      • 参考:
        • https://zh.wikipedia.org/zh-hans/%E5%8F%8C%E6%9B%B2%E5%87%BD%E6%95%B0
        • 可能是最好的讲解双曲函数的文章 - 知乎
      • sinh(x)
        • 返回x的双曲正弦值
      • cosh(x)
        • 返回x的双曲余弦值
      • tanh(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小返回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]之间的平滑Hermite插值,使用smoothstep在两个值直接创建平滑过渡
      • eg,平滑地混合两种颜色
  • 类型判断类
    • all(x)
      • 确定指定量的所有分量是否均为非零,均非零则返回true,否则返回false(处理由浮点型、整型、布尔型数据定义的标量、向量或者矩阵)
    • clip(x)
      • 如果输入值小于零,则丢弃当前像素 常用于判定范围(不仅仅针对0,返回值为void)
      • 常用于Alpha Test,如果每个分量代表到平面的距离,还可以用来模拟剪切平面
    • sign(x)
      • 返回x的正负性
        • 如果x小于零返回-1
        • 如果x等于零返回0
        • 如果x大于零返回1
    • isinf(x)
      • 如果x参数为+ ∞或-∞(无穷+无穷仍无穷,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|·cos0
    • cross(a,b)
      • 叉积/矢积/向量积
      • 返回值是个向量,而且与 a、b 都垂直,大小上 |a x b| = |a| * |b| * sin0
    • 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)
      • TA百人计划学习笔记 HLSL常用函数_第4张图片

    • faceforward(n,i,ng)
      • 得到面向视图方向的曲面法向量输入输出为同元向量,返回-n*sign(dot(i,ng))(normal,light,normal)
  • 纹理查找
    • 定义
      • 纹理查找就是GPU在片元处理阶段中在屏幕空间的XY坐标系中对每一个像素对应的纹理查找对应的纹素来确定像素的颜色;
    • 分类
      • 1D纹理查找(几乎不用)
        • 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层的一维纹理查找
        • ex1Dproj(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层的三维纹理查找
        • tex3Dproj(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)
          • 使用投影方式的立方体纹理查找
      • 备注
        • lod:查找时使用mipmap图
        • bias:查找mipmap图后在使用偏置
        • grad:使用微分并指定mipmap层的查找
    • 相关概念
      • 偏导函数
        • 偏导数的物理含义
          • 在某一个方向上的变化。
        • ddx ddy定义
          • ddx 求的是 X 方向上,相邻两个像素的某属性值的变化量(即差值);ddy 求的是 Y 方向上,相邻两个像素的某属性值的变化量。
            • 如果函数 ddx 和 ddy 的输入参数为常数,则函数返回值永远为 0。
            • 函数 ddx 和 ddy 的输入参数通常是纹理坐标;
          • 由于 ddx 和 ddy 指令是作用于像素级的,所以 ddx 和 ddy 函数只被片段程序所支持
        • mipmap在选择到底用哪一层mipmap的level时,靠的就是偏导数。
      • 纹理查找中使用偏导函数
        • TA百人计划学习笔记 HLSL常用函数_第5张图片

           
          • 当在纹理查询函数中使用 ddx 和 ddy 主要是为了进行图形过滤。简单的说,就是为了限制屏幕上相邻的连续2个像素值的插值。ddx用来限制X坐标上的像素值插值,ddy用来限制Y坐标上的像素值插值
          • 当我们所限定的 ddx 与 ddy 差值很大时,相邻的像素点会与这个差值进行比较,只有大于的时候才会拿出来,渲染到屏幕上,因此限制的差值越大,所拿出的像素点越少,图也就越来越模糊。
      • 在纹理查找应用于投影
        • 在光源照射不是直线的时候,需要使用对应的算法才能更好的计算出投影采样效果
        • TA百人计划学习笔记 HLSL常用函数_第6张图片

  • 资料
    • 源视频 https://www.bi libili.com/video/BV1q64y1m7Ev/
    • PPT 2300-HLSL常用函数
    • 参考笔记
      • 2.3 常用函数介绍 · 语雀
      • 2.3 HLSL常用函数介绍 · 语雀
    • 任务
      • 写5个常用的函数
      • ddxddy的实际使用测试

你可能感兴趣的:(学习,笔记,游戏美术,着色器,技术美术)