Materiais
Os materiais são recursos compartilhados que definem como as malhas triangulares são renderizadas. Nuvens de pontos, por outro lado, não expõem materiais.
Os materiais são usados para especificar
- quais texturas aplicar,
- se os objetos devem ser transparentes,
- como a iluminação interage com a superfície.
Os materiais são criados automaticamente durante a conversão de modelo e podem ser acessados no runtime. Também é possível criar materiais personalizados a partir do código e substituir os existentes. Esse cenário faz sentido principalmente se você quiser compartilhar o mesmo material em várias malhas. Como as mudanças de um material são visíveis em todas as malhas que fazem referência a ela, esse método pode ser usado para aplicar alterações com facilidade.
Observação
Alguns casos de uso, como realçar um objeto selecionado, podem ser aplicados por meio da mudança de materiais, mas é muito mais fácil fazer isso usando HierarchicalStateOverrideComponent.
Tipos de material
O Azure Remote Rendering tem dois tipos de material distintos:
Materiais de PBR são usados para superfícies que devem ser renderizadas como fisicamente corretas, o quanto possível. A iluminação realista é calculada para esses materiais usando renderização baseada em física (PBR). Para aproveitar ao máximo esse tipo de material, é importante fornecer dados de entrada de alta qualidade, como esboços e mapas normais.
Materiais coloridos são usados para casos em que nenhuma iluminação adicional é desejada. Esses materiais são sempre brilhantes e mais fáceis de configurar. Materiais de cor são usados para dados que não devem ter nenhuma iluminação ou que já incorporam iluminação estática, como modelos obtidos por meio de fotogrametria.
Malha em comparação com atribuição de material MeshComponent
As Malhas triangulares têm uma ou mais sub-malhas. Cada submalha faz referência a um material. É possível mudar o material a ser usado diretamente na malha ou substituir o material a ser usado em uma submalha em um MeshComponent.
Quando você muda 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 uma instância de malha. O método mais apropriado depende do comportamento desejado, mas a mudança de um MeshComponent é a abordagem mais comum.
Eliminação de duplicação do material
Durante a conversão, vários materiais com as mesmas propriedades e texturas são automaticamente desduplicadas em um único material. É possível desabilitar esse recurso nas configurações de conversão, mas é recomendável deixar habilitado para obter o melhor desempenho.
Classes de material
Todos os materiais fornecidos pela API derivam da classe base Material
. Seu tipo pode ser consultado por meio de Material.MaterialSubType
ou convertendo-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
- Classe Material do C#
- Classe ColorMaterial do C#
- Classe PbrMaterial do C#
- RenderingConnection.CreateMaterial() do C#
- Classe Material do C++
- Classe ColorMaterial do C++
- Classe PbrMaterial do C++
- RenderingConnection::CreateMaterial() do C++