Verwendung bildbasierter Beleuchtung
Einführung
Qt Quick 3D unterstützt IBL (Image-Based Lighting) zur Beleuchtung von Szenen oder einzelnen Materialien.
IBL ist eine Beleuchtungstechnik, mit der Szenen mithilfe von 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 beliebige Bilddateien für IBL verwenden, es wird jedoch empfohlen, 360°-HDR-Bilder (High Dynamic Range) zu nutzen. HDR-Bilder verfügen über einen deutlich höheren Dynamikbereich als beispielsweise JPEG- oder PNG-Bilder. Ein höherer Dynamikbereich sorgt für realistischere Beleuchtung durch eine große Bandbreite an Helligkeitsstufen – von sehr hell bis sehr dunkel.
Das folgende Beispiel veranschaulicht den Beleuchtungseffekt auf ein Objekt bei Verwendung eines HDR-Bildes im Vergleich zu einer einzelnen gerichteten Lichtquelle:
| Licht | Glatte dielektrische Materialien | Raues dielektrisches Material | Glattes metallisches Material | Raues metallisches Material |
|---|---|---|---|---|
| Unidirektionales Licht |
|
|
|
|
| Bildbasiertes Licht |
|
|
|
|
Szenenbeleuchtung
Um eine „ scene “ mithilfe eines Bildes 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, ist IBL für Ihre Szene eingerichtet. Standardmäßig werden alle Modelle in der Szene von der Lichtprobe beleuchtet.
Hinweis: Sie können IBL auch mit jeder anderen Lichtquelle kombinieren, um den Beleuchtungseffekt auf einem Objekt zu ergänzen.
Nachdem Sie IBL nun für Ihre Szene eingerichtet haben, werfen wir einen Blick auf die verschiedenen Eigenschaften der Probe. 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 Lichtmenge, die von der Lichtprobe abgegeben wird.
- Horizon Cut-Off Durch Erhöhen des Werts wird die untere Hälfte der Umgebung dunkler (schwarz), wodurch die Beleuchtung überwiegend von der Oberseite des Bildes kommt (und bestimmte Reflexionen aus der unteren Hälfte entfernt werden).
- Orientation Diese Eigenschaft definiert die Ausrichtung der Licht-Sonde. Die Ausrichtung wird anhand von Euler-Winkeln in Grad um die x-, y- und z-Achse angegeben.
| Eigenschaft | Metallisches Material | Dielektrisches Material |
|---|---|---|
| Standardeinstellungen |
|
|
| Belichtung |
|
|
| Horizont-Abschneidepunkt |
|
|
| Ausrichtung |
|
|
Materialbeleuchtung
Um die bildbasierte Beleuchtung nur auf ein Material statt auf die gesamte Szene anzuwenden oder eine separate Lichtprobe für ein Modell zu verwenden, das bereits durch bildbasierte Beleuchtung beleuchtet wird, legen Sie das Bild als „ light probe “ für das Material fest.
Sobald Sie die oben genannten Schritte ausgeführt haben, verfügen Sie über eine separate Lichtprobe für das Material. Diese Lichtprobe hat Vorrang vor der Szenenlichtprobe, sofern eine solche festgelegt ist.
Vorabgenerierung der IBL-Cubemap
Bei Verwendung von IBL muss von der Anwendung eine Cubemap für das IBL-Bild generiert werden. Standardmäßig geschieht dies beim Start der Anwendung und kann insbesondere auf eingebetteten und mobilen Geräten recht langsam sein. Es ist daher möglich, diese Cubemap mit Balsam vorab zu generieren. Führen Sie Balsam einfach mit der .hdr-Datei als Eingabe aus, und es wird eine Cubemap-Datei mit demselben Namen wie die Eingabedatei, jedoch mit der Dateiendung „.ktx“, ausgegeben. Diese Datei kann dann in der zugeordneten „ Texture “-Eigenschaft der „lightProbe“-Eigenschaft referenziert werden, und Qt lädt die vorab generierte Cubemap dann ohne aufwendige Verarbeitung zur Laufzeit.
Manuelles Baking
Nehmen wir als Beispiel an, die Anwendung verwendet ein .hdr-Bild für ihre Light Probes oder die Skybox:
View3D {
environment: SceneEnvironment {
backgroundMode: SceneEnvironment.SkyBox
lightProbe: Texture {
source: "environment.hdr"
}
probeOrientation: Qt.vector3d(0, -90, 0)
}
// ...
}Dies funktioniert einwandfrei, vorausgesetzt, „environment.hdr“ ist zur Laufzeit verfügbar. Das Laden des .hdr-Bildes ist jedoch mit aufwendiger Vorverarbeitung verbunden. Dies lässt sich vermeiden, indem man Folgendes ausführt:
balsam environment.hdrDas Ergebnis ist eine neue Datei „ environment.ktx “. Wird diese anstelle der .hdr-Datei ausgeliefert und die Texturquelle entsprechend geändert, führt dies zu deutlich schnelleren Ladezeiten.
lightProbe: Texture {
source: "environment.ktx"
}Baking während der Build-Phase über CMake
Das manuelle Ausführen von „balsam“ auf Assets ist nicht immer ideal. Daher wird empfohlen, dass Anwendungen auf CMake zurückgreifen, um dieselbe Aufgabe automatisch während der Anwendungserstellung durchzuführen.
Dies geschieht mithilfe der CMake-Funktion ` qt_add_lightprobe_images() `, die von der Quick3D-Komponente des Qt6-Pakets bereitgestellt wird:
...
find_package(Qt6 COMPONENTS Quick3D)
...
qt_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
FILES
"environment.hdr"
)Ersetzen Sie „ application_target “ durch das entsprechende Ziel. Hier ist es nicht mehr erforderlich, „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“-Datei wird den Anwendungsressourcen unter „ :/ibl/environment.ktx “ hinzugefügt. Die „ Texture “-Datei der LightProbe muss dann auf diese Datei verweisen.
lightProbe: Texture {
source: "qrc:/ibl/environment.ktx"
}Hinweis: Wenn PREFIX sogesetzt wird , dass der endgültige Name im Ressourcensystem einen Pfad aufweist, der mit dem Speicherort der .qml-Datei übereinstimmt, kann ein relativer Quellpfad verwendet werden, anstatt einen absoluten Pfad im qrc-Schema angeben zu müssen.
Neben PREFIX steht auch das Schlüsselwort BASE zur Verfügung. Das Verhalten entspricht dem von qt_add_resources(). Beispielsweise führt der folgende Code zur Generierung von :/ibl/maps/environment.ktx:
qt_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
BASE
"../data/shared"
FILES
"../data/shared/maps/environment.hdr"
)Wie bei `qt_add_shaders()` steht das Schlüsselwort `OUTPUTS` zur Verfügung, um einen vollständig benutzerdefinierten Namen für die Datei im Ressourcensystem festzulegen. Beispielsweise erzeugt auch der folgende Code ` :/ibl/maps/environment.ktx`:
qt_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 Liste „FILES“ muss ein entsprechender Eintrag in „OUTPUTS“ vorhanden sein.
© 2026 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.













