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

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

Unity-使用 Cg/HLSL 訪問著色器屬性

2021-04-08 11:07 作者:unity_某某師_高錦錦  | 我要投稿

著色器在?Properties?代碼塊中聲明材質(zhì)屬性。如果要在著色器程序中訪問其中一些屬性,則需要聲明具有相同名稱和匹配類型的 Cg/HLSL 變量。著色器教程:頂點(diǎn)和片元程序中提供了一個(gè)示例。

例如,以下著色器屬性:

可通過如下 Cg/HLSL 代碼進(jìn)行聲明以供訪問:

Cg/HLSL 還可以接受?uniform?關(guān)鍵字,但該關(guān)鍵字并不是必需的:

uniform float4 _MyColor;

ShaderLab 中的屬性類型以如下方式映射到 Cg/HLSL 變量類型:

  • Color 和 Vector 屬性映射到?float4、half4?或?fixed4?變量。

  • Range 和 Float 屬性映射到?floathalf?或?fixed?變量。

  • 對于普通 (2D) 紋理,Texture 屬性映射到?sampler2D?變量;立方體貼圖 (Cubemap) 映射到?samplerCUBE__;3D 紋理映射到?sampler3D__。

如何向著色器提供屬性值

在下列位置中查找著色器屬性值并提供給著色器:

  • MaterialPropertyBlock?中設(shè)置的每渲染器值。這通常是“每實(shí)例”數(shù)據(jù)(例如,全部共享相同材質(zhì)的許多對象的自定義著色顏色)。

  • 在渲染的對象上使用的材質(zhì)中設(shè)置的值。

  • 全局著色器屬性,通過 Unity 渲染代碼自身設(shè)置(請參閱內(nèi)置著色器變量),或通過您自己的腳本來設(shè)置(例如?Shader.SetGlobalTexture)。

優(yōu)先順序如上所述:每實(shí)例數(shù)據(jù)覆蓋所有內(nèi)容;然后使用材質(zhì)數(shù)據(jù);最后,如果這兩個(gè)地方不存在著色器屬性,則使用全局屬性值。最終,如果在任何地方都沒有定義著色器屬性值,則將提供“默認(rèn)值”(浮點(diǎn)數(shù)的默認(rèn)值為零,顏色的默認(rèn)值為黑色,紋理的默認(rèn)值為空的白色紋理)。

序列化和運(yùn)行時(shí)材質(zhì)屬性

材質(zhì)可以同時(shí)包含序列化的屬性值和運(yùn)行時(shí)設(shè)置的屬性值。

序列化的數(shù)據(jù)是在著色器的?Properties?代碼塊中定義的所有屬性。通常,這些是需要存儲在材質(zhì)中的值,并且可由用戶在材質(zhì)檢視面板中進(jìn)行調(diào)整。

材質(zhì)也可以具有著色器使用的一些屬性,但不在著色器的?Properties?代碼塊中聲明。通常,這適用于在運(yùn)行時(shí)從腳本代碼(例如,通過?Material.SetColor)設(shè)置的屬性。請注意,矩陣和數(shù)組只能作為非序列化的運(yùn)行時(shí)屬性存在(因?yàn)闊o法在 Properties 代碼塊中定義它們)。

特殊紋理屬性

對于設(shè)置為著色器/材質(zhì)屬性的每個(gè)紋理,Unity 還會在其他矢量屬性中設(shè)置一些額外信息。

紋理平鋪和偏移

材質(zhì)通常具有其紋理屬性的 Tiling 和 Offset 字段。此信息將傳遞到著色器中的 float4?{TextureName}_ST?屬性:

  • x?包含 X 平鋪值

  • y?包含 Y 平鋪值

  • z?包含 X 偏移值

  • w?包含 Y 偏移值

例如,如果著色器包含名為?_MainTex?的紋理,則平鋪信息將位于?_MainTex_ST?矢量中。

紋理大小

{TextureName}_TexelSize?- float4 屬性包含紋理大小信息:

  • x?包含 1.0/寬度

  • y?包含 1.0/高度

  • z?包含寬度

  • w?包含高度

紋理 HDR 參數(shù)

{TextureName}_HDR?- 一個(gè) float4 屬性,其中包含有關(guān)如何根據(jù)所使用的顏色空間解碼潛在 HDR(例如 RGBM 編碼)紋理的信息。請參閱?UnityCG.cginc?著色器 include 文件中的?DecodeHDR?函數(shù)。

顏色空間和顏色/矢量著色器數(shù)據(jù)

使用線性顏色空間時(shí),所有材質(zhì)顏色屬性均以 sRGB 顏色提供,但在傳遞到著色器時(shí)會轉(zhuǎn)換為線性值。

例如,如果?Properties?著色器代碼塊包含名為“MyColor“的?Color?屬性,則相應(yīng)的”MyColor”HLSL 變量將獲得線性顏色值。

對于標(biāo)記為?Float?或?Vector?類型的屬性,默認(rèn)情況下不進(jìn)行顏色空間轉(zhuǎn)換;而是假設(shè)它們包含非顏色數(shù)據(jù)。可為浮點(diǎn)/矢量屬性添加?[Gamma]?特性,以表示它們是以 sRGB 空間指定,就像顏色一樣(請參閱屬性)。


Unity-使用 Cg/HLSL 訪問著色器屬性的評論 (共 條)

分享到微博請遵守國家法律
达日县| 砚山县| 丹巴县| 常宁市| 金阳县| 山西省| 休宁县| 阿巴嘎旗| 酉阳| 达拉特旗| 五河县| 靖宇县| 鄂尔多斯市| 高邑县| 广昌县| 新乐市| 富民县| 芒康县| 白朗县| 涞水县| 贵定县| 自贡市| 乐山市| 昭平县| 元氏县| 讷河市| 都匀市| 榆中县| 亚东县| 花垣县| 澜沧| 乐都县| 太保市| 桐梓县| 临澧县| 离岛区| 高州市| 静安区| 偃师市| 普宁市| 马公市|