En esta página

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:

LuzMaterial dieléctrico lisoMaterial dieléctrico rugosoMaterial metálico lisoMaterial metálico rugoso
Luz unidireccional

Esfera lisa con luz unidireccional

Esfera rugosa con luz unidireccional

Esfera lisa metálica con luz unidireccional

Esfera metálica rugosa con luz unidireccional

Luz basada en imágenes

Esfera lisa con iluminación ambiental basada en imágenes

Esfera rugosa con iluminación ambiental basada en imágenes

Esfera lisa metálica con iluminación ambiental basada en imágenes

Esfera rugosa metálica con iluminación ambiental 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.
PropiedadMaterial metálicoMaterial dieléctrico
Configuración por defecto

Esfera lisa metálica con iluminación ambiental basada en imágenes

Esfera lisa con iluminación ambiental basada en imágenes

Exposición

Esfera metálica lisa que muestra el ajuste de exposición de la sonda luminosa

Esfera lisa que muestra el ajuste de la exposición de la sonda luminosa

Horizonte Corte

Esfera metálica lisa que muestra el ajuste del horizonte de la sonda de luz

Esfera lisa que muestra el ajuste del horizonte de la sonda de luz

Orientación

Esfera lisa metálica que muestra la orientación de la sonda luminosa

Esfera lisa que muestra la orientación de la sonda luminosa

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.