色彩材質
色彩材質是 Azure 遠端轉譯 中支援的材質類型之一。 它們用於 不應該接收任何類型的光源的網格 ,而是總是以全亮度顯示。 這可能是「發光」材質的情況,例如汽車儀錶板、燈泡,或已經納入靜態光源的數據,例如透過 攝影測量取得的模型。
色彩材質比 PBR 材質 更有效率,因為其較簡單的底紋模型。 它們也支援不同的透明度模式。
色彩材質屬性
運行時間 API 中會公開下列材質屬性,例如 C# ColorMaterial 類別 或 C++ ColorMaterial 類別。
ColorFlags
:此位掩碼中可以結合其他功能旗標,以啟用下列功能:UseVertexColor
:如果網格包含 vertex 色彩,且已啟用此選項,則網格的 vertex 色彩會乘入AlbedoColor
和AlbedoMap
。UseVertexColor
預設為停用。DoubleSided
:如果雙面設定為 true,即使相機正在查看其後臉,也會轉譯具有此材質的三角形。 此選項預設為停用。 請參閱 Single-sided rendering。AlphaClipped
:根據 Alpha 值低於 的值AlphaClipThreshold
,啟用每圖元的硬式切出(請參閱下方)。 這也適用於不透明的材質。TransparencyWritesDepth
:如果旗TransparencyWritesDepth
標是在材質上設定,而且材質是透明的,則使用此材質的物件也會對最終深度緩衝區造成貢獻。 請參閱下一節中的色彩材質屬性ColorTransparencyMode
。 如果您的使用案例需要更合理的 後期重現 完全透明場景,建議您啟用此功能。 對於混合不透明/透明場景,此設定可能會引入無法辨識的重現行為或重現成品。 因此,一般使用案例的預設和建議設定是停用此旗標。 寫入的深度值取自最接近相機之物件的每圖元深度層。FresnelEffect
:此材質旗標可對個別材質啟用加法 弗雷內爾效果 。 效果的外觀會受到其他fresnel 參數FresnelEffectColor
的控管,如下FresnelEffectExponent
所述。
AlbedoColor
:此色彩會與其他色彩相乘,例如AlbedoMap
或 vertex 色彩。 如果在 材質上啟用透明度 ,Alpha 色板會用來調整不透明度,1
意義完全不透明且0
意義完全透明。 預設的albedo色彩不透明。注意
由於色彩材質不會反映環境,因此完全透明的色彩材質會變成看不見。 這與 PBR 材質不同。
AlbedoMap
:每圖元反白值的 2D 紋理。AlphaClipThreshold
:如果旗AlphaClipped
標是在 屬性上ColorFlags
設定,則albedoAlpha值低於 不會繪製的值AlphaClipThreshold
的所有圖元。 即使沒有啟用透明度,也能使用Alpha裁剪,而且轉譯速度要快得多。 不過,Alpha 裁剪材質的呈現速度仍然比完全不透明材質慢。 預設會停用Alpha裁剪。TexCoordMode
:定義用來產生 Albedo 紋理紋理座標的模式。 如果此材質不使用紋理,則會忽略此模式。 根據預設,紋理座標會從網格的輸入頂點數據流擷取(模式TextureCoordinateGenerationMode.SourceUv0
或TextureCoordinateGenerationMode.SourceUv1
),然後透過TexCoordScale
和TexCoordOffset
轉換。 透過程式代碼設定材質時,此模式也可以設定為TextureCoordinateGenerationMode.PlanarObjectSpace
或TextureCoordinateGenerationMode.PlanarWorldSpace
產生座標,做為兩個可設定的 3D 平面TexCoordPlaneU
和TexCoordPlaneV
的頂點距離。 這稱為「平面紋理對應」。TexCoordScale
和TexCoordOffset
:對於來源網格的紋理座標,可以套用額外的線性轉換。 縮放比例會乘入UV紋理座標,並將位移新增至其中。 可以用來伸展和移動紋理。 默認小數字數為 (1, 1), 位移為 (0, 0)。TexCoordPlaneU
和TexCoordPlaneV
:對於平面對應模式,這些模式會分別定義 u 座標和 v 坐標的紋理平面。 平面是以標準法線形式定義(A、B、C、D),因此座標會計算為 t = Ax + By + C*z + D,其中 (x,y,z) 是世界或對象空間中的頂點位置。FresnelEffectColor
:用於此材質的弗雷斯內爾色彩。 只有當弗雷內爾效果旗標已設定在這個材質上時才重要(請參閱上圖)。 此屬性會控制弗雷內爾閃耀的基底色彩(如需完整說明,請參閱 弗雷斯內爾效果 )。 目前只有 RGB 通道值很重要,而且會忽略 Alpha 值。FresnelEffectExponent
:用於此材質的弗雷斯內爾指數。 只有當弗雷內爾效果旗標已設定在這個材質上時才重要(請參閱上圖)。 此屬性會控制弗雷內爾閃耀的傳播。 最小值 0.01 會導致整個物件分散。 最大值 10.0 使光芒只有最放牧邊緣可見。VertexMix
:和 之間的0
這個值會指定網格中色彩對最終色彩的貢獻程度vertex。1
默認值為 1, vertex 色彩會完全乘入 albedo 色彩。 值為 0 時 vertex ,會完全忽略色彩。ColorTransparencyMode
:與 PBR 材質相反,色彩材質會區分不同的透明度模式:Opaque
:預設模式會停用透明度。 不過,如果足夠的話,還是可以採用Alpha裁剪。AlphaBlended
:此模式類似於 PBR 材質的透明度模式。 它應該用於玻璃等看透材料。Additive
:此模式是最簡單且最有效率的透明度模式。 材質的貢獻會新增至轉譯的影像。 此模式可用來模擬發光(但仍透明)物件,例如用於醒目提示重要對象的標記。
轉換期間的色彩材質覆寫
透過材質覆寫檔案,可以在模型轉換期間覆寫色彩材質屬性的子集。 下表顯示上述記錄的執行時間屬性與覆寫檔案中對應的屬性名稱之間的對應:
Material 屬性名稱 | 覆寫檔案中的屬性名稱 |
---|---|
ColorFlags.AlphaClipped |
alphaClipEnabled |
ColorFlags.UseVertexColor |
useVertexColor |
ColorFlags.DoubleSided |
isDoubleSided |
ColorFlags.TransparencyWritesDepth |
transparencyWritesDepth |
AlbedoColor |
albedoColor |
TexCoordScale |
textureCoordinateScale |
TexCoordOffset |
textureCoordinateOffset |
ColorTransparencyMode |
transparent |
AlphaClipThreshold |
alphaClipThreshold |
API 文件
- C# ColorMaterial 類別
- C# RenderingConnection.CreateMaterial()
- C++ ColorMaterial 類別
- C++ RenderingConnection::CreateMaterial()