Renderizado Multivista
El renderizado multivista se refiere a la instanciación de llamadas a dibujo en capas de un array de texturas 2D. En Qt, es relevante, en particular para aplicaciones VR/AR construidas con Qt Quick 3D Xr. En lugar de hacer de forma independiente el recorrido de la escena, las preparaciones de renderizado, y la grabación del pase de renderizado para el contenido de los ojos izquierdo y derecho, el renderizado multivista permite hacerlo una vez, con las llamadas de dibujo en el único pase de renderizado siendo instanciadas en las capas 0 y 1 de un array de texturas. El sombreador de vértices utiliza una variable especial que indica el índice de vista y calcula los valores por vista basándose en ella. Los uniformes que contienen datos dependientes de la vista, como las matrices de cámara, deben proporcionarse para ambos ojos. Se espera que el renderizado multivista reduzca la carga del renderizador sobre el sistema, lo que podría mejorar el rendimiento. Esto se consigue a expensas de tener que hacer que el renderizador y los sombreadores sean conscientes de que trabajan con datos dependientes de la vista y con matrices de texturas según corresponda.
Visión general de bajo nivel
Los desarrolladores de aplicaciones Qt no necesitan necesariamente una comprensión completa de cómo se habilita el renderizado multivista en los niveles inferiores de la pila de renderizado Qt. Los siguientes enlaces se proporcionan a los desarrolladores que deseen profundizar en los detalles bajo el capó.
Soporte multivista en las API 3D
El renderizado multivista sólo está disponible cuando la API 3D subyacente lo admite en tiempo de ejecución. Para más información, consulte las especificaciones y la documentación correspondientes:
- OpenGL: OVR_multiview1 y OVR_multiview2
- Vulkan: VK_KHR_multiview
- Direct 3D 12: ViewInstancing
- Metal: rendering_to_multiple_texture_slices
Soporte multivista en la interfaz de hardware de renderizado (RHI) de Qt
En Qt, las APIs de gráficos 3D están abstraídas por la clase QRhi. Qt Quick y Qt Quick 3D utilizan esta infraestructura para todo su renderizado acelerado. Véase lo siguiente para más información de bajo nivel sobre el soporte de renderizado multivista:
Soporte multivista en la pila Qt Quick - Quick 3D - Quick 3D XR
El soporte multivista en Qt Quick
Qt Quick es consciente de la multivista, pero nunca utiliza el renderizado multivista por sí mismo. El soporte de renderizado multivista se vuelve importante en combinación con Qt Quick 3D cuando se incrustan elementos 2D en la escena 3D. Para renderizar correctamente el contenido 2D cuando la escena 3D se envía a un destino de renderizado multivista, el renderizador 2D y sus materiales (shaders) deben estar preparados para el soporte multivista.
Los desarrolladores de aplicaciones basadas en Qt no necesitan tener esto en cuenta en muchos casos porque los materiales incorporados en Qt Quick sobre los que se construyen elementos como Rectangle, Image, o Text son todos compatibles con multivista.
Sin embargo, cuando se desarrollan materiales personalizados (QSGMaterial, QSGMaterialShader) o se escriben shaders para ShaderEffect, y la intención es usar ese contenido 2D dentro de una escena VR/AR en una aplicación Qt Quick 3D Xr, el contenido personalizado debe ser compatible con multivista. ver QSGMaterial::viewCount() para más detalles sobre esto.
Escribir shaders multiview-aware está habilitado por el pipeline de acondicionamiento de shaders de Qt. Ver las secciones Multiview en QSB Manual y Qt Shader Tools Build System Integration para más detalles.
Soporte Multiview en Qt Quick 3D
Qt Quick Las aplicaciones 3D que no utilicen Qt Quick 3D Xr, es decir, que no sean aplicaciones VR/AR, no pueden utilizar actualmente el renderizado multivista. Sin embargo, el renderizador 3D es totalmente compatible con la multivista, ya que Qt Quick 3D Xr se basa en la misma infraestructura. Todas las funciones estándar incorporadas, como Model o PrincipledMaterial, son totalmente compatibles con la vista múltiple. Algunas funciones obsoletas, como el antiguo módulo de efectos independientes, pueden no ser compatibles con el renderizado multivista.
Cuando se utilizan fragmentos de sombreado personalizados en CustomMaterial o Effect, el código de sombreado proporcionado por la aplicación debe escribirse teniendo en cuenta la compatibilidad multivista para que funcione correctamente en una aplicación Qt Quick 3D Xr con la renderización multivista activada. Consulte la documentación de estos tipos para saber cómo conseguirlo. Las palabras clave especiales para las que esto es particularmente importante son VIEW_INDEX, INPUT, SCREEN_TEXTURE, DEPTH_TEXTURE, AO_TEXTURE.
Por ejemplo, el siguiente efecto de postprocesado es compatible con multivista, porque está preparado para el caso en que INPUT sea un sampler2DArray en lugar de un 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
}Compatibilidad multivista en Qt Quick 3D Xr
El renderizado multivista está activado por defecto, siempre que la API gráfica subyacente lo soporte. Esto se hace para garantizar el mejor rendimiento posible. Para consultar si se admite la renderización multivista, compruebe la propiedad multiViewRenderingSupported.
Para propósitos de desarrollo y pruebas, puede ser útil deshabilitar el uso del renderizado multivista. Esto se hace estableciendo la variable de entorno QT_QUICK3D_XR_DISABLE_MULTIVIEW a un valor distinto de cero.
Para consultar si el renderizado multivista está habilitado, utilice la propiedad multiViewRenderingEnabled. El valor permanece siempre falso si la renderización multivista no puede ser habilitada.
En general, se recomienda que las aplicaciones VR/AR dejen habilitada la renderización multivista cuando esté soportada, y sólo la deshabiliten cuando experimenten problemas, o con fines de prueba. Se espera que el renderizado multivista mejore el rendimiento, reduciendo la carga de la GPU y especialmente de la 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.