Unity影響渲染順序因素的總結


https://blog.csdn.net/u011748727/article/details/68947207

 

如果不了解Shader中如何使用模板緩沖區,可能看不懂例子。

渲染順序,我理解為進入顯卡流水管線的順序,會對Z、Stencil和Color Buffer帶來影響。
當然,能否最終被繪制到屏幕上,還要看深度檢測和模板檢測的結果。

能夠影響渲染順序的因素有:
1、Camera Depth
相機組件上設置的相機深度,深度越大越靠后渲染。
2、Sorting Layer
在Tags & Layers設置中可見

3、Order In Layer
相對於Sorting Layer的子排序,用這個值做比較時只有都在同一層時才有效。
4、RenderQueue
Shader中對Tags設置的“Queue”。

下面是結果:
1、Camera Depth
永遠最高。Camera Depth小的一定先進渲染管線。

2、當Sorting Layer和Order In Layer相同時
RenderQueue小的先進渲染管線。

3、當Sorting Layer和Order In Layer不相同時!
3.1 當兩個材質使用了不同的RenderQueue,且這兩個RenderQueue都在[0~2500]或[2501~5000]時,SortingLayer和OrderInLayer的排序生效。
3.2 當兩個材質使用了不同的RenderQueue,且這兩個RenderQueue分別在[0~2500]和[2501~5000]時,則一定會按照RenderQueue繪制,無視SortingLayer、OrderInLayer的排序。

過程:

呂布Shader會向StencilBuffer中寫 1


關羽Shader會根據StencilBuffer來進行顯示判斷

當兩個材質使用了不同的RenderQueue,且這兩個RenderQueue都在[0~2500]或[2501~5000]時,順序為:

調高RenderQueue也是一樣

RenderQueue對渲染順序沒有影響。

注意:
當兩個材質使用了不同的RenderQueue,且這兩個RenderQueue分別在[0~2500]和[2501~5000]時,則一定會按照RenderQueue繪制,無視SortingLayer、OrderInLayer。


推測是因為2500為Unity作為Opacity和Transparent的分界線,因此如果兩個材質的Queue分別在分界線的兩邊,也就是一個不透明一個透明,則Unity一定會先把不透明的物體送進渲染管線,無論Sorting Layer和Order In Layer到底怎么排序。

另外:
MehRenderer的sortingLayer與Canvas的sortingLayer同級
MehRenderer的sortingOrder與Canvas的OrderInLayer同級
————————————————
版權聲明:本文為CSDN博主「枸杞憂天」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011748727/article/details/68947207


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM