材質

材質是共用資源,其會定義如何轉譯三角形網格。 另一方面,點雲端無論如何都不會公開材質。

材質用來指定

  • 要套用的紋理
  • 是否要讓物件透明、
  • 光源如何與表面互動。

材質會在模型轉換期間自動建立,而且可在執行階段存取。 您也可以從程式碼建立自訂材質,並取代現有的材質。 如果您想要跨多個網格共用相同的材質,這種案例特別合理。 因為材質的修改會顯示在參考材質的每個網格上,所以這個方法可以用來輕鬆地套用變更。

注意

某些使用案例 (例如醒目提示挑選的物件) 可以藉由修改材質來完成,但是透過 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 文件

下一步