天空反射

在 Azure 遠端轉譯中,會使用天空紋理來實際照亮物件。 針對擴增實境應用程式,此紋理應類似於您的真實世界周圍,讓物件看起來更有說服力。 本文說明如何變更天空紋理。 Sky 只會影響 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 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。

Cube 環境對應

如需參考,以下是未包裝的立方體貼圖:

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 文件

下一步