Unity 中的渲染顺序

王冰冰

本文总结 Unity 中物体的渲染顺序逻辑。

1. 以摄像机为第一维度

Unity 中的渲染顺序,第一维度是由摄像机确定的,换句话说 Unity 是以摄像机为单元进行渲染,最后再根据设置的规则将多个摄像机渲染的画面合起来。

2. 划分渲染队列

在同一个摄像机下,Unity 以物体材质上的 RenderQueue 数值进行了划分,将所有物体分为两个队列

  • RenderQueue < 2500,Opaque 队列,通常是不透明物体
  • RenderQueue > 2500,Transparent 队列,通常是透明物体
    同一个摄像机下,Unity 会先渲染 Opaque 队列中的不透明物体,然后渲染 Transparent 队列中的透明物体。

3. 不透明物体的渲染

在 Opaque 队列中的物体,根据包围盒中心距离摄像机的距离,由近到远排序,进行渲染,Opaque 队列中物体都是不透明物体,通常开启了 ZWrite,由近到远渲染可以做遮挡剔除,减少 OverDraw,Opaque 队列中的物体,可以设置 SortingLayer, SortingOrder, Shader 的 RenderQueue 等值,但不会起作用

4. 透明物体的渲染

透明物体的 Shader 通常关闭了 ZWrite,SortingLayer, SortingOrder, RenderQueue 这些值的设置会影响显示的顺序,所以透明物体的渲染顺序遵循的规则是

  • 根据 SortingLayer 层的顺序进行渲染

SortingLayer 可以在 Edit->ProjectSettings->Tags&Layer 中进行设置,在代码中可以通过 render.sortingLayer = "Effect"; 这样的代码进行设置

  • SortingLayer 相同的情况下根据 SortingOrder 的顺序进行渲染
  • SortingLayerSortingOrder 都相同的情况下,根据 RenderQueue 的顺序进行渲染
  • 都相同的情况下,根据包围盒中心距离摄像机的距离,由远到近进行渲染

5. UGUI 元素的渲染

UGUI 元素使用的 UI Default 材质通常 RenderQueue 为 3000,走的是透明物体的渲染,所以根据 SortingLayer -> SortingOrder -> RenderQueue 的顺序进行排序,当以上值都相同时,根据元素在 Hierarchy 视图中的顺序进行

你可能感兴趣的:(Unity 中的渲染顺序)