Поделиться через


Материалы

Материалы — это общие ресурсы , определяющие способ отрисовки треугольных сеток . Точечная облака с другой стороны не предоставляют материалы вообще.

Материалы используются для указания

  • какие текстуры следует применить,
  • следует ли сделать объекты прозрачными,
  • как освещение взаимодействует с поверхностью.

Материалы автоматически создаются во время преобразования модели и становятся доступны во время выполнения. Вы также можете создавать в коде собственные материалы и заменять ими существующие. Такой сценарий особенно подходит, если вы хотите использовать один материал для многих сеток. Так как изменения материала будут отражаться во всех сетках, которые ссылаются на него, такой способ позволяет легко вносить изменения.

Примечание.

Некоторые сценарии использования, например выделение взятого объекта, можно выполнять через изменение материалов, но гораздо эффективнее обрабатывать их в HierarchicalStateOverrideComponent.

Типы материалов

В службе "Удаленная отрисовка Azure" используется два разных типа материалов.

  • Материалы PBR предназначены для поверхностей, которые должны быть как можно более точными с физической точки зрения. Для этих материалов вычисляется реалистичное освещение с помощью физически корректной отрисовки (PBR). Чтобы получить большую часть этого типа материала, важно обеспечить высококачественные входные данные, такие как шероховатость и обычные карты.

  • Цветовые материалы используются для случаев, когда не требуется дополнительного освещения. Эти материалы всегда считаются полностью освещенными, что упрощает настройку. Цветовые материалы используются в тех случаях, когда освещение не учитывается совсем или вычисляется для статической сцены, например в моделях, полученных методом фотограмметрии.

Назначение материалов Mesh и MeshComponent

Триангулярные сетки имеют один или несколько подмеша. Каждая подсетка ссылается на один материал. Вы можете изменить используемый материал непосредственно для сетки или переопределить материал для подсетки, изменяя узел MeshComponent.

Если вы изменяете материал непосредственно для ресурса сетки, это изменение затрагивает все экземпляры этой сетки. Но изменение в MeshComponent влияет только на один конкретный экземпляр сетки. Выбор оптимального метода зависит от того, какое поведение более предпочтительно. Более распространен вариант изменения MeshComponent.

Дедупликация материалов

Во время преобразования несколько материалов с одинаковыми свойствами и текстурами автоматически дедуплицируются в один материал. Это поведение можно отключить в параметрах преобразования, но мы рекомендуем сохранять его для повышения производительности.

Классы материалов

Все материалы, предоставляемые в API, являются производными от базового класса Material. Их тип можно запрашивать через Material.MaterialSubType или путем прямого приведения:

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

Следующие шаги