멀티뷰 렌더링

멀티뷰 렌더링은 2D 텍스처 배열의 레이어에 드로우 호출을 인스턴스화하는 것을 말합니다. Qt에서는 특히 Qt Quick 3D Xr로 빌드된 VR/AR 애플리케이션과 관련이 있습니다. 멀티뷰 렌더링은 왼쪽 눈과 오른쪽 눈의 콘텐츠에 대한 씬 트래버스, 렌더링 준비, 렌더 패스 기록을 독립적으로 수행하는 대신 단일 렌더 패스의 드로우 호출을 텍스처 배열의 0과 1 레이어에 인스턴스화하여 한 번에 수행할 수 있습니다. 버텍스 셰이더는 뷰 인덱스를 나타내는 특수 변수를 사용하고 이를 기반으로 뷰별 값을 계산합니다. 카메라 행렬과 같이 뷰 종속 데이터를 포함하는 유니폼은 양쪽 눈에 모두 제공되어야 합니다. 멀티뷰 렌더링은 렌더러의 시스템 부하를 줄여 잠재적으로 성능 향상으로 이어질 것으로 예상됩니다. 하지만 렌더러와 셰이더가 뷰 종속 데이터와 텍스처 배열을 적절히 사용하도록 인식해야 한다는 대가가 따릅니다.

저수준 개요

Qt 애플리케이션 개발자가 Qt 렌더링 스택의 하위 레벨에서 멀티뷰 렌더링이 어떻게 활성화되는지 완전히 이해할 필요는 없습니다. 자세한 내용을 살펴보고자 하는 개발자를 위해 다음 링크가 제공됩니다.

3D API의 멀티뷰 지원

멀티뷰 렌더링은 기본 3D API가 런타임에 멀티뷰를 지원하는 경우에만 사용할 수 있습니다. 자세한 내용은 해당 사양 및 설명서를 참조하세요:

Qt의 렌더링 하드웨어 인터페이스(RHI)의 멀티뷰 지원

Qt에서 3D 그래픽 API는 QRhi 클래스에 의해 추상화됩니다. Qt QuickQt Quick 3D 는 모든 가속 렌더링에 이 인프라를 사용합니다. 멀티뷰 렌더링 지원에 대한 자세한 로우 레벨 정보는 다음을 참조하십시오:

Qt Quick - Quick 3D - Quick 3D XR 스택의 멀티뷰 지원

의 멀티뷰 지원 Qt Quick

Qt Quick 는 멀티뷰를 인식하지만 자체적으로 멀티뷰 렌더링을 사용하지 않습니다. 멀티뷰 렌더링 지원은 2D 요소가 3D 장면에 임베드될 때 Qt Quick 3D 와 함께 중요해집니다. 3D 장면이 멀티뷰 렌더링 대상으로 출력될 때 2D 콘텐츠를 올바르게 렌더링하려면 2D 렌더러와 해당 머티리얼(셰이더)이 멀티뷰 지원을 위해 준비되어야 합니다.

Rectangle, Image, Text 와 같은 항목이 기반하고 있는 Qt Quick 의 기본 제공 머티리얼은 모두 멀티뷰와 호환되므로 Qt 기반 애플리케이션 개발자는 대부분의 경우 이를 고려할 필요가 없습니다.

그러나 커스텀 머티리얼(QSGMaterial, QSGMaterialShader)을 개발하거나 ShaderEffect 용 셰이더를 작성하고 해당 2D 콘텐츠를 Qt Quick 3D Xr 애플리케이션의 VR/AR 씬 내에서 사용하려는 경우, 커스텀 콘텐츠는 멀티뷰를 인식해야 합니다. 자세한 내용은 QSGMaterial::viewCount()를 참조하세요.

멀티뷰 인식 셰이더 작성은 Qt의 셰이더 컨디셔닝 파이프라인을 통해 가능합니다. 자세한 내용은 QSB 매뉴얼의 멀티뷰 섹션과 Qt Shader Tools 빌드 시스템 통합을 참조하십시오.

멀티뷰 지원 Qt Quick 3D

Qt Quick 3D Qt Quick 3D Xr을 사용하지 않는 애플리케이션, 즉 VR/AR 애플리케이션이 아닌 애플리케이션은 현재 멀티뷰 렌더링을 사용할 수 없습니다. 하지만 3D 렌더러는 Qt Quick 3D Xr이 동일한 인프라를 기반으로 구축되었으므로 멀티뷰를 완벽하게 지원합니다. Model 또는 PrincipledMaterial 등 모든 표준 기본 제공 기능은 멀티뷰와 완벽하게 호환됩니다. 이전 독립형 효과 모듈과 같이 더 이상 사용되지 않는 일부 기능은 멀티뷰 렌더링을 지원하지 않을 수 있습니다.

사용자 정의 셰이더 스니펫이 CustomMaterial 또는 Effect 에 포함된 경우 멀티뷰 렌더링이 활성화된 Qt Quick 3D Xr 애플리케이션에서 제대로 작동하려면 애플리케이션에서 제공하는 셰이더 코드가 멀티뷰 지원을 염두에 두고 작성되어야 합니다. 이를 달성하는 방법은 해당 유형의 설명서를 참조하세요. 특히 중요한 특수 키워드는 VIEW_INDEX, INPUT, SCREEN_TEXTURE, DEPTH_TEXTURE, AO_TEXTURE 입니다.

예를 들어 다음 포스트 프로세싱 효과는 INPUTsampler2D 대신 sampler2DArray 인 경우에 대비하여 준비되었으므로 멀티뷰와 호환됩니다:

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 를 0이 아닌 값으로 설정하면 됩니다.

멀티뷰 렌더링이 활성화되어 있는지 쿼리하려면 multiViewRenderingEnabled 속성을 사용합니다. 멀티뷰 렌더링을 활성화할 수 없는 경우 이 값은 항상 거짓으로 유지됩니다.

일반적으로 VR/AR 애플리케이션은 멀티뷰 렌더링이 지원될 때는 활성화된 상태로 두고, 문제가 발생하거나 테스트 목적으로만 비활성화하는 것이 좋습니다. 멀티뷰 렌더링은 GPU, 특히 CPU 부하를 줄여 성능을 향상시킬 것으로 기대됩니다.

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