Unity2D渲染排序
翻译⾃
为什么翻译这篇⽂章?⾃⼰想搞明⽩Unity渲染物体的顺序,遂去搜索相关资料,发现较好的⼀篇博客也只是把其中⼏个因素(Render Queue,Sorting Order等)罗列出来,⾄于Unity具体怎么使⽤它们以及它们之间的优先级没有讲清楚,故⽽想把清楚解释这个问题的官⽅⼿册翻译下。
2D 排序
概览
Unity根据优先级排序渲染,优先级是基于它们的类型和⽤法。你可以通过Render Queue指定渲染顺序。⼀般,有两个主要队列,不透明队列Opaque queue和半透明队列Transparent queue。2D渲染主要是在Transparent queue,其中包含Sprite Renderer,Tilemap Renderer,和Sprite Shape Renderer这些类型。
半透明队列排序的优先级
Transparent Queue⾥的2D Renderers⼀般遵循以下优先级:
1. Sorting Layer和Order in Layer
2. 指定Render Queue
3. 到相机的距离
transparent中文翻译透视/正交
⾃定义轴排序
精灵排序参照点
4. Sorting Group
5. 材质/着⾊器
6. 当多个Renderer有相同的排序优先级时,Tiebreaker出现
有其它能够引起sorting order不同于有规律优先级顺序的因素。这些因素因⼯程不同⽽不同。
Sorting Layer and Order in Layer
对于2D Renderers,通过Inspector窗⼝或Unity API修改Sorting Layer和Order in Layer(在Renderer的属性设置⾥)是有效的。设置Renderer到⼀个存在的Sorting Layer或者创建⼀个决定它的在渲染队列⾥的优先级。在相同Sorting Layer⾥,修改Order in Layering的值设置Renderer和其它Renderer的优先级。
指定渲染队列
你可以在材质球设置或者材质球着⾊器设置⾥指定Renderer的渲染队列。对于组织和排序使⽤不同材质球的Renderers,这是有⽤的。详细内容可以参照⽂档。
到相机的距离
相机组件基于投影设置排序Renderer,两个选项分别是透视和正交。
透视
在这个模式,Renderer排序距离是Renderer到相机位置的直线距离。
正交
Render排序距离是相机沿着相机观察⽅向到Renderer的距离。对于默认2D设置,是沿(0,0,1)轴向。
当你设置相机组件为透视或正交时,Unity⾃动设置相机TransparencySortMode以匹配相机已选择模式。你可以两种⽅式⼿动设置Transparency Sort Mode:
打开Project Settings并前往Graphics,然后Camera Settings下⾯是⽤Transparency Sort Mode
通过脚本API设置相机TransparencySortMode
⼀个额外的通过Project Settings和通过脚本API可以设置的是⾃定义轴向排序模式。
⾃定义轴向排序模式
选择这个模式排序Renderer是基于沿着你在Projecting Settings⾥设置的⾃定义轴向的距离(主菜单:Edit > Project Settings > Graphics > Transparency Sort Axis)。常⽤在包含IsoMetric Tilemaps的⼯程,⽤于在Tile Map上正确排序绘制Tile Sprites。详细参考。
Sprite排序点
默认,Sprite的排序点设置在中⼼位置,Unity测量相机变换位置和Sprite中⼼位置的距离,然后在排序中决定它们的渲染顺序。⼀个可供替
代的选项是,在世界空间⾥设置Sprite的Pivot为排序点。在Sprite的Sprite Renderer属性设置选择Pivot选项,并且在Sprite编辑器⾥编辑Sprite的Pivot位置。
Sorting Group
Sorting Group是为了排序把共享⼀个通⽤根的Renderer组织起来的组件。在同⼀个Sorting Group的所有Renderer共享同样的Sorting Layer,Order in Layer,和到相机的距离。设置的更多细节参考组件的⽂档。
Tiebreaker
当多个Renderer有⼀致的排序优先级时,tiebreaker是按照Unity放置Renderer到渲染队列的顺序。因为这是你⽆法控制的内部处理,你应该使⽤排序选项(⽐如Sorting Layers和Sorting Groups)保证所有Renderer有不⼀致的排序优先级。