當然也是有參考一些網路上的文章,本文主要是我看完後吸收到的結論。
以下圖片是實作渲染順序,如果看不懂…請再跟我說。(以下皆使用2017.4.3f1)
Camera
相機Depth值愈大,渲染時間愈後面。透明物件與不透明物件
在同一相機之下:RenderQueue 2500以下(不含)是不透明物件,渲染時間較早。
RenderQueue 2500以上是透明物件,渲染時間較晚。
不透明物件,可以在Material選擇RenderQueue.Geometry;而透明物件則是用RenderQueue.Transparent。
列舉詳細可見:RenderQueue 列舉
Sorting Layer
排序圖層名稱,在有用到Renderer (SpriteRenderer 、Canvas、Particle等等)會看到它。可以在Tags and Layers找到,並且進行設置,排序愈下面,渲染時間愈晚。
順帶一提,如果有需要是可以順序亂調的,除了Default。 調整後: 而且這個可以使用程式碼去改變Sorting Layer Name:
Renderer renderer = GetComponent();
renderer.sortingLayerName = "Third";
Order in Layer
渲染器在排序圖層類型內的順序,值愈大,渲染順序愈後面。一樣,可以使用程式碼去改變order!
Render Queue
值愈大,物件的渲染時間就愈晚。可以嘗試創建出一個Material,並shader改一下,找到RenderQueue並將其改變,然後拉入物件內,就可以看見該物件的渲染順序的改變。
深度排序
這部分就無關UI,畢竟透明物件會關閉深度(ZWrite Off),不過還是照本宣科一下:基本上就是與Camera的距離,愈近就渲染得愈晚,愈遠就渲染得愈早。
深度太相近,就會看見補位(也就是看見A方塊有時候會比B方塊晚渲染、有時候卻早渲染) 因為本身沒有研究這部分,詳細說明參考此篇:思元的開發筆記 - Unity rendering order 整理筆記
結論
渲染順序上來說:- Camera深度
- 同個Camera狀況下,看透明或不透明物件
- 如果都是透明物件,看Sorting Layer
- 如果同個Sorting Layer,看Order in Layer
- (僅2D UI)如果同個Sorting Layer,也同個Order in Layer,看Hierarchy排序
- 如果同個Sorting Layer,也同個Order in Layer,看Renderer Queue
- (不含透明物件)如果以上都相同,看深度排序
沒有留言:
張貼留言
歡迎大家留言提問,我會答的都會盡力回答!
如果太久沒出現回應就是我又忘記回來看留言了TAT