你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

天空反射

在 Azure 远程渲染中,天空纹理用于真实地照亮物体。 在增强现实应用程序中,此纹理应类似于真实的周边环境,使物体显得更生动。 本文介绍了如何更改天空纹理。 天空只影响 PBR 材料的渲染。 颜色材料点云不受影响。

注意

天空纹理也称为环境地图。 这两个术语可以互换使用。

物体照明

Azure 远程渲染运用基于物理学的渲染 (PBR) 来计算现实照明。 尽管你可以向场景中添加光源,但使用合适的天空纹理可以产生最棒的效果。

下面的图像显示了仅使用天空纹理来照亮各种表面的效果:

粗糙度 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 变体。

天空纹理类型

可以使用立体地图2D 纹理作为环境地图。

所有纹理都必须采用支持的纹理格式。 不需要为天空纹理提供 mipmap。

立体环境地图

下面提供了一个已解包的立体地图供参考:

An unwrapped cubemap

RenderingSession.Connection.LoadTextureAsync/ LoadTextureFromSasAsyncTextureType.CubeMap 一起使用来加载立体地图纹理。

球体环境地图

使用 2D 纹理作为环境地图时,图像必须处于球面坐标空间中。

A sky image in spherical coordinates

结合使用 TextureType.Texture2DRenderingSession.Connection.LoadTextureAsync 加载球体环境地图。

内置环境地图

Azure 远程渲染提供了几个始终可用的内置环境地图。 所有内置环境地图都是立体地图。

标识符 说明 图示
builtin://Autoshop 各种条带光线,明亮的室内基本照明 Autoshop skybox used to light an object
builtin://BoilerRoom 明亮的室内光线设置,多窗口光线 BoilerRoom skybox used to light an object
builtin://ColorfulStudio 中等亮度室内照明设置中的各种彩色光线 ColorfulStudio skybox used to light an object
builtin://Hangar 适中亮度的大厅环境光线 SmallHangar skybox used to light an object
builtin://IndustrialPipeAndValve 昏暗室内设置和明暗对比度 IndustrialPipeAndValve skybox used to light an object
builtin://Lebombo 白天的室内环境光线,明亮的窗口区域光线 Lebombo skybox used to light an object
builtin://SataraNight 夜晚昏暗的天空和地面以及许多周边光线 SataraNight skybox used to light an object
builtin://SunnyVondelpark 明亮的日光和阴影对比度 SunnyVondelpark skybox used to light an object
builtin://Syferfontein 晴朗天空光线和适中的地面照明 Syferfontein skybox used to light an object
builtin://TearsOfSteelBridge 适度变化的日光和阴影 TearsOfSteelBridge skybox used to light an object
builtin://VeniceSunset 傍晚接近黄昏时的日落光线 VeniceSunset skybox used to light an object
builtin://WhippleCreekRegionalPark 明亮、嫩绿和白色光线色调,昏暗的地面 WhippleCreekRegionalPark skybox used to light an object
builtin://WinterRiver 白天的明亮地面环境光线 WinterRiver skybox used to light an object
builtin://DefaultSky 与 TearsOfSteelBridge 相同 DefaultSky skybox used to light an object

API 文档

后续步骤