Materiales

Los materiales son recursos compartidos que definen cómo se representan las mallas. Por otro lado, las nubes de puntos no exponen materiales.

Los materiales se usan para especificar

  • qué texturas se van a aplicar,
  • si los objetos se van a hacer transparentes
  • y cómo interactúa la iluminación con la superficie.

Los materiales se crean automáticamente durante la conversión de modelos y son accesibles en tiempo de ejecución. También puede crear materiales personalizados a partir de código y reemplazar los existentes. Este escenario tiene sentido especialmente si desea compartir el mismo material en muchas mallas. Dado que las modificaciones de un material están visibles en cada malla que hace referencia al mismo, este método se puede usar para aplicar fácilmente los cambios.

Nota:

Algunos casos de uso, como el resaltado de un objeto seleccionado, se pueden realizar mediante la modificación de materiales, pero se logran mucho más fácilmente a través del HierarchicalStateOverrideComponent.

Tipos de material

Azure Remote Rendering tiene dos tipos de material distintos:

  • Los materiales de PBR se usan para las superficies que deben representarse tan físicamente correctas como sea posible. La iluminación realista se calcula para estos materiales mediante la representación basada en la física (PBR). Para sacar el máximo partido a este tipo de material, es importante proporcionar datos de entrada de alta calidad, como mapas normales y de rugosidad.

  • Los materiales de color se usan para los casos en los que no se quiere iluminación adicional. Estos materiales siempre son totalmente brillantes y más fáciles de configurar. Los materiales de color se usan para los datos que no deben tener iluminación o que ya incorporan iluminación estática, como los modelos obtenidos a través de fotogrametría.

Asignación de material mesh frente a MeshComponent

Las mallas triangulares tienen una o varias submallas. Cada submalla hace referencia a un material. Puede cambiar el material para usarlo directamente en la malla, o bien invalidar el material que se va a usar para una submalla en un MeshComponent.

Cuando se modifica un material directamente en el recurso de malla, este cambio afecta a todas las instancias de esa malla. Sin embargo, cambiarlo en el MeshComponent solo afecta a esa instancia de malla. El método más adecuado depende del comportamiento deseado, pero la modificación de un MeshComponent es el enfoque más común.

Desduplicación de materiales

Durante la conversión, varios materiales con las mismas propiedades y texturas se desduplican automáticamente en un único material. Puede deshabilitar esta característica en la configuración de conversión, pero se recomienda dejarla para mejorar el rendimiento.

Clases Material

Todos los materiales proporcionados por la API se derivan de la clase base Material. Su tipo se puede consultar a través de Material.MaterialSubType o mediante su conversión directa:

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

Documentación de la API

Pasos siguientes