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.

Beispielprojekt @ code.qt.io

© 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.