Teilen über


Material

Materialien sind freigegebene Ressourcen, die definieren, wie Dreiecksnetze gerendert werden. Punktwolken stellen dagegen keine Materialien zur Verfügung.

Mit Materialien wird angegeben,

  • welche Texturen angewendet werden sollen
  • ob Objekte transparent gestaltet werden sollen
  • wie Beleuchtung mit der Oberfläche interagiert

Material werden während der Modellkonvertierung automatisch erstellt und können zur Laufzeit aufgerufen werden. Sie können auch benutzerdefinierte Materialien auf der Grundlage von Code erstellen und vorhandene Materialien ersetzen. Dieses Szenario empfiehlt sich besonders, wenn Sie das gleiche Material für viele Gittermodelle gemeinsam nutzen möchten. Da Änderungen an einem Material in jedem Gittermodell sichtbar sind, das darauf verweist, können mithilfe dieser Methode Änderungen einfach angewendet werden.

Hinweis

Einige Anwendungsfälle, wie z. B. das Markieren eines ausgewählten Objekts, können durch das Ändern von Materialien realisiert werden; sie werden jedoch über die HierarchicalStateOverrideComponent viel einfacher erreicht.

Materialtypen

In Azure Remote Rendering gibt es zwei verschiedene Materialtypen:

  • PBR-Materialien, die für Oberflächen verwendet werden, die mit möglichst hoher physischer Genauigkeit gerendert werden sollen. Realistische Beleuchtung wird für diese Materialien mithilfe von Physically Based Rendering (PBR) berechnet. Um diesen Materialtyp optimal zu nutzen, ist es wichtig, qualitativ hochwertige Eingabedaten bereitzustellen, z. B. Rauheit und Normal Maps.

  • Farbmaterialien werden für Fälle verwendet, in denen keine zusätzliche Beleuchtung erwünscht ist. Diese Materialien zeichnen sich immer durch volle Helligkeit aus und können einfacher eingerichtet werden. Farbmaterialien werden für Daten verwendet, die entweder über keinerlei Beleuchtung verfügen oder die sich bereits durch eine statische Beleuchtung auszeichnen, beispielsweise Modelle, die mittels Fotogrammetrie erhalten wurden.

Gittermodell- im Vergleich zu MeshComponent-Materialzuweisung

Dreiecksnetze verfügen über ein oder mehrere untergeordnete Netze. Jedes untergeordnete Gittermodell verweist auf ein Material. Sie können das zu verwendende Material entweder direkt im Gittermodell ändern, oder Sie können das für ein untergeordnetes Gittermodell zu verwendende Material in einer MeshComponent außer Kraft setzen.

Wenn Sie ein Material direkt in der Gittermodellressource ändern, wirkt sich diese Änderung auf alle Instanzen des betreffenden Gittermodells aus. Eine Änderung in der MeshComponent wirkt sich hingegen nur auf die betreffende Gittermodellinstanz aus. Welche Methode besser geeignet ist, hängt vom gewünschten Verhalten ab. Der gängigste Ansatz ist aber das Ändern einer MeshComponent.

Deduplizierung von Materialien

Bei der Konvertierung werden mehrere Materialien mit denselben Eigenschaften und Texturen automatisch in ein einzelnes Material dedupliziert. Sie können dieses Feature in den Konvertierungseinstellungen deaktivieren, zum Erzielen der optimalen Leistung empfiehlt es sich aber, das Feature beizubehalten.

Materialklassen

Alle von der API bereitgestellten Materialien sind von der Basisklasse Material abgeleitet. Ihr Typ kann mit Material.MaterialSubType oder durch direkte Umwandlung abgefragt werden:

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-Dokumentation

Nächste Schritte