最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Unity-通過(guò)腳本訪(fǎng)問(wèn)和修改材質(zhì)參數(shù)

2021-03-26 07:40 作者:unity_某某師_高錦錦  | 我要投稿

在檢視面板中,您所看到的所有材質(zhì)參數(shù)都可以通過(guò)腳本來(lái)訪(fǎng)問(wèn),這可以允許您在運(yùn)行時(shí)修改材質(zhì)的行為,利用這一點(diǎn)您可以制作出基于材質(zhì)屬性的動(dòng)畫(huà)效果。

在游戲運(yùn)行過(guò)程中,您可以動(dòng)態(tài)修改材質(zhì)的數(shù)值屬性、更改顏色,以及更換紋理。在這種工作中最常用到的函數(shù)有這些:

函數(shù)名稱(chēng)用途SetColor更改材質(zhì)的顏色(例如反照率著色顏色)SetFloat設(shè)置浮點(diǎn)值(例如,法線(xiàn)貼圖乘數(shù))SetInt在材質(zhì)中設(shè)置整數(shù)值SetTexture為材質(zhì)分配新紋理

完整的材質(zhì)處理函數(shù)列表可以參考?Material 類(lèi)腳本參考。

有一點(diǎn)需要注意的是,這些函數(shù)只會(huì)設(shè)置當(dāng)前著色器能夠使用的材質(zhì)屬性。這意味著,如果著色器不使用任何紋理,或者根本沒(méi)有綁定任何著色器,則調(diào)用?SetTexture?將無(wú)效。即使稍后設(shè)置了需要紋理的著色器,也是如此。因此,建議您在設(shè)置任何屬性之前,先設(shè)置著色器。一旦完成設(shè)置后,您就可以在使用同一組紋理和屬性值的著色器之間切換,所有設(shè)定的值都會(huì)得到保留。

這些函數(shù)的作用與所有簡(jiǎn)單著色器(如舊版著色器)以及除標(biāo)準(zhǔn)著色器以外的內(nèi)置著色器(如粒子、精靈、UI 和無(wú)光照著色器)相同。但是,對(duì)于使用標(biāo)準(zhǔn)著色器的材質(zhì),在完全修改材質(zhì)之前,您還必須了解一些其他要求。

使用標(biāo)準(zhǔn)著色器編寫(xiě)腳本的特殊要求

如果要在運(yùn)行時(shí)修改材質(zhì),標(biāo)準(zhǔn)著色器有一些額外的要求,因?yàn)闃?biāo)準(zhǔn)著色器在幕后實(shí)際上是由許多不同著色器合為一體的著色器。

這些不同類(lèi)型的著色器稱(chēng)為著色器變體,可以把它考慮為所有著色器功能的組合,其中部分功能處于激活狀態(tài),其余則處于未激活狀態(tài)。

例如,如果您為材質(zhì)設(shè)置了一個(gè)法線(xiàn)貼圖,就會(huì)激活支持法線(xiàn)貼圖的著色器變體。如果隨后又設(shè)置了高度貼圖,就會(huì)激活同時(shí)支持法線(xiàn)貼圖和高度貼圖的著色器變體。

這是一種很好的機(jī)制,它意味著當(dāng)您使用標(biāo)準(zhǔn)著色器時(shí),如果某個(gè)材質(zhì)中沒(méi)有使用法線(xiàn)貼圖,它就不會(huì)存在法線(xiàn)貼圖的性能開(kāi)銷(xiāo),因?yàn)槟鷮?shí)際運(yùn)行的著色器省略了這部分功能的代碼。這也意味著,如果您從不使用某個(gè)功能組合(例如“高度貼圖”(HeightMap) 和“發(fā)光”(Emissive) 的組合),則您的構(gòu)建版本中將完全忽略掉該變體;實(shí)際上,您通常只會(huì)用到標(biāo)準(zhǔn)著色器中極少數(shù)的可能變體。

Unity 會(huì)阻止簡(jiǎn)單地在構(gòu)建中包含所有可能的著色器變體的行為,因?yàn)檫@將是一個(gè)非常大的數(shù)字,可能有數(shù)萬(wàn)個(gè)!這個(gè)巨大的數(shù)字不僅因?yàn)椴馁|(zhì)檢視面板中每種可能的功能組合方式極其繁多,還因?yàn)獒槍?duì)不同渲染方案(例如是否使用 HDR、光照貼圖、GI、霧效等)的每種功能組合存在多種變體。囊括所有這些可能性將導(dǎo)致加載緩慢、內(nèi)存消耗高,并增加構(gòu)建文件尺寸和構(gòu)建時(shí)間。

所以 Unity 的替代方案是:通過(guò)檢查項(xiàng)目中使用的材質(zhì)資源來(lái)追蹤您使用過(guò)的著色器變體。無(wú)論在項(xiàng)目中加入了哪些標(biāo)準(zhǔn)著色器變體,這些變體都會(huì)包含在構(gòu)建中。

這個(gè)方案在通過(guò)腳本訪(fǎng)問(wèn)標(biāo)準(zhǔn)著色器材質(zhì)的情況下,存在兩個(gè)問(wèn)題。

1.您必須為所需的標(biāo)準(zhǔn)著色器變體啟用正確的關(guān)鍵字

如果使用腳本來(lái)更改材質(zhì),而這種更改會(huì)導(dǎo)致材質(zhì)使用標(biāo)準(zhǔn)著色器的另一種不同變體,則必須使用?EnableKeyword?函數(shù)啟用該變體。如果您開(kāi)始使用一個(gè)并未被材質(zhì)使用過(guò)的著色器功能,另一個(gè)額外的變體就會(huì)被啟用起來(lái)。例如將法線(xiàn)貼圖分配給先前沒(méi)有此貼圖的材質(zhì),或者將初始為零的發(fā)光級(jí)別設(shè)置為大于零的值。

用來(lái)啟用標(biāo)準(zhǔn)著色器功能的關(guān)鍵字如下:

關(guān)鍵字功能

_NORMALMAP????????????????????????????????????法線(xiàn)貼圖

_ALPHATEST_ON??????????????????????????????“鏤空”透明度渲染模式

_ALPHABLEND_ON???????????????????????????“淡化”透明度渲染模式

_ALPHAPREMULTIPLY_ON???????????????“透明”透明度渲染模式

_EMISSION?????????????????????????????????????????發(fā)射顏色或發(fā)射貼圖

_PARALLAXMAP????????????????????????????????高度貼圖

_DETAIL_MULX2????????????????????????????????輔助“細(xì)節(jié)”貼圖(反照率和法線(xiàn)貼圖)

_METALLICGLOSSMAP????????????????????金屬性工作流程中的金屬性/平滑度貼圖_SPECGLOSSMAP鏡面反射工作流程中的鏡面反射/平滑度貼圖

使用上面的關(guān)鍵字足以讓您的材質(zhì)修改腳本在編輯器運(yùn)行模式中起效。

但是,由于 Unity 僅通過(guò)檢查項(xiàng)目中使用的材質(zhì)來(lái)確定要在構(gòu)建中包含哪些變體,因此它不會(huì)包含僅在運(yùn)行時(shí)通過(guò)腳本使用到的變體。

這就是說(shuō),如果您在腳本中為材質(zhì)啟用 _PARALLAXMAP 關(guān)鍵字,但是項(xiàng)目中未使用與該功能組合匹配的材質(zhì),則視差貼圖將無(wú)法在最終構(gòu)建中生效(即使在編輯器中看起來(lái)正常)。這是因?yàn)闃?gòu)建過(guò)程將會(huì)忽略該變體,因?yàn)樗雌饋?lái)不是必需的。

2.您必須確保 Unity 在構(gòu)建中包含所需的著色器變體

為此,您需要確保 Unity 知道您要使用該著色器變體,具體方法就是在資源中包含至少一個(gè)該類(lèi)型的材質(zhì)。該材質(zhì)必須應(yīng)用在場(chǎng)景中,或者也可以將其放入?Resources 文件夾,否則該材質(zhì)處于未使用狀態(tài),Unity 仍會(huì)在構(gòu)建中忽略它。

通過(guò)完成上述兩個(gè)步驟,即可在運(yùn)行時(shí)使用標(biāo)準(zhǔn)著色器修改材質(zhì)。

如果您有興趣了解有關(guān)著色器變體的詳細(xì)信息以及如何構(gòu)建自己的變體,請(qǐng)閱讀制作多個(gè)著色器程序變體的信息。


Unity-通過(guò)腳本訪(fǎng)問(wèn)和修改材質(zhì)參數(shù)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
襄城县| 西充县| 许昌市| 宾川县| 康乐县| 台湾省| 深水埗区| 蒲江县| 临西县| 尖扎县| 鄂托克前旗| 会昌县| 漳平市| 武定县| 沈丘县| 东乌| 伊通| 肃南| 浪卡子县| 宾川县| 呼和浩特市| 梨树县| 那坡县| 波密县| 额济纳旗| 合川市| 衡南县| 浙江省| 金堂县| 三门县| 岚皋县| 中方县| 象州县| 依安县| 衡山县| 根河市| 太谷县| 兖州市| 正宁县| 五台县| 昌平区|