Iluminación basada en imágenes
Introducción
Qt Quick 3D admite IBL (Iluminación basada en imágenes) para iluminar escenas o materiales individuales.
IBL es una técnica de iluminación que permite iluminar escenas con imágenes. Resulta especialmente útil cuando se desea crear una iluminación y unos reflejos realistas en escenas de interior y exterior.
Puedes utilizar cualquier archivo de imagen para IBL, pero se recomienda utilizar imágenes HDR (Alto Rango Dinámico) de 360º. Las imágenes HDR tienen un rango dinámico mucho mayor que, por ejemplo, las imágenes JPEG o PNG. Un mayor rango dinámico proporciona una iluminación más realista a través de una gran gama de niveles de luminancia desde muy brillante a muy oscuro.
El siguiente ejemplo muestra el efecto de iluminación sobre un objeto utilizando una imagen HDR frente a una luz direccional única:
| Luz | Material dieléctrico liso | Material dieléctrico rugoso | Material metálico liso | Material metálico rugoso |
|---|---|---|---|---|
| Luz unidireccional |
|
|
|
|
| Luz basada en imágenes |
|
|
|
|
Iluminación de escenas
Para iluminar un scene utilizando una imagen, deberá añadir la imagen como Texture a la propiedad lightProbe.
lightProbe: Texture {
source: "maps/OpenfootageNET_garage-1024.hdr"
}Una vez que hayas seleccionado una imagen, se configura la IBL para tu escena. Todos los modelos en la escena son iluminados por la sonda de luz por defecto.
Nota: También puedes combinar IBL con cualquier otra fuente de luz para complementar el efecto de iluminación en un objeto.
Ahora que ya tienes el IBL configurado para tu escena, echemos un vistazo a las diferentes propiedades de la sonda. En muchos casos los valores por defecto proporcionan un resultado satisfactorio, pero puedes ajustar los valores de las siguientes propiedades dependiendo de la imagen y del resultado deseado:
- Exposure La cantidad de luz emitida por la sonda de luz.
- Horizon Cut-Off Aumentar el valor añade oscuridad (negro) a la mitad inferior del entorno, forzando a que la iluminación provenga predominantemente de la parte superior de la imagen (y eliminando reflejos específicos de la mitad inferior).
- Orientation Esta propiedad define la orientación de la sonda de luz. La orientación se define en términos de ángulos de Euler en grados sobre los ejes x, y, y z.
| Propiedad | Material metálico | Material dieléctrico |
|---|---|---|
| Configuración por defecto |
|
|
| Exposición |
|
|
| Horizonte Corte |
|
|
| Orientación |
|
|
Iluminación del material
Para utilizar la iluminación basada en imágenes sólo en un material en lugar de en toda la escena, o utilizar una sonda de luz independiente para un modelo ya iluminado con iluminación basada en imágenes, configure la imagen como light probe para el material.
Una vez que haya seguido los pasos anteriores, tendrá una sonda de luz independiente para el material. Esta sonda de luz anula la sonda de luz de la escena si hay una especificada.
Generación previa del cubemap IBL
Cuando se utiliza IBL, la aplicación debe generar un cubemap para la imagen IBL. Por defecto, esto ocurre durante el inicio de la aplicación y puede ser bastante lento, especialmente en dispositivos móviles e integrados. Por lo tanto, es posible pregenerar este cubemap utilizando Balsam. Simplemente ejecute Balsam con el archivo .hdr como entrada y obtendrá un archivo cubemap con el mismo nombre que la entrada pero con una extensión de archivo ktx. A continuación, se puede hacer referencia a este archivo en la propiedad lightProbe asociada Texture, y Qt cargará el cubemap pregenerado sin ningún procesamiento costoso en tiempo de ejecución.
Horneado manual
Como ejemplo, supongamos que la aplicación utiliza una imagen .hdr para sus sondas de luz o el skybox:
View3D {
environment: SceneEnvironment {
backgroundMode: SceneEnvironment.SkyBox
lightProbe: Texture {
source: "environment.hdr"
}
probeOrientation: Qt.vector3d(0, -90, 0)
}
// ...
}Esto es completamente funcional, asumiendo que environment.hdr está disponible en tiempo de ejecución. Sin embargo, cargar la imagen .hdr implica un costoso preprocesamiento. Esto puede evitarse ejecutando:
balsam environment.hdr
El resultado es un nuevo archivo environment.ktx. Enviar esto en lugar del archivo .hdr y cambiar la fuente Texture proporciona tiempos de carga significativamente más rápidos.
lightProbe: Texture {
source: "environment.ktx"
}Tiempo de compilación mediante CMake
Ejecutar balsam manualmente en los assets no siempre es lo ideal. Por lo tanto, se recomienda que las aplicaciones se basen en CMake para realizar automáticamente la misma tarea en tiempo de compilación de la aplicación.
Para ello se utiliza la función qt6_add_lightprobe_images de CMake proporcionada por el componente Quick3D del paquete Qt6:
...
find_package(Qt6 COMPONENTS Quick3D)
...
qt6_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
FILES
"environment.hdr"
)Reemplace application_target con el objetivo apropiado. Aquí, ya no hay necesidad de ejecutar balsam manualmente en environment.hdr, y el archivo .hdr no necesita ser enviado con la aplicación. Más bien, durante la compilación balsam será invocado automáticamente, y un environment.ktx será agregado a los recursos de la aplicación en :/ibl/environment.ktx. La lightProbe's Texture necesita hacer referencia a este archivo.
lightProbe: Texture {
source: "qrc:/ibl/environment.ktx"
}Nota: Establecer PREFIX para que el nombre final en el sistema de recursos tenga una ruta que coincida con la ubicación del archivo .qml permite utilizar una ruta de origen relativa en lugar de tener que proporcionar una ruta absoluta con el esquema qrc.
Además de PREFIX, también está disponible la palabra clave BASE. El comportamiento sigue el de qt6_add_resources. Por ejemplo, lo siguiente lleva a generar :/ibl/maps/environment.ktx:
qt6_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
BASE
"../data/shared"
FILES
"../data/shared/maps/environment.hdr"
)Como en qt6_add_shaders, la palabra clave OUTPUTS está disponible para permitir especificar un nombre completamente personalizado para el archivo en el sistema de recursos. Por ejemplo, lo siguiente también genera :/ibl/maps/environment.ktx:
qt6_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
FILES
"../data/shared/maps/environment.hdr"
OUTPUTS
"maps/environment.ktx"
)Nota: Para cada entrada en la lista FILES, debe haber una entrada correspondiente en 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.













