大数跨境

博客 | Qt Quick 3D 中的光照贴图烘焙及其他改进

博客 | Qt Quick 3D 中的光照贴图烘焙及其他改进 Qt软件
2026-05-14
1
导读:本文主要聚焦于Qt 6.10中新增的光照贴图烘焙优化,同时也会介绍即将发布的Qt 6.11版本中的两项新特性:屏幕空间全局光照(SSGI)和屏幕空间反射(SSR)。




在这篇博客中,我们将探讨近期围绕光照贴图烘焙、全局光照及相关技术所做的改进,这些技术旨在使Qt Quick 3D场景呈现更逼真的视觉效果。本文主要聚焦于Qt 6.10中新增的光照贴图烘焙优化,同时也会介绍即将发布的Qt 6.11版本中的两项新特性:屏幕空间全局光照(SSGI)和屏幕空间反射(SSR)。


光照贴图烘焙改进

随着Qt 6.10的发布,Qt Quick 3D模块在光照贴图烘焙方面实现重大改进。如果您正在使用QML构建实时3D场景,并希望以更低的运行成本获得更丰富的光照效果,这就是理想选择。在本节中,您会了解什么是光照贴图烘焙、新增特性及其重要意义。


什么是光照贴图烘焙?

光照烘焙是3D渲染中的一种技术,用于预先计算场景中光线和静态物体的交互效果。


与实时计算的光照、阴影和间接光不同,光照信息会在离线处理的过程中被“烘焙”到特殊的纹理贴图中,即光照贴图。在运行时,渲染器会对这些纹理进行采样,从而以较低的计算成本为您提供逼真的全局照明、柔和阴影和环境光反射效果。这样不仅能让场景视觉表现更丰富,还能显著提升性能,特别是在GPU资源有限的移动设备和嵌入式设备上。


从Qt 6.4版本起,该框架已初步支持光照贴图烘焙特性。本文将重点讨论6.10中的改进,如需深入了解烘焙的工作原理以及如何在应用程序中实现烘焙,建议您阅读官方Qt文档


下图显示了一个使用烘焙光照的QtQuick3D场景。



全局光照的新特性

Qt 6.10对光照贴图烘焙进行了多项改进,尤其在烘焙操作的易用性和场景设置方面。本文集中讨论其中最重要的几项,并逐一介绍。


基于NLM的内置去噪器


6.10版本中的Qt Quick 3D包含一个内置非局部均值(NLM)去噪器,可在光照贴图烘焙后自动运行。NLM算法通过平均整个图像中的相似区域来减少烘焙光照中的噪点,从而消除光线跟踪过程中的随机噪点。您可以使用新增的Lightmapper::denoiseSigma属性来控制其强度:较低的值会保留更多纹理细节,但会留下更多颗粒感;较高的值会产生更平滑、更干净的效果,但会牺牲一些锐度。这意味着您不再需要手动对光照贴图进行后期处理,因为Qt Quick 3D会将去噪处理作为烘焙步骤的一部分。



上图显示了使用有噪点的光照贴图(左)和经过降噪的光照贴图(右)的Cornell box场景。


基于每单位像素数的光照贴图


Qt 6.10版本的Qt Quick 3D引入了一种指定生成光照贴图分辨率的新方法。不必为每个模型指定固定的尺寸,而是定义世界空间中单位表面的光照贴图像素的大致数量。这被称为每单位像素数(TPU)。


TPU在Lightmapper::texelsPerUnitModel::texelsPerUnit属性中设置。这意味着,一个100x100的矩形,如果每单位像素值为1,则大约为100x100的像素。这种方法的好处是,在同一场景中添加多个模型时,保持光照贴图尺寸一致以及增减光照贴图尺寸都很容易。请注意,如下图所示,直接阴影的清晰度取决于光照贴图的分辨率。



上图显示的是同一个场景,但每单位像素值不同。左边场景的每单位像素值是右边场景的五倍。


进度跟踪改进


通过DebugView QML组件启动光照贴图烘焙时,会弹出一个窗口。我们对该窗口进行了改进,可显示进度条和烘焙剩余时间的估计值。用户还可以在烘焙过程中继续与主程序交互。



上图显示了烘焙灯光照贴图时的进度窗口。


光照贴图查看器


Qt 6.10中的一个显著变化是,新增了Lightmapper::source属性,该属性可以指定一个包含场景中所有光照贴图的文件。在旧版本中,光照贴图烘焙中使用的每个模型都会生成一个网格文件和一个光照贴图纹理文件。现在,所有数据都存储在使用Qt Quick 3D独有的自定义格式文件中。这不仅简化了工作流程,还能轻松检查该文件。为此,我们创建了一个光照贴图查看器应用程序,使用该程序,您可以检查生成的光照贴图及其对应的模型。



上图显示了光照图查看器和加载的光照图文件。


屏幕空间全局照明

接下来我们将探讨Qt Quick 3D新增的一种技术,作为烘焙光照贴图的替代方案:SSGI(屏幕空间全局照明)是一种实时渲染技术,仅利用屏幕深度缓冲区和颜色缓冲区中的数据即可模拟逼真的间接光照(即光线在表面上的反射)。由于这是一种动态的后处理效果,它不依赖于预制的光照贴图,并能实时响应场景中的动态变化。


在Qt 6.11及更高版本中,可通过将ExtendedSceneEnvironment::ssgiEnabled设置为true来启用SSGI。ExtendedSceneEnvironment中还有其他属性可用于调整SSGI的外观。



上图展示了禁用SSGI(左)和启用SSGI(右)的效果对比。请注意当启用SSGI时,猴头雕像和窗帘被地板上的反射光照亮。


屏幕空间反射

屏幕空间反射(SSR)是另一种与SSGI相似的实时渲染技术。与SSGI类似,它只使用屏幕深度缓冲区和颜色缓冲区中的可用数据,用于渲染反射效果。其工作原理是通过名为"光线追踪"的技术,检查屏幕中的每个像素点,寻找并混合对应的反射屏幕像素点。


在Qt 6.11及更高版本中,可通过将ExtendedSceneEnvironment::ssrEnabled设置为true来启用SSR。



上图展示了禁用SSR(左)和启用SSR(右)的效果对比。


结束语

如果您已经在使用Qt Quick 3D中的光照贴图烘焙功能,我希望Qt 6.10能让您看到视觉效果和性能方面的双重提升。如果您还没有尝试过,那么现在正是尝试的最佳时机。您可以从烘焙光照贴图示例文档开始。


要试用SSGI和SSR,您可以查阅ExtendedSceneEnvironmentQML类型。


希望您喜欢这篇文章,期待看到您使用Qt创造的精彩作品!


END


往期推荐

演讲视频丨解锁Qt Quick 3D XR:打造身临其境的AR/VR体验 - 汽车电子软件的基石-Qt全球峰会 2025中国站

博客 | Qt Quick for Android - Qt 6.9和6.10

博客丨Qt 6.10正式发布


【声明】内容源于网络
0
0
Qt软件
Qt Group是一家全球软件公司,致力于开发用户喜爱的应用程序和智能设备,深受行业领导者和全球超过 150 万开发人员的信赖。我们帮助客户在整个产品开发生命周期中提高生产力——从 UI 设计和软件开发到质量管理和部署。网址:qt.io
内容 564
粉丝 0
Qt软件 Qt Group是一家全球软件公司,致力于开发用户喜爱的应用程序和智能设备,深受行业领导者和全球超过 150 万开发人员的信赖。我们帮助客户在整个产品开发生命周期中提高生产力——从 UI 设计和软件开发到质量管理和部署。网址:qt.io
总阅读4.0k
粉丝0
内容564