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默认剔除背面
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Unity中两种方法实现透明效果: 1.透明度测试(Alpha Test),无法得到真正半透明效果,另外一种是透明...
    李偌闲阅读 806评论 0 0
  • 一.需要知道的概念 1.深度缓存 它的基本思想是:根据深度缓存中的值来判断该片元距离摄像机的距离,当渲染一个片元时...
    无职转生者阅读 1,229评论 0 0
  • 转载注明出处:点击打开链接 Shader(着色器)是一段能够针对3D对象进行操作、并被GPU所执行的程序。Shad...
    游戏开发小Y阅读 3,671评论 0 4
  • 基本概念 如何实现 通过控制模型的透明通道来实现透明效果 透明度 片元属性0(完全透明,不显示)~1(完全不透明)...
    全新的饭阅读 776评论 0 0
  • 一.Tags(标签)通过使用tags来告诉渲染引擎在什么时候该如何渲染他们所期望的效果。注意的是,SubShade...
    karma085阅读 5,437评论 1 4

友情链接更多精彩内容