材質
材質是共用資源,其會定義如何轉譯三角形網格。 另一方面,點雲端無論如何都不會公開材質。
材質用來指定
- 要套用的紋理,
- 是否要讓物件透明、
- 光源如何與表面互動。
材質會在模型轉換期間自動建立,而且可在執行階段存取。 您也可以從程式碼建立自訂材質,並取代現有的材質。 如果您想要跨多個網格共用相同的材質,這種案例特別合理。 因為材質的修改會顯示在參考材質的每個網格上,所以這個方法可以用來輕鬆地套用變更。
注意
某些使用案例 (例如醒目提示挑選的物件) 可以藉由修改材質來完成,但是透過 HierarchicalStateOverrideComponent 更容易達成。
材質類型
Azure 遠端呈現有兩種不同的材質類型:
PBR 材質用於應該盡可能實際上正確轉譯的表面。 使用「實際型轉譯」(PBR) 來計算這些材質的真實感光源。 若要充分利用此材質類型,請務必提供高品質的輸入資料,例如粗糙度和一般地圖。
色彩材質用於不需要額外光源的情況。 這些材質永遠都是全亮的,並且更容易設定。 色彩材質用於應該完全沒有光源的資料,或已經合併靜態光源的資料,例如透過攝影測量取得的模型。
網格與MeshComponent 材質指派
三角形網格有一或多個子網格。 每個子網格都會參考一個材質。 您可以將材質變更為直接在網格上使用,或者您可以覆寫要在 MeshComponent 上用於子網格的材質。
當您直接在網格資源上修改材質時,這項變更會影響該網格的所有執行個體。 不過,在 MeshComponent 上進行變更時,只會影響一個網格執行個體。 哪一個方法比較合適,取決於所需的行為,但是修改 MeshComponent 是較常見的方法。
材質重複資料刪除
在轉換期間,具有相同屬性和紋理的多個材質會自動重複資料刪除成單一材質。 您可以在轉換設定中停用這項功能,但是建議您將其保持開啟以獲得最佳效能。
材質類別
API 所提供的所有材質都是衍生自基底類別 Material
。 您可以透過 Material.MaterialSubType
或直接將其轉換來查詢其類型:
void SetMaterialColorToGreen(Material material)
{
if (material.MaterialSubType == MaterialType.Color)
{
ColorMaterial colorMaterial = material as ColorMaterial;
colorMaterial.AlbedoColor = new Color4(0, 1, 0, 1);
return;
}
PbrMaterial pbrMat = material as PbrMaterial;
if (pbrMat != null)
{
pbrMat.AlbedoColor = new Color4(0, 1, 0, 1);
return;
}
}
void SetMaterialColorToGreen(ApiHandle<Material> material)
{
if (material->GetMaterialSubType() == MaterialType::Color)
{
ApiHandle<ColorMaterial> colorMaterial = material.as<ColorMaterial>();
colorMaterial->SetAlbedoColor({ 0, 1, 0, 1 });
return;
}
if (material->GetMaterialSubType() == MaterialType::Pbr)
{
ApiHandle<PbrMaterial> pbrMat = material.as<PbrMaterial>();
pbrMat->SetAlbedoColor({ 0, 1, 0, 1 });
return;
}
}
API 文件
- C# Material 類別
- C# ColorMaterial 類別
- C# PbrMaterial 類別
- C# RenderingConnection.CreateMaterial()
- C++ Material 類別
- C++ ColorMaterial 類別
- C++ PbrMaterial 類別
- C++ RenderingConnection::CreateMaterial()