Utilisation de l'éclairage basé sur des images
Introduction
Qt Quick 3D prend en charge l'IBL (éclairage basé sur l'image) pour éclairer des scènes ou des matériaux individuels.
L'IBL est une technique d'éclairage qui permet d'éclairer des scènes à l'aide d'images. Elle est particulièrement utile lorsque vous souhaitez créer un éclairage et des reflets réalistes dans des scènes d'intérieur et d'extérieur.
Vous pouvez utiliser n’importe quel fichier image pour l’IBL, mais il est recommandé d’utiliser des images HDR (High Dynamic Range) à 360°. Les images HDR possèdent une plage dynamique bien plus étendue que, par exemple, les images JPEG ou PNG. Une plage dynamique plus étendue permet d’obtenir un éclairage plus réaliste grâce à une large gamme de niveaux de luminance, allant du très clair au très sombre.
L’exemple suivant illustre l’effet d’éclairage sur un objet à l’aide d’une image HDR par rapport à une simple lumière directionnelle :
| Lumière | Matériau diélectrique lisse | Matériau diélectrique rugueux | Matériau métallique lisse | Matériau métallique rugueux |
|---|---|---|---|---|
| Lumière unidirectionnelle |
|
|
|
|
| Lumière basée sur l'image |
|
|
|
|
Éclairage de la scène
Pour éclairer une « scene » à l’aide d’une image, vous devez ajouter cette image en tant qu’ Texture e à la propriété « lightProbe ».
lightProbe: Texture {
source: "maps/OpenfootageNET_garage-1024.hdr"
}Une fois l'image sélectionnée, l'IBL est configuré pour votre scène. Par défaut, tous les modèles de la scène sont éclairés par la sonde de lumière.
Remarque : vous pouvez également combiner l’IBL avec n’importe quelle autre source de lumière pour compléter l’effet d’éclairage sur un objet.
Maintenant que l’IBL est configuré pour votre scène, examinons les différentes propriétés de la sonde. Dans de nombreux cas, les valeurs par défaut donnent un résultat satisfaisant, mais vous pouvez ajuster les valeurs des propriétés suivantes en fonction de l’image et du résultat souhaité :
- Exposure La quantité de lumière émise par la sonde lumineuse.
- Horizon Cut-Off Augmenter cette valeur assombrit (noircit) la moitié inférieure de l’environnement, ce qui force l’éclairage à provenir principalement du haut de l’image (et supprime certains reflets de la moitié inférieure).
- Orientation Cette propriété définit l’orientation de la sonde lumineuse. L’orientation est définie en termes d’angles d’Euler, exprimés en degrés, par rapport aux axes x, y et z.
| Propriété | Matériau métallique | Matériau diélectrique |
|---|---|---|
| Paramètres par défaut |
|
|
| Exposition |
|
|
| Coupe à l'horizon |
|
|
| Orientation |
|
|
Éclairage du matériau
Pour utiliser l'éclairage basé sur une image uniquement sur un matériau plutôt que sur l'ensemble de la scène, ou pour utiliser une sonde d'éclairage distincte pour un modèle déjà éclairé par un éclairage basé sur une image, définissez l'image comme « light probe » (image de référence) pour le matériau.
Une fois que vous avez suivi les étapes ci-dessus, vous disposez d'une sonde d'éclairage distincte définie pour le matériau. Cette sonde d'éclairage remplace la sonde d'éclairage de la scène s'il y en a une de spécifiée.
Pré-génération de la carte cubique IBL
Lorsque l’IBL est utilisé, une carte cubique pour l’image IBL doit être générée par l’application. Par défaut, cette opération s’effectue au démarrage de l’application et peut s’avérer assez lente, en particulier sur les appareils embarqués et mobiles. Il est donc possible de pré-générer cette carte cubique à l’aide de Balsam. Il suffit de lancer Balsam en lui fournissant le fichier .hdr en entrée ; il produira alors un fichier de cubemap portant le même nom que le fichier d’entrée, mais avec l’extension .ktx. Il est ensuite possible de référencer ce fichier dans l’ Texture, associé à la propriété lightProbe, et Qt chargera alors le cubemap pré-généré sans aucun traitement coûteux lors de l’exécution.
Cuisson manuelle
À titre d’exemple, supposons que l’application utilise une image .hdr pour ses light probes ou sa skybox :
View3D {
environment: SceneEnvironment {
backgroundMode: SceneEnvironment.SkyBox
lightProbe: Texture {
source: "environment.hdr"
}
probeOrientation: Qt.vector3d(0, -90, 0)
}
// ...
}Cette solution est parfaitement fonctionnelle, à condition que le fichier environment.hdr soit disponible au moment de l’exécution. Cependant, le chargement de l’image .hdr implique un prétraitement coûteux. Il est possible d’éviter cela en exécutant :
balsam environment.hdrLe résultat est un nouveau fichier environment.ktx. Distribuer ce fichier à la place du fichier .hdr et modifier la source de texture permet d’accélérer considérablement les temps de chargement.
lightProbe: Texture {
source: "environment.ktx"
}Cuisson lors de la compilation via CMake
L'exécution manuelle de balsam sur les ressources n'est pas toujours idéale. Il est donc recommandé aux applications de s'appuyer sur CMake pour effectuer automatiquement cette même tâche lors de la compilation de l'application.
Pour ce faire, on utilise la fonction CMake `qt_add_lightprobe_images()` fournie par le composant Quick3D du package Qt6 :
...
find_package(Qt6 COMPONENTS Quick3D)
...
qt_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
FILES
"environment.hdr"
)Remplacez « application_target » par la cible appropriée. Ici, il n’est plus nécessaire d’exécuter manuellement balsam sur environment.hdr, et le fichier .hdr n’a pas besoin d’être fourni avec l’application. Au contraire, lors de la compilation, balsam sera appelé automatiquement, et un fichier environment.ktx sera ajouté aux ressources de l’application à l’emplacement :/ibl/environment.ktx. L’ Texture de lightProbe doit alors faire référence à ce fichier.
lightProbe: Texture {
source: "qrc:/ibl/environment.ktx"
}Remarque : définir PREFIX de manière à ce que le nom final dans le système de ressources ait un chemin correspondant à l’emplacement du fichier .qml permet d’utiliser un chemin source relatif au lieu de devoir fournir un chemin absolu avec le schéma qrc.
Outre PREFIX, le mot-clé BASE est également disponible. Son comportement est identique à celui de qt_add_resources(). Par exemple, le code suivant génère :/ibl/maps/environment.ktx:
qt_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
BASE
"../data/shared"
FILES
"../data/shared/maps/environment.hdr"
)Comme dans `qt_add_shaders()`, le mot-clé `OUTPUTS` permet de spécifier un nom entièrement personnalisé pour le fichier dans le système de ressources. Par exemple, le code suivant génère également ` :/ibl/maps/environment.ktx` :
qt_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
FILES
"../data/shared/maps/environment.hdr"
OUTPUTS
"maps/environment.ktx"
)Remarque : pour chaque entrée de la liste FILES, il doit y avoir une entrée correspondante dans OUTPUTS.
© 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.













