當(dāng)前位置: 首頁 > 資訊動(dòng)態(tài) > 行業(yè)洞察
前面的幾篇博客講了游戲渲染的基本原理和如何在Unity里寫一個(gè)Shader,這篇博客先插入兩個(gè)概念:
在Unity中我們會(huì)有很多的物體,這些物體是不是同時(shí)渲染,渲染的順序是怎樣的,覆蓋關(guān)系又是怎樣的?我們一起看一下會(huì)影響的一些因素。
這個(gè)屬性表明的是相機(jī)的深度,如果場(chǎng)景中存在多個(gè)攝像機(jī),深度越大的越靠后,也就是說,深度大的攝像機(jī)的內(nèi)容會(huì)直接覆蓋在深底小的攝像機(jī)的內(nèi)容上。
相對(duì)于Sorting Layer的子排序,用這個(gè)值做比較時(shí)只有都在同一層時(shí)才有效。
soringOrder也是Render的一個(gè)屬性,這個(gè)order是設(shè)置一個(gè)數(shù)字,數(shù)字越大,越在上面顯示。
默認(rèn)情況下,Unity會(huì)基于對(duì)象距離攝像機(jī)的遠(yuǎn)近來排序你的對(duì)象。因此,當(dāng)一個(gè)對(duì)象離攝像機(jī)越近,它就會(huì)優(yōu)先繪制在其他更遠(yuǎn)的對(duì)象上面。對(duì)于大多數(shù)情況這是有效并合適的,但是在一些特殊情況下,你可能想要自己控制對(duì)象的繪制順序。而使用Tags{}塊我們就可以得到這樣的控制。
Unity提供給我們一些默認(rèn)的渲染隊(duì)列,每一個(gè)對(duì)應(yīng)一個(gè)唯一的值,來指導(dǎo)Unity繪制對(duì)象到屏幕上。這些內(nèi)置的渲染隊(duì)列被稱為Background, Geometry, AlphaTest, GeometryLast,Transparent, Overlay。這些隊(duì)列不是隨便創(chuàng)建的,它們是為了讓我們更容易地編寫Shader并處理實(shí)時(shí)渲染的。
同時(shí)需在SubShader中顯示聲明ZWrite Off,通知Unity我們會(huì)重寫物體的渲染深度排序。
當(dāng)上面的要素都相同的時(shí)候,比如有幾個(gè)建筑物從攝像機(jī)看過去是層層遮擋的,那么最后渲染哪個(gè),取決于該物體與攝像機(jī)之間的距離。
講完了渲染順序,我們講一下Unity中另外一個(gè)很相似的名詞,叫做渲染路徑
Unity 的內(nèi)置渲染管線支持不同渲染路徑。渲染路徑是與光照和陰影相關(guān)的一系列操作。不同的渲染路徑具有不同功能和性能特征。應(yīng)根據(jù)項(xiàng)目類型以及目標(biāo)硬件,確定哪種渲染路徑最適合您的項(xiàng)目。
可在 Graphics 窗口中選擇項(xiàng)目使用的渲染路徑,并可為每個(gè)攝像機(jī)覆蓋該路徑。
如果運(yùn)行項(xiàng)目的設(shè)備上的 GPU 不支持所選的渲染路徑,則 Unity 將自動(dòng)使用較低保真度的渲染路徑。例如,在無法處理延遲著色的 GPU 上,Unity 使用前向渲染。
采用前向渲染方式渲染實(shí)時(shí)光源會(huì)非常消耗資源。為了抵消此成本,可以選擇 Unity 在任何一個(gè)時(shí)間應(yīng)該為每個(gè)像素渲染的光源數(shù)量。Unity 會(huì)以較低保真度渲染場(chǎng)景中的其余光源:每個(gè)頂點(diǎn)或每個(gè)對(duì)象。
如果項(xiàng)目沒有使用大量實(shí)時(shí)光源,或者光照保真度對(duì)項(xiàng)目而言不重要,則此渲染路徑可能是這個(gè)項(xiàng)目的不錯(cuò)選擇。
延遲著色需要 GPU 支持,并且有一些局限性。這種著色方式不支持半透明對(duì)象(Unity 使用前向渲染來渲染這些對(duì)象)、正交投影(Unity 對(duì)這些攝像機(jī)使用前向渲染)或硬件抗鋸齒(但可以使用后期處理效果來獲得類似結(jié)果)。延遲著色對(duì)剔除遮罩的支持有限,并會(huì)將 Renderer.receiveShadows 標(biāo)志始終視為 true。
如果項(xiàng)目具有大量的實(shí)時(shí)光源并需要高級(jí)別的光照保真度,而目標(biāo)硬件支持延遲著色,那么此渲染路徑對(duì)于該項(xiàng)目而言可能是一個(gè)不錯(cuò)的選擇。
渲染路徑(Rendering Path)決定光照如何應(yīng)用到UnityShader中。為了獲取場(chǎng)景中的光源數(shù)據(jù),需要為每個(gè)Pass指定其渲染路徑。5.0以后的版本中,Unity支持前向渲染(Forward Renddering Path)和 延遲渲染(Deferred Rendering Path)。系統(tǒng)默認(rèn)情況下選擇的是前向渲染路徑,可以更改,同時(shí)若想使用多個(gè)渲染路徑,可以在不同的攝像機(jī)中調(diào)節(jié) Rendering Path選項(xiàng)。
通過在每個(gè)Pass中使用標(biāo)簽來指定Pass使用的渲染路徑,即使用 LightMode標(biāo)簽實(shí)現(xiàn)。不同類型的渲染路徑可能包含多種標(biāo)簽設(shè)置。九游娛樂平臺(tái)九游娛樂平臺(tái)