Materiais

Os materiais são recursos compartilhados que definem como as malhas triangulares são renderizadas. As nuvens de pontos, por outro lado, não expõem materiais de forma alguma.

Os materiais são usados para especificar

  • quais as texturas a aplicar,
  • tornar os objetos transparentes,
  • como a iluminação interage com a superfície.

Os materiais são criados automaticamente durante a conversão do modelo e são acessíveis em tempo de execução. Você também pode criar materiais personalizados a partir do código e substituir os existentes. Este cenário faz especialmente sentido se você quiser compartilhar o mesmo material em muitas malhas. Uma vez que as modificações de um material são visíveis em todas as malhas que fazem referência a ele, este método pode ser usado para aplicar facilmente as alterações.

Nota

Alguns casos de uso, como destacar um objeto selecionado, podem ser feitos modificando materiais, mas são muito mais fáceis de alcançar por meio do HierarchicalStateOverrideComponent.

Tipos de materiais

A Renderização Remota do Azure tem dois tipos de material distintos:

  • Os materiais PBR são usados para superfícies que devem ser processadas o mais fisicamente corretas possível. A iluminação realista é calculada para esses materiais usando renderização baseada em física (PBR). Para tirar o máximo proveito desse tipo de material, é importante fornecer dados de entrada de alta qualidade, como rugosidade e mapas normais.

  • Materiais de cor são usados para casos onde nenhuma iluminação extra é desejada. Estes materiais são sempre brilhantes e são mais fáceis de configurar. Os materiais coloridos são usados para dados que não devem ter iluminação alguma, ou já incorporam iluminação estática, como modelos obtidos por fotogrametria.

Atribuição de material Mesh vs. MeshComponent

As malhas triangulares têm uma ou mais submalhas. Cada submalha faz referência a um material. Você pode alterar o material a ser usado diretamente na malha ou pode substituir qual material usar para uma submalha em um MeshComponent.

Quando você modifica um material diretamente no recurso de malha, essa alteração afeta todas as instâncias dessa malha. Alterá-lo no MeshComponent, no entanto, afeta apenas essa instância de malha. Qual método é mais apropriado depende do comportamento desejado, mas modificar um MeshComponent é a abordagem mais comum.

Eliminação da duplicação de materiais

Durante a conversão, vários materiais com as mesmas propriedades e texturas são automaticamente desduplicados em um único material. Você pode desativar esse recurso nas configurações de conversão, mas recomendamos deixá-lo ativado para obter o melhor desempenho.

Classes de materiais

Todos os materiais fornecidos pela API derivam da classe Materialbase. O seu tipo pode ser consultado através Material.MaterialSubType ou transmitindo-os diretamente:

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

Documentação da API

Próximos passos