本页内容

多视图渲染

多视图渲染是指将绘制调用实例化到2D纹理数组的各个层中。在Qt中,这尤其适用于使用Qt Quick 3D Xr构建的VR/AR应用程序。 多视图渲染无需分别对左眼和右眼的内容独立进行场景遍历、渲染准备和渲染通道记录,而是允许仅执行一次,并将单次渲染通道中的绘制调用实例化到纹理数组的第 0 层和第 1 层中。 顶点着色器使用一个指示视图索引的特殊变量,并据此计算每个视图的值。 包含视图相关数据(如摄像机矩阵)的统一变量必须同时为两个视图提供。多视图渲染有望减轻渲染器对系统的负担,从而可能带来更好的性能。但其代价是渲染器和着色器必须能够识别视图相关数据,并适当地处理纹理数组。

低级概述

Qt 应用程序开发人员并不一定需要完全理解多视图渲染在 Qt 渲染堆栈底层是如何实现的。以下链接供希望深入了解底层细节的开发人员参考。

3D API 中的多视图支持

只有当底层 3D API 在运行时支持多视图渲染时,该功能才可用。有关详细信息,请参阅相应的规范和文档:

Qt 渲染硬件接口 (RHI) 中的多视图支持

在 Qt 中,3D 图形 API 由 `QRhi ` 类进行抽象。Qt Quick 和Qt Quick 3D 均利用该基础设施实现其所有加速渲染。有关多视图渲染支持的更多低级信息,请参阅以下内容:

Qt Quick 中的多视图支持 - Quick 3D - Quick 3D XR 堆栈

xml-ph-0000@deepl.internal中的多视图支持Qt Quick

Qt Quick 支持多视图,但自身从未使用多视图渲染。 当将2D元素嵌入到3D场景中并与Qt Quick 3D 结合使用时,支持多视图渲染就变得非常重要。为了在将3D场景输出到多视图渲染目标时正确渲染2D内容,2D渲染器及其材质(着色器)必须做好多视图支持的准备。

在许多情况下,基于 Qt 的应用程序开发人员无需考虑这一点,因为Qt Quick 的内置材质(例如Rectangle 、Image 或Text 等项目所基于的材质)均与多视图兼容。

然而,在开发自定义材质(QSGMaterial 、QSGMaterialShader )或为ShaderEffect 编写着色器时,若计划在Qt Quick 3D Xr 应用程序的 VR/AR 场景中使用该 2D 内容,则自定义内容必须支持多视图。有关详细信息,请参阅QSGMaterial::viewCount()。

Qt 的着色器条件处理管道支持编写支持多视图的着色器。详情请参阅《QSB 手册》中的“多视图”章节以及qt_add_shaders()函数。

在Qt Quick 3D

Qt Quick 3D 不使用Qt Quick 3D Xr的应用程序(即非VR/AR应用程序)中的多视图支持,目前尚无法使用多视图渲染。 不过,由于Qt Quick 3D Xr基于相同的基础架构构建,因此3D渲染器完全支持多视图。所有标准的内置功能(如Model 或PrincipledMaterial )均与多视图完全兼容。某些已弃用的功能(如旧版独立效果模块)可能不支持多视图渲染。

当自定义着色器片段涉及CustomMaterial 或Effect 时,应用程序提供的着色器代码在编写时需考虑多视图支持,以便在启用了多视图渲染的Qt Quick 3D Xr 应用程序中正常运行。有关如何实现这一点,请参阅这些类型的文档。 对此尤为重要的特殊关键字包括:VIEW_INDEX 、INPUT 、SCREEN_TEXTURE 、DEPTH_TEXTURE 、AO_TEXTURE 。

例如,以下后处理效果支持多视图,因为它已为INPUT 是sampler2DArray 而非sampler2D 的情况做好了准备:

void MAIN()
{
    vec4 c = texture(someTexture, TEXTURE_UV);
    // ...
#if QSHADER_VIEW_COUNT >= 2
    FRAGCOLOR = c * texture(INPUT, vec3(INPUT_UV, VIEW_INDEX));
#else
    FRAGCOLOR = c * texture(INPUT, INPUT_UV);
#endif
}

Qt Quick 3D Xr 中的多视图支持

只要底层图形 API 支持,多视图渲染默认处于启用状态。此设计旨在确保最佳性能。若要查询是否支持多视图渲染,请检查multiViewRenderingSupported 属性。

出于开发和测试目的,禁用多视图渲染可能会很有帮助。可通过将环境变量QT_QUICK3D_XR_DISABLE_MULTIVIEW 设置为非零值来实现。

若要查询多视图渲染是否已启用,请使用multiViewRenderingEnabled 属性。如果无法启用多视图渲染,该值将始终为 false。

通常建议,在支持多视图渲染的情况下,VR/AR 应用程序应保持其启用状态,仅在遇到问题或出于测试目的时才将其禁用。多视图渲染有望提升性能,降低 GPU 负载,尤其是 CPU 负载。

© 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.