Condividi tramite


Materiali

I materiali sono risorse condivise che definiscono il rendering delle mesh triangolari. Le nuvole di punti, d'altra parte, non espongono materiali.

I materiali vengono utilizzati per specificare

  • quali trame applicare,
  • se rendere trasparenti gli oggetti,
  • come l'illuminazione interagisce con la superficie.

I materiali vengono creati automaticamente durante la conversione modello e sono accessibili in fase di esecuzione. È anche possibile creare materiali personalizzati partendo dal codice e sostituire quelli esistenti. Questo scenario è particolarmente utile se si vuole condividere lo stesso materiale in molte reti mesh. Poiché le modifiche di un materiale sono visibili in ogni rete mesh che vi fa riferimento, questo metodo può essere usato per applicare facilmente eventuali modifiche.

Nota

Alcuni casi d'uso, ad esempio l'evidenziazione di un oggetto selezionato, possono essere eseguiti modificando i materiali, ma sono molto più facili da ottenere tramite il comando HierarchicalStateOverrideComponent.

Tipi di materiale

Il rendering remoto di Azure dispone di due tipi di materiale distinti:

  • I materiali PBR vengono usati per le superfici di cui è necessario eseguire il rendering nel modo più appropriato possibile. L'illuminazione realistica per questi materiali viene calcolata mediante PBR (Physically Based Rendering). Per sfruttare al meglio questo tipo di materiale, è importante fornire dati di input di alta qualità, ad esempio la rugosità e le mappe normali.

  • I materiali di colore vengono usati per i casi in cui non è desiderata alcuna illuminazione aggiuntiva. Questi materiali sono sempre luminosi e sono più facili da configurare. I materiali a colori vengono usati per i dati che non devono avere alcuna illuminazione o che incorporano già un'illuminazione statica, ad esempio i modelli ottenuti tramite fotogrammetria.

Assegnazione di materiale Mesh e MeshComponent

Le mesh triangolari hanno uno o più sottomessi. Ogni mesh secondaria fa riferimento a un solo materiale. È possibile modificare il materiale da usare direttamente sulla mesh oppure eseguire l'override del materiale da usare per una mesh secondaria in un elemento MeshComponent.

Quando si modifica un materiale direttamente nella risorsa mesh, questa modifica ha effetto su tutte le istanze di tale mesh. La modifica in MeshComponent, tuttavia, interessa solo tale istanza della mesh. Il metodo più appropriato dipende dal comportamento desiderato, ma la modifica di un MeshComponent è l'approccio più comune.

Deduplica dei materiali

Durante la conversione, più materiali con le stesse proprietà e le stesse trame vengono automaticamente deduplicati in un singolo materiale. Anche se è possibile disabilitare questa funzionalità nelle impostazioni di conversione, è consigliabile lasciarla attivata per ottenere prestazioni ottimali.

Classi di materiali

Tutti i materiali forniti dall'API derivano dalla classe di base Material. Il tipo può essere sottoposto a query tramite Material.MaterialSubType o eseguendone direttamente il cast:

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;
    }
}

Documentazione sull'API

Passaggi successivi