US3S3L2——设置深度写入和渲染队列

Unity Shader 中设置深度写入

深度写入默认是开启的,我们需要通过 渲染状态中的 ZWrite off​ 指令主动关闭深度写入

当我们把它写在 Pass​ 渲染通道中时,它只会影响该 Pass

1
2
3
4
5
Pass
{
Tags { "LightMode" = "ForwardBase" }
ZWrite off
}

若我们把它写在 SubShader​ 语句块中,它将影响其中的所有 Pass

1
2
3
4
SubShader
{
ZWrite off
}

Unity Shader 中设置渲染队列

我们知道,渲染队列 非常的重要,它会影响最终的渲染效果。
在 Unity Shader 中我们可以通过渲染标签主动的设置物体的渲染顺序

1
Tags { "Queue" = "标签值" }
  1. Background​(背景,队列号:1000)最早被渲染的物体的队列,一般用来渲染天空盒或者背景

  2. Geometry​(几何,队列号:2000)不透明的几何体通常使用该队列,不设置时的默认队列

  3. AlphaTest​(透明测试,队列号:2450) 需要透明度测试的物体使用的队列

  4. Transparent​(透明的,队列号:3000) 半透明物体的渲染队列,

    该队列中几何体按照由远到近的顺序进行绘制,所有进行透明混合的几何体都应该使用该队列

  5. Overlay​(覆盖,队列号:4000) 用是放在最后渲染的队列,于叠加渲染的效果

  6. 自定义队列,基于 Unity 预先定义好的这些渲染队列标签来进行加减运算来定义自己的渲染队列

    如:Tags { "Queue" = "Geometry+1" }​ 代表的队列号就是 2001

渲染队列一般都定义在 SubShader​ 语句块中,影响之后的所有 Pass​ 渲染通道
使用该 Shader(着色器)的物体,就会根据你设置的渲染队列在特定的时间进行渲染
在使用 渲染队列 Queue​ 时,一般会搭配 忽视投影器 IgnoreProjector​ 和 渲染类型 RenderType​ 一起使用

忽视投影器作用:物体是否受到 Projector(投影机)的投射,Projector 是 Unity 中的一个功能

投影器(Projector)是 Unity 中的一种特殊的光源,
它用于在场景中投射纹理(Texture)或简单的几何形状(如圆形 或方形)来模拟光照、阴影或其他视觉效果。

忽略 Projector(一般 半透明 Shader 需要开启该标签)

1
Tags { "IgnoreProjector" = "True" }

不忽略 Projector(默认值)

1
Tags { "IgnoreProjector" = "False" }

渲染类型作用:对着色器进行分类,之后可以用于着色器替换功能
摄像机上有对应的API,可以指定这个渲染类型来替换成别的着色器

1
Tags{ "RenderType" = "标签值" }

标签值包括:

  1. Opaque​ - 不透明的,用于普通Shader,比如:不透明、自发光、反射等
  2. Transparent​ - 透明的,用于半透明Shader,比如:透明、粒子
  3. TransparentCutout​ - 透明切割,用于透明测试Shader,比如:植物叶子
  4. Background​ - 背景,用于天空盒Shader
  5. Overlay​ - 覆盖,用于GUI纹理、Halo(光环)、Flare(光晕)

因此,透明物体的 Shader 的 Tags​ 一般设置为:

  • 透明测试类:需要透明度测试的物体,如植物叶子

    1
    Tags { "Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "TransparentCutout" }
  • 透明类:用于半透明Shader,比如:玻璃、粒子

    1
    Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "​Transparent​" }