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


Отражения неба

В Удаленной отрисовке Azure для реалистичного освещения объектов применяется текстура неба. Для приложений дополненной реальности эта текстура должна убедительно имитировать обстановку реального мира. В этой статье описано, как изменить текстуру неба. Небо влияет только на отрисовку материалов PBR. Цветовые материалы и облака точек не влияют.

Примечание.

Текстура неба также называется картой среды. Эти термины являются взаимозаменяемыми.

Освещение объекта

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

На рисунках ниже показаны результаты освещения разных поверхностей только текстурой неба:

Неровность 0 0,25 0,5 0.75 1
Неметаллические Dielectric, Roughness=0 Dielectric, Roughness=0.25 Dielectric, Roughness=0.5 Dielectric, Roughness=0.75 Dielectric, Roughness=1
Металл Metal, Roughness=0 Metal, Roughness=0.25 Metal, Roughness=0.5 Metal, Roughness=0.75 Metal, Roughness=1

Дополнительные сведения о модели освещения см. в главе о материалах.

Внимание

Удаленная отрисовка Azure использует текстуру неба для моделей освещения. Она не отрисовывает цвет неба в качестве фона, так как приложения дополненной реальности уже имеют надлежащий фон, то есть реальный мир.

Изменение текстуры неба

Чтобы изменить карту среды, достаточно загрузить текстуру и изменить значение SkyReflectionSettings для сеанса.

async void ChangeEnvironmentMap(RenderingSession session)
{
    try
    {
        Texture skyTex = await session.Connection.LoadTextureFromSasAsync(new LoadTextureFromSasOptions("builtin://VeniceSunset", TextureType.CubeMap));
        session.Connection.SkyReflectionSettings.SkyReflectionTexture = skyTex;
    }
    catch (RRException exception)
    {
        System.Console.WriteLine($"Setting sky reflection failed: {exception.Message}");
    }
}
void ChangeEnvironmentMap(ApiHandle<RenderingSession> session)
{
    LoadTextureFromSasOptions params;
    params.TextureType = TextureType::CubeMap;
    params.TextureUri = "builtin://VeniceSunset";
    session->Connection()->LoadTextureFromSasAsync(params, [&](Status status, ApiHandle<Texture> res) {
        if (status == Status::OK)
        {
            ApiHandle<SkyReflectionSettings> settings = session->Connection()->GetSkyReflectionSettings();
            settings->SetSkyReflectionTexture(res);
        }
        else
        {
            printf("Texture loading failed!\n");
        }
    });
}

Этот LoadTextureFromSasAsync вариант используется выше, так как загружается встроенная текстура. При загрузке из связанных хранилищ BLOB-объектов используйте LoadTextureAsync вариант.

Типы текстур неба

Вы можете использовать в качестве карты среды cubemap или двухмерную текстуру.

Все текстуры должны иметь поддерживаемый формат текстуры. Для текстур неба не нужно предоставлять MIP-карты.

Кубические карты среды

Для справки ниже приведена распакованная карта куба:

Развернутый объект cubemap

Используйте RenderingSession.Connection.LoadTextureAsync/ LoadTextureFromSasAsync с TextureType.CubeMap для загрузки текстур кубической карты (cubemap).

Сферические карты среды

При использовании двухмерной текстуры в качестве карты среды изображение должно находиться в пространстве сферических координат.

Изображение неба вычисляется в сферических координатах

Используйте RenderingSession.Connection.LoadTextureAsync с TextureType.Texture2D для загрузки сферических карт среды.

Встроенные карты среды

Удаленная отрисовка Azure предоставляет несколько встроенных карт среды, которые всегда доступны. Все встроенные карты среды являются кубическими (cubemap).

Идентификатор Description Иллюстрация
builtin://Autoshop Разнообразные полосы света, яркое базовое освещение для закрытых помещений Скайбокс Autoshop, используемый для освещения объекта
builtin://BoilerRoom Яркое освещение для сцен в закрытых помещениях, свет от нескольких окон Скайбокс BoilerRoom, используемый для освещения объекта
builtin://ColorfulStudio Окрашенный свет в закрытом помещении средней освещенности Скайбокс ColorfulStudio, используемый для освещения объекта
builtin://Hangar Равномерное неинтенсивное освещение в помещении большого размера Скайбокс SmallHangar, используемый для освещения объекта
builtin://IndustrialPipeAndValve Тускло освещенное закрытое помещение с контрастными участками Скайбокс IndustrialPipeAndValve, используемый для освещения объекта
builtin://Lebombo Равномерное дневное освещение в комнате, ярко освещенная область окна Скайбокс Lebombo, используемый для освещения объекта
builtin://SataraNight Темное ночное небо и земля со множеством источников света Скайбокс SataraNight, используемый для освещения объекта
builtin://SunnyVondelpark Яркий солнечный свет и контрастные тени Скайбокс SunnyVondelpark, используемый для освещения объекта
builtin://Syferfontein Чистое небо, умеренное освещение от земли Скайбокс Syferfontein, используемый для освещения объекта
builtin://TearsOfSteelBridge Умеренное освещение с неравномерными светлыми и затененными участками Скайбокс TearsOfSteelBridge, используемый для освещения объекта
builtin://VeniceSunset Вечернее закатное освещение перед сумерками Скайбокс VeniceSunset, используемый для освещения объекта
builtin://WhippleCreekRegionalPark Освещение ярких тонов зеленого и белого цвета, затененная земля Скайбокс WhippleCreekRegionalPark, используемый для освещения объекта
builtin://WinterRiver Дневное освещение с ярко и равномерно освещенной землей Скайбокс WinterRiver, используемый для освещения объекта
builtin://DefaultSky То же, что и TearsOfSteelBridge Скайбокс DefaultSky, используемый для освещения объекта

Документация по API

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