Unity-ShaderLab:子著色器標(biāo)簽 (SubShader Tags)
子著色器使用標(biāo)簽來告知它們期望何時(shí)以何種方式被渲染到渲染引擎。
語法
指定?TagName1?具有?Value1,TagName2?具有?Value2??筛鶕?jù)需要添加任意數(shù)量的標(biāo)簽。
詳細(xì)信息
從根本上說,標(biāo)簽就是鍵/值對(duì)。在?SubShader?中,標(biāo)簽用于確定子著色器的渲染順序和其他參數(shù)。請(qǐng)注意,以下由 Unity 識(shí)別的標(biāo)簽必須位于 SubShader 部分中,不能在 Pass 中!
除了 Unity 可以識(shí)別的內(nèi)置標(biāo)簽外,您還可以使用自己的標(biāo)簽并使用?Material.GetTag?函數(shù)來查詢這些標(biāo)簽。
渲染順序 - Queue 標(biāo)簽
您可以使用?Queue?標(biāo)簽來確定對(duì)象的繪制順序。著色器決定其對(duì)象屬于哪個(gè)渲染隊(duì)列,這樣任何透明著色器都可以確保它們?cè)谒胁煌该鲗?duì)象之后繪制,依此類推。
有四個(gè)預(yù)定義的渲染隊(duì)列,但預(yù)定義的渲染隊(duì)列之間可以有更多的隊(duì)列。預(yù)定義隊(duì)列包括:
Background
?- 此渲染隊(duì)列在任何其他渲染隊(duì)列之前渲染。通常會(huì)對(duì)需要處于背景中的對(duì)象使用此渲染隊(duì)列。Geometry
(默認(rèn)值)- 此隊(duì)列用于大部分對(duì)象。不透明幾何體使用此隊(duì)列。AlphaTest
?- 進(jìn)行 Alpha 測(cè)試的幾何體將使用此隊(duì)列。這是不同于?Geometry
?隊(duì)列的單獨(dú)隊(duì)列,因?yàn)樵诶L制完所有實(shí)體對(duì)象之后再渲染經(jīng)過 Alpha 測(cè)試的對(duì)象會(huì)更有效。Transparent
?- 此渲染隊(duì)列在?Geometry?和?AlphaTest
?之后渲染,按照從后到前的順序。任何經(jīng)過 Alpha 混合者(即不寫入深度緩沖區(qū)的著色器)都應(yīng)該放在這里(玻璃、粒子效果)。Overlay
?- 此渲染隊(duì)列旨在獲得覆蓋效果。最后渲染的任何內(nèi)容都應(yīng)該放在此處(例如,鏡頭光暈)。
說明如何在透明隊(duì)列中渲染對(duì)象的示例
對(duì)于特殊用例,可以使用中間隊(duì)列。在內(nèi)部,每個(gè)隊(duì)列由整數(shù)索引表示;Background
?是 1000,Geometry
?是 2000,AlphaTest
?是 2450,Transparent
?是 3000,Overlay
?是 4000。如果著色器使用如下所示的隊(duì)列:
這將使對(duì)象在所有不透明對(duì)象之后渲染,但在透明對(duì)象之前渲染,因?yàn)殇秩娟?duì)列索引值將是 2001(幾何體索引值加一)。如果您希望始終在其他對(duì)象集之間繪制某些對(duì)象,那么這非常有用。例如,在大多數(shù)情況下,透明的水應(yīng)該在不透明對(duì)象之后繪制,但又要在透明對(duì)象之前繪制。
索引值高達(dá) 2500 的隊(duì)列(“Geometry+500”)視為“不透明”,并且會(huì)優(yōu)化對(duì)象的繪制順序以獲得最佳性能。 較高索引的渲染隊(duì)列被認(rèn)為是“透明對(duì)象”并按距離將對(duì)象進(jìn)行排序,從距離最遠(yuǎn)的對(duì)象開始渲染,最后渲染距離最近的對(duì)象。天空盒在所有不透明對(duì)象和所有透明對(duì)象之間繪制。
RenderType 標(biāo)簽
RenderType
?標(biāo)簽將著色器分為幾個(gè)預(yù)定義的組,例如,不透明的著色器,或經(jīng)過 Alpha 測(cè)試的著色器等等。著色器替換將使用該標(biāo)簽,在某些情況下還用于產(chǎn)生攝像機(jī)的深度紋理。
DisableBatching 標(biāo)簽
使用繪制調(diào)用批處理時(shí),一些著色器(主要是進(jìn)行對(duì)象空間頂點(diǎn)變形的著色器)不起作用,這是因?yàn)榕幚頃?huì)將所有幾何體轉(zhuǎn)換為世界空間,所以“對(duì)象空間”丟失。
可使用?DisableBatching
?標(biāo)簽來指示這一情況。有三個(gè)可能的值:“True”(始終對(duì)此著色器禁用批處理)、“False”(不禁用批處理;這是默認(rèn)值)和“LODFading”(當(dāng) LOD 淡化處于激活狀態(tài)時(shí)禁用批處理;主要用于樹)。
ForceNoShadowCasting 標(biāo)簽
如果提供了?ForceNoShadowCasting
?標(biāo)簽并且值為“True”,則使用該子著色器渲染的對(duì)象絕不會(huì)投射陰影。對(duì)透明對(duì)象使用著色器替換并且不希望從其他子著色器繼承陰影通道時(shí),這非常有用。
IgnoreProjector 標(biāo)簽
如果提供了?IgnoreProjector
?標(biāo)簽并且值為“True”,則使用此著色器的對(duì)象不會(huì)受到投影器的影響。這對(duì)半透明對(duì)象非常有用,因?yàn)橥队捌鳠o法影響它們。
CanUseSpriteAtlas 標(biāo)簽
如果著色器用于精靈,請(qǐng)將?CanUseSpriteAtlas
?標(biāo)簽設(shè)置為“False”,這樣在精靈打包到圖集內(nèi)時(shí),該標(biāo)簽將不起作用,(請(qǐng)參閱精靈打包器 (Sprite Packer))。
PreviewType 標(biāo)簽
PreviewType
?指示材質(zhì)檢視面板預(yù)覽應(yīng)如何顯示材質(zhì)。默認(rèn)情況下,材質(zhì)顯示為球體,但也可以將 PreviewType 設(shè)置為“Plane”(將顯示為 2D)或“Skybox”(將顯示為天空盒).