Verwendung bildbasierter Beleuchtung

Einführung

Qt Quick 3D unterstützt IBL (Image-Based Lighting), um Szenen oder einzelne Materialien zu beleuchten.

IBL ist eine Beleuchtungsmethode, mit der Szenen mit Bildern beleuchtet werden können. Dies ist besonders nützlich, wenn Sie realistische Beleuchtung und Reflexionen in Innen- und Außenszenen erzeugen möchten.

Sie können jede beliebige Bilddatei für IBL verwenden, aber es wird empfohlen, 360º-HDR-Bilder (High Dynamic Range) zu verwenden. HDR-Bilder haben einen viel höheren Dynamikbereich als z. B. JPEG- oder PNG-Bilder. Ein höherer Dynamikbereich sorgt für eine realistischere Beleuchtung durch eine große Bandbreite an Leuchtdichten von sehr hell bis sehr dunkel.

Das folgende Beispiel veranschaulicht die Beleuchtungswirkung auf ein Objekt unter Verwendung eines HDR-Bildes im Vergleich zu einem einzelnen gerichteten Licht:

LichtGlattes dielektrisches MaterialRaues dielektrisches MaterialGlattes metallisches MaterialRaues metallisches Material
Einseitig gerichtetes Licht

Bildbasiertes Licht

Szenische Beleuchtung

Um eine scene mit einem Bild zu beleuchten, fügen Sie das Bild als Texture zur Eigenschaft lightProbe hinzu.

lightProbe: Texture {
    source: "maps/OpenfootageNET_garage-1024.hdr"
}

Sobald Sie ein Bild ausgewählt haben, wird IBL für Ihre Szene eingerichtet. Alle Modelle in der Szene werden standardmäßig von der Lichtsonde beleuchtet.

Hinweis: Sie können IBL auch mit jeder anderen Lichtquelle kombinieren, um den Beleuchtungseffekt eines Objekts zu vervollständigen.

Nachdem Sie nun IBL für Ihre Szene eingerichtet haben, lassen Sie uns einen Blick auf die verschiedenen Eigenschaften der Sonde werfen. In vielen Fällen liefern die Standardwerte ein zufriedenstellendes Ergebnis, aber Sie können die folgenden Eigenschaftswerte je nach Bild und gewünschtem Ergebnis anpassen:

  • Exposure Die von der Lichtsonde abgegebene Lichtmenge.
  • Horizon Cut-Off Durch Erhöhen des Wertes wird die untere Hälfte der Umgebung dunkel (schwarz), so dass die Beleuchtung überwiegend von oben kommt (und bestimmte Reflexionen in der unteren Hälfte des Bildes entfernt werden).
  • Orientation Mit dieser Eigenschaft wird die Ausrichtung der Lichtsonde definiert. Die Ausrichtung wird in Form von Eulerwinkeln in Grad über die x-, y- und z-Achse definiert.
EigenschaftMetallisches MaterialDielektrisches Material
Standardeinstellungen

Belichtung

Horizont Abgrenzung

Ausrichtung

Material-Beleuchtung

Um die bildbasierte Beleuchtung nur für ein Material anstelle einer ganzen Szene zu verwenden oder einen separaten Lichtleiter für ein Modell zu verwenden, das bereits mit bildbasierter Beleuchtung beleuchtet wird, legen Sie das Bild als light probe für das Material fest.

Wenn Sie die obigen Schritte befolgt haben, haben Sie einen separaten Lichtfühler für das Material eingestellt. Diese Lichtsonde hat Vorrang vor der Szenen-Lichtsonde, falls eine solche angegeben ist.

IBL-Cubemap vorgenerieren

Wenn IBL verwendet wird, muss eine Cubemap für das IBL-Bild von der Anwendung erzeugt werden. Standardmäßig geschieht dies während des Starts der Anwendung und kann recht langsam sein, insbesondere auf eingebetteten und mobilen Geräten. Es ist daher möglich, diese Cubemap mit Balsam vorab zu generieren. Starten Sie einfach Balsam mit der .hdr-Datei als Eingabe und es wird eine Cubemap-Datei mit dem gleichen Namen wie die Eingabe, aber mit einer ktx-Dateierweiterung ausgegeben. Auf diese Datei kann dann in der lightProbe-Eigenschaft Texture verwiesen werden, und Qt lädt dann die vorgenerierte Cubemap ohne aufwendige Verarbeitung zur Laufzeit.

Manuelles Backen

Nehmen wir als Beispiel an, dass die Anwendung ein .hdr-Bild für ihre LightProbes oder die Skybox verwendet:

View3D {
    environment: SceneEnvironment {
        backgroundMode: SceneEnvironment.SkyBox
        lightProbe: Texture {
            source: "environment.hdr"
        }
        probeOrientation: Qt.vector3d(0, -90, 0)
    }
    // ...
}

Dies ist voll funktionsfähig, vorausgesetzt, environment.hdr ist zur Laufzeit verfügbar. Das Laden des .hdr-Bildes erfordert jedoch eine aufwendige Vorverarbeitung. Dies kann durch die Ausführung vermieden werden:

balsam environment.hdr

Das Ergebnis ist eine neue Datei environment.ktx. Wenn Sie diese Datei anstelle der .hdr-Datei versenden und die Texturquelle ändern, werden die Ladezeiten erheblich verkürzt.

lightProbe: Texture {
    source: "environment.ktx"
}

Backen der Bauzeit mit CMake

Die manuelle Ausführung von Balsam auf Assets ist nicht immer ideal. Daher wird empfohlen, sich auf CMake zu verlassen, um die gleiche Aufgabe automatisch während der Erstellung der Anwendung auszuführen.

Dies geschieht mit Hilfe der CMake-Funktion qt6_add_lightprobe_images, die von der Quick3D-Komponente des Qt6-Pakets bereitgestellt wird:

...
find_package(Qt6 COMPONENTS Quick3D)
...
qt6_add_lightprobe_images(application_target "ibl_assets"
    PREFIX
        "/ibl"
    FILES
        "environment.hdr"
)

Ersetzen Sie application_target durch das entsprechende Ziel. In diesem Fall ist es nicht mehr nötig, balsam manuell auf environment.hdr auszuführen, und die .hdr-Datei muss nicht mit der Anwendung ausgeliefert werden. Stattdessen wird balsam während des Builds automatisch aufgerufen, und eine environment.ktx wird zu den Anwendungsressourcen unter :/ibl/environment.ktx hinzugefügt. Die Texture der lightProbe muss dann auf diese Datei verweisen.

lightProbe: Texture {
    source: "qrc:/ibl/environment.ktx"
}

Hinweis: Wenn Sie PREFIX so einstellen, dass der endgültige Name im Ressourcensystem einen Pfad hat, der mit dem Speicherort der .qml-Datei übereinstimmt, können Sie einen relativen Quellpfad verwenden, anstatt einen absoluten Pfad mit dem qrc-Schema angeben zu müssen.

Zusätzlich zu PREFIX ist auch das Schlüsselwort BASE verfügbar. Das Verhalten folgt dem von qt6_add_resources. Zum Beispiel führt das Folgende zur Erzeugung von :/ibl/maps/environment.ktx:

qt6_add_lightprobe_images(application_target "ibl_assets"
    PREFIX
        "/ibl"
    BASE
        "../data/shared"
    FILES
        "../data/shared/maps/environment.hdr"
)

Wie bei qt6_add_shaders ist das OUTPUTS-Schlüsselwort verfügbar, um einen komplett eigenen Namen für die Datei im Ressourcensystem anzugeben. Das folgende Beispiel erzeugt ebenfalls :/ibl/maps/environment.ktx:

qt6_add_lightprobe_images(application_target "ibl_assets"
    PREFIX
        "/ibl"
    FILES
        "../data/shared/maps/environment.hdr"
    OUTPUTS
        "maps/environment.ktx"
)

Hinweis: Für jeden Eintrag in der FILES-Liste muss es einen entsprechenden Eintrag in OUTPUTS geben.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.