Qt Quick 3D - Baked Lightmap Beispiel
Demonstriert die Verwendung von gebackenen Lightmaps in einer 3D-Szene.
Dieses Beispiel demonstriert die Verwendung einer vollständig gebackenen Beleuchtung in einer Szene. Das Ergebnis ist, dass die gerenderte Szene viel realistischer aussieht, vor allem wegen der zusätzlichen indirekten Beleuchtung. Mithilfe eines Kontrollkästchens kann die Lichtabbildung auch deaktiviert werden, so dass die Rendering-Ergebnisse der Echtzeit- und der vollständig gebackenen Beleuchtung verglichen werden können.
Einrichten des Lichts
Die Szene hat ein einzelnes Punktlicht. Wenn das Kontrollkästchen aktiviert ist, wird die bakeMode des Lichts auf Light.BakeModeAll gesetzt.
PointLight { bakeMode: root.lightBakeMode y: 190 brightness: brightnessSlider.value castsShadow: true shadowFactor: 75 shadowBias: 20 }
Die Einstellung der Eigenschaft auf einen anderen Wert als Light.BakeModeDisabled dient einem doppelten Zweck: Zum Zeitpunkt des Backens der Lichtkarte zeigt es an, dass das Licht Teil der mit Lichtkarten versehenen Szene ist und zu ihr beiträgt. Zur Laufzeit, wenn die Szene normal gerendert wird, zeigt es an, dass das Licht ein vollständig oder teilweise gebackenes Licht ist, was dazu führt, dass bestimmte Echtzeitberechnungen in Materialien für Lightmapped-Modelle deaktiviert werden. Aus diesem Grund schaltet das Kontrollkästchen both
die Eigenschaft bakeMode des Lichts und auch die aktivierte Eigenschaft der BakedLightmap, die mit den Modellobjekten verbunden ist, um.
Einrichten des Modells
Die Cornell-Box ist ein Model mit 8 Submeshes. Es ist als Typ Box gekapselt, von dem eine Instanz in der Hauptszene instanziiert wird.
Box { usedInBakedLighting: true lightmapBaseResolution: 256 bakedLightmap: BakedLightmap { enabled: root.lmEnabled key: "box" loadPrefix: "file:" } scale: Qt.vector3d(100, 100, 100) }
Dieses Modell hat sowohl participates
in der Lightmap-Szene, als auch eine Lightmap baked for it
. Ersteres wird durch die Eigenschaft usedInBakedLighting angezeigt. Dies allein stellt nicht sicher, dass für unsere Box-Miniszene eine Lightmap erstellt wird, sondern nur, dass sie am Lightmapping teilnimmt (d. h. die Lichtstrahlen können bei der Berechnung der indirekten Beleuchtung vom Modell abprallen).
Um die Lightmap vollständig zu generieren und dann während des Baking-Prozesses zu speichern, wird auch ein BakedLightmap Objekt mit enabled auf true
gesetzt. Die key gibt einen eindeutigen Bezeichner an.
Für ein einfaches Deployment packt die Anwendung die generierten Lightmaps (.exr
Dateien) über das Qt-Ressourcensystem in die Execuatble. Die CMakeLists.txt listet qlm_box.exr
auf, die als Ressource hinzugefügt werden muss. Wenn die Lightmap neu erstellt wird, muss die Anwendung neu gebaut werden, damit die geänderte Datei übernommen wird. Um sicherzustellen, dass die Engine die Datei zur Laufzeit finden kann, wird die loadPrefix gesetzt.
© 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.