Freigeben über


Himmelsreflexionen

In Azure Remote Rendering wird eine Himmelstextur verwendet, um Objekte realistisch zu beleuchten. In Augmented-Reality-Anwendungen sollte diese Textur der realen Umgebung ähneln, damit die Objekte überzeugend echt erscheinen. In diesem Artikel wird beschrieben, wie Sie die Himmelstextur ändern. Der Himmel wirkt sich nur auf das Rendern von PBR-Materialien aus. Farbige Materialien und Punktwolken sind nicht betroffen

Hinweis

Die Himmelstextur wird auch als Environment Map bezeichnet. Beide Begriffe werden synonym verwendet.

Objektbeleuchtung

In Azure Remote Rendering werden mithilfe von Physically Based Rendering (PBR) realistische Lichteffekte berechnet. Obwohl Sie auch Lichtquellen zu Ihrer Szene hinzufügen können, ist die Verwendung einer guten Himmelstextur die effektivste Methode.

Die folgenden Bilder zeigen, was geschieht, wenn verschiedene Oberflächen nur mit einer Himmeltextur beleuchtet werden:

Roughness 0 0,25 0.5 0,75 1
Nicht metallisch Dielektrisch, Rauheit=0 Dielektrisch, Rauheit=0,25 Dielektrisch, Rauheit=0,5 Dielektrisch, Rauheit=0,75 Dielektrisch, Rauheit=1
Metal Metallisch, Rauheit=0 Metallisch, Rauheit=0,25 Metallisch, Rauheit=0,5 Metallisch, Rauheit=0,75 Metallisch, Rauheit=1

Weitere Informationen zum Belichtungsmodell finden Sie im Kapitel Materialien.

Wichtig

Himmelstexturen werden in Azure Remote Rendering nur für Belichtungsmodelle verwendet. Damit lässt sich nicht der Himmel als Hintergrund rendern, da Augmented-Reality-Anwendungen bereits über einen angemessenen Hintergrund verfügen: die echte Welt.

Ändern der Himmelstextur

Zum Ändern der Environment Map müssen Sie lediglich eine Textur laden und das SkyReflectionSettings-Objekt der Sitzung ändern:

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

Oben wird die Variante LoadTextureFromSasAsync verwendet, da eine integrierte Textur geladen wird. Wenn Sie stattdessen Daten aus verknüpften Blobspeichern laden, verwenden Sie die Variante LoadTextureAsync.

Typen von Himmelstexturen

Sie können sowohl Cube Maps als auch 2D-Texturen als Environment Map verwenden.

Alle Texturen müssen in einem unterstützten Texturformat vorliegen. Für Himmelstexturen müssen Sie keine MipMaps bereitstellen.

Cube-Environment-Maps

Dies ist ein Beispiel für eine aufgeklappte Cube Map:

Aufgeklappte Cube Map

Verwenden Sie RenderingSession.Connection.LoadTextureAsync/ LoadTextureFromSasAsync mit TextureType.CubeMap, um Cube-Map-Texturen zu laden.

Sphärische Environment Maps

Bei einer 2D-Textur als Environment Map muss sich das Bild in einem sphärischen Koordinatenraum befinden.

Ein Himmelsbild in einem sphärischen Koordinatenraum

Verwenden Sie RenderingSession.Connection.LoadTextureAsync mit TextureType.Texture2D, um sphärische Environment Maps zu laden.

Integrierte Environment Maps

Azure Remote Rendering bietet einige integrierte Environment Maps, die immer verfügbar sind. Alle integrierten Environment Maps sind Cube Maps.

Bezeichner Beschreibung Abbildung
builtin://Autoshop Vielfalt von Lichtstreifen, helle Innenraumgrundbeleuchtung Autoshop-Skybox zum Beleuchten eines Objekts verwendet
builtin://BoilerRoom Helle Innenraum-Lichtszene, mehrere Fensterlichter BoilerRoom-Skybox zum Beleuchten eines Objekts verwendet
builtin://ColorfulStudio Unterschiedlich farbige Lichter in einer mittelhellen Innenraum-Lichtszene ColorfulStudio-Skybox zum Beleuchten eines Objekts verwendet
builtin://Hangar Mäßig helles Umgebungsflurlicht SmallHangar-Skybox zum Beleuchten eines Objekts verwendet
builtin://IndustrialPipeAndValve Gedimmte Innenraum-Lichtszene mit einem Hell-Dunkel-Kontrast IndustrialPipeAndValve-Skybox zum Beleuchten eines Objekts verwendet
builtin://Lebombo Tagesumgebungslicht, Innenraum, helles Fensterlicht Lebombo-Skybox zum Beleuchten eines Objekts verwendet
builtin://SataraNight Dunkler Nachthimmel und Boden mit vielen umgebenden Lichtern SataraNight-Skybox zum Beleuchten eines Objekts verwendet
builtin://SunnyVondelpark Kontrast zwischen hellem Sonnenlicht und Schatten SunnyVondelpark-Skybox zum Beleuchten eines Objekts verwendet
builtin://Syferfontein Klares Himmelslicht mit mäßiger Bodenbeleuchtung Syferfontein-Skybox zum Beleuchten eines Objekts verwendet
builtin://TearsOfSteelBridge Moderater Übergang zwischen Licht (Sonne) und Schatten TearsOfSteelBridge-Skybox zum Beleuchten eines Objekts verwendet
builtin://VeniceSunset Licht des Sonnenuntergangs am Abend, fast Dämmerung VeniceSunset-Skybox zum Beleuchten eines Objekts verwendet
builtin://WhippleCreekRegionalPark Helle, üppig grüne und weiße helle Töne, dunklerer Boden WhippleCreekRegionalPark-Skybox zum Beleuchten eines Objekts verwendet
builtin://WinterRiver Tagsüber, helles Umgebungsbodenlicht WhiteRiver-Skybox zum Beleuchten eines Objekts verwendet
builtin://DefaultSky Identisch mit TearsOfSteelBridge DefaultSky-Skybox zum Beleuchten eines Objekts verwendet

API-Dokumentation

Nächste Schritte