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 设置为 true
的 BakedLightmap 对象。该 key 指定了一个唯一标识符。
对于简单部署,应用通过 Qt 资源系统将生成的光照贴图(.exr
文件)打包到可执行文件中。CMakeLists.txt 列出 qlm_box.exr
作为资源。在重新烘焙光照贴图时,需要重新构建应用以便检索更改的文件。为了确保引擎在运行时可以找到该文件,设置了 loadPrefix。
文件
© 2024 The Qt公司有限公司。本页包含的文档贡献归各自所有者所有。提供的文档受自由软件基金会发布的GNU自由文档许可版本1.3条款约束。Qt及其相关标志是芬兰和其他国家/地区的The Qt公司有限公司的商标。所有其他商标均为各自所有者的财产。