unity实现透明

  • 透明度测试
    1. 只要一个片元的透明度不满足,就被舍弃
    2. 不需要关闭深度写入
  • 透明度混合
    1. 可以获得真正的半透明效果
    2. 需要关闭深度写入
    3. 深度缓冲是只读
  • 关闭深度写入后,渲染顺序很重要
    1. 先渲染所有不透明物体,并开启深度测试和深度写入
    2. 把半透明物体按距离摄像机远近排序,按照从后向前的顺序渲染,开启深度测试的同时关闭深度写入。

unityshader渲染顺序

  • 渲染队列(render queue),使用SubShader的Queue标签觉得模型归于哪个渲染队列。

  • unity使用整数索引来表示渲染队列,索引越小越早渲染

    • unity提前定义的5个渲染队列

      名称 索引号 描述
      Background 1000 会在任何其他队列前被渲染,一般用来绘制背景上的物体
      Geometry 2000 默认渲染队列。不透明物体使用该队列
      AlphaTest 2450 透明度测试的队列,所有不透明物体渲染后再渲染该队列更加高效
      Transparent 3000 在G和A队列渲染后,按从后往前的顺序渲染,使用了透明度混合的物体的队列
      Overlay 4000 用于实现叠加效果,任何需要最后渲染的物体都应该使用该队列

      在unityshader中Queue放在Tags当中

      1
      2
      3
      4
      5
      6
      SubShader{
      Tags{"Queue"="Transparent"}
      Pass{
      ZWrite Off//可以写在pass中,表示在该pass中关闭,写在SubShader中可关闭所有Pa
      }
      }