Qt Quick 3D - 预渲染光照贴图示例

展示如何在 3D 场景中使用预渲染光照贴图。

本示例演示在场景中如何使用完全预渲染的光照。因此,渲染的场景看起来更加逼真,主要是因为增加了间接光照。通过复选框,它还允许禁用光照贴图,从而可以比较实时和完全预渲染方法的渲染结果。

设置灯光

场景中有一个点光源。当复选框被勾选时,灯光的 bakeMode 设置为 Light.BakeModeAll。

PointLight {
    bakeMode: root.lightBakeMode
    y: 190
    brightness: brightnessSlider.value
    castsShadow: true
    shadowFactor: 75
}

将属性设置为除 Light.BakeModeDisabled 之外的其他值有两个用途:在光照贴图烘焙时间,它表示该光照是光照贴图场景的一部分,为其做出贡献。在运行时,当正常渲染场景时,它表示该光照是完全或部分预渲染的光照,这将导致禁用某些光照贴图模型的材质中的实时计算。这就是为什么复选框切换了 两个 灯光上的 bakeMode 属性和也与 Model 对象关联的 BakedLightmap 的启用属性。

设置模型

Cornell box 是一个具有 8 个子网格的模型。这被封装为 Box 类型,主场景中实例化了该类的一个实例。

Box {
    usedInBakedLighting: true
    lightmapBaseResolution: 256
    bakedLightmap: BakedLightmap {
        enabled: root.lmEnabled
        key: "box"
        loadPrefix: "file:"
    }
    scale: Qt.vector3d(100, 100, 100)
}

该模型既 参与 光照贴图场景,又为它 烘焙 光照贴图。前者由 usedInBakedLighting 属性表示。仅此并不能保证我们的盒子小场景得到一个预渲染的光照贴图,只能保证它参与了光照贴图(即,当计算间接光照时,光线可以反弹到模型上)。

为了在整个预渲染过程中完全生成光照贴图并存储,设置了一个带有 enabled 设置为 trueBakedLightmap 对象。该 key 指定了一个唯一标识符。

对于简单部署,应用通过 Qt 资源系统将生成的光照贴图(.exr 文件)打包到可执行文件中。CMakeLists.txt 列出 qlm_box.exr 作为资源。在重新烘焙光照贴图时,需要重新构建应用以便检索更改的文件。为了确保引擎在运行时可以找到该文件,设置了 loadPrefix

文件

© 2024 The Qt公司有限公司。本页包含的文档贡献归各自所有者所有。提供的文档受自由软件基金会发布的GNU自由文档许可版本1.3条款约束。Qt及其相关标志是芬兰和其他国家/地区的The Qt公司有限公司的商标。所有其他商标均为各自所有者的财产。