URP | 著色器變體和關(guān)鍵字
目的
認(rèn)識(shí)unity有那線變體關(guān)鍵詞
這些變體有什么區(qū)別,都有什么功能。
著色器變體
這是支持創(chuàng)建變體的類型

下圖定義方式

multi_compile 示例
第一種
此指令示例生成兩個(gè)著色器變體:
一個(gè)定義了?FANCY_STUFF_OFF
,另一個(gè)定義了?FANCY_STUFF_ON
。
在運(yùn)行時(shí),Unity 根據(jù)材質(zhì)或全局著色器關(guān)鍵字來(lái)激活其中一個(gè)變體。
如果這兩個(gè)關(guān)鍵字均未啟用,則 Unity 使用第一個(gè)關(guān)鍵字(在此示例中為?FANCY_STUFF_OFF
)。
第二種
也可以定義多個(gè)關(guān)鍵字,
這個(gè)指令生成4個(gè)變體
SIMPLE_SHADING
BETTER_SHADING
GOOD_SHADING
BEST_SHADING
multi_compile_local示例
shader_feature 與 multi_compile 二者區(qū)別
multi_compile ? 更適合Shader 變體,通過(guò)代碼來(lái)全局設(shè)置的關(guān)鍵字
比如默認(rèn)的陰影

shader_feature ? 用于材質(zhì)中設(shè)置的關(guān)鍵字

第一個(gè)屬性,是我們需要全局去控制物體是否受多光源影響。
第二個(gè)只是本地變體。
關(guān)鍵字限制
shader_feature和?multi_compile的主要缺點(diǎn)是其中定義的所有關(guān)鍵字均會(huì)影響 Unity 的全局關(guān)鍵字,關(guān)鍵字是有上限的,unity全局關(guān)鍵字上限是(384 個(gè)全局關(guān)鍵字,外加 64 個(gè)本地關(guān)鍵字)
所以就出現(xiàn)上面?zhèn)z個(gè)類型的變體。
本地關(guān)鍵字
這里就說(shuō)明 后面 帶 Local 和不帶Local的區(qū)別。
#pragma multi_compile
#pragma multi_compile_local
#pragma shader_feature
#pragma shader_feature_local
本地關(guān)鍵字示例
shader_feature_local:__類似于?shader_feature__,但是枚舉的關(guān)鍵字為本地關(guān)鍵字。
multi_compile_local:__類似于?multi_compile__,但是枚舉的關(guān)鍵字為本地關(guān)鍵字。
注意 :這里是倆個(gè)下劃線(__)
注意:定義語(yǔ)法
總結(jié)
Unity Shader里有4種著色器變體


這些變體有什么區(qū)別,都有什么功能。
shader_feature和 multi_compile 一個(gè)是給材質(zhì)使用變體,一個(gè)是給Shader變體使用。
shader_feature_local 和 multi_compile_local 變體,是本地關(guān)鍵字
資料參考
著色器變體和關(guān)鍵字 - Unity 手冊(cè)