本文總結(jié) Unity 中物體的渲染順序邏輯周崭。
1. 以攝像機(jī)為第一維度
Unity 中的渲染順序螺男,第一維度是由攝像機(jī)確定的华望,換句話說(shuō) Unity 是以攝像機(jī)為單元進(jìn)行渲染丈秩,最后再根據(jù)設(shè)置的規(guī)則將多個(gè)攝像機(jī)渲染的畫面合起來(lái)希停。
2. 劃分渲染隊(duì)列
在同一個(gè)攝像機(jī)下烁巫,Unity 以物體材質(zhì)上的 RenderQueue 數(shù)值進(jìn)行了劃分,將所有物體分為兩個(gè)隊(duì)列
- RenderQueue < 2500宠能,Opaque 隊(duì)列亚隙,通常是不透明物體
- RenderQueue > 2500,Transparent 隊(duì)列违崇,通常是透明物體
同一個(gè)攝像機(jī)下阿弃,Unity 會(huì)先渲染 Opaque 隊(duì)列中的不透明物體诊霹,然后渲染 Transparent 隊(duì)列中的透明物體。
3. 不透明物體的渲染
在 Opaque 隊(duì)列中的物體渣淳,根據(jù)包圍盒中心距離攝像機(jī)的距離脾还,由近到遠(yuǎn)排序,進(jìn)行渲染入愧,Opaque 隊(duì)列中物體都是不透明物體鄙漏,通常開(kāi)啟了 ZWrite,由近到遠(yuǎn)渲染可以做遮擋剔除棺蛛,減少 OverDraw怔蚌,Opaque 隊(duì)列中的物體,可以設(shè)置 SortingLayer, SortingOrder, Shader 的 RenderQueue 等值旁赊,但不會(huì)起作用
4. 透明物體的渲染
透明物體的 Shader 通常關(guān)閉了 ZWrite媚创,SortingLayer, SortingOrder, RenderQueue 這些值的設(shè)置會(huì)影響顯示的順序,所以透明物體的渲染順序遵循的規(guī)則是
- 根據(jù) SortingLayer 層的順序進(jìn)行渲染
SortingLayer 可以在 Edit->ProjectSettings->Tags&Layer 中進(jìn)行設(shè)置彤恶,在代碼中可以通過(guò)
render.sortingLayer = "Effect";
這樣的代碼進(jìn)行設(shè)置
- SortingLayer 相同的情況下根據(jù) SortingOrder 的順序進(jìn)行渲染
- SortingLayer 和 SortingOrder 都相同的情況下钞钙,根據(jù) RenderQueue 的順序進(jìn)行渲染
- 都相同的情況下,根據(jù)包圍盒中心距離攝像機(jī)的距離声离,由遠(yuǎn)到近進(jìn)行渲染
5. UGUI 元素的渲染
UGUI 元素使用的 UI Default 材質(zhì)通常 RenderQueue 為 3000芒炼,走的是透明物體的渲染,所以根據(jù) SortingLayer -> SortingOrder -> RenderQueue 的順序進(jìn)行排序术徊,當(dāng)以上值都相同時(shí)本刽,根據(jù)元素在 Hierarchy 視圖中的順序進(jìn)行