Shader入门精要笔记8

第8章

  • 深度缓冲的原理:根据深度缓存中的值来判断该片元距离摄像机的距离,当渲染一个片元时,需要把它的深度值和已经存在于深度缓冲的值进行比较,如果有东西挡住它,这个片元就不显示。
  • 两种方法实现透明效果
    • 透明度测试:透明度小于某个值,该片元就不显示。
    • 透明度混合:和颜色缓冲的值进行混合。需要关闭深度缓冲的写入 ZWrite Off(不关闭的话需要写两个Pass)
  • 必须先渲染不透明再渲染半透明物体
  • 渲染队列
    • Background 1000。会在其它队列之前渲染
    • Geometry 2000。默认的渲染队列
    • Alpha Test 2450。用于透明度测试的物体的渲染
    • Transparent 3000。用于透明度混合的物体的渲染
    • Overlay 4000。最后渲染
  • 透明度测试
    • 使用 clip(float) 函数,参数是负数时着色器就会直接返回
  • 透明度混合
    • 在Pass内需要写ZWrite off;还需要写混合模式,使用Blend命令
  • 开启深度写入的半透明效果
    • 使用两个Pass,第一个Pass开启深度写入但不输出颜色
    Pass{
        ZWrite On
        //ColorMask 后面接RGB|A|0,分别表示与其它Pass的RGB/A通道混合/不混合
        ColorMask 0
    }
    
  • 混合命令Blend,和ZWrite Off一样,写在Pass的Tags下面
    • Blend SrcFactor DstFactor(RGB通道和A通道使用同一个混合因子)
    • Blend SrcFactor DstFactor, SrcFactorA DstFactorA
    • 混合因子:
      • One,Zero
      • SrcColor,SrcAlpha(源颜色的RGB,源颜色的A通道)
      • DstColor,DstAlpha
      • OneMinusSrcColor,OneMinusSrcAlpha
      • OneMinusDstColor,OneMinusDstAlpha
    • 混合操作:
      • Add
      • Sub
      • RevSub
      • Min
      • Max
  • 剔除渲染正背面的命令,Cull
    • Cull Back|Front|Off (剔除背面|正面|双面同时渲染)
    • Unity默认剔除背面

你可能感兴趣的:(Shader入门精要笔记8)