셰이더의 퍼시스턴트 캐싱 Qt Quick 3D
셰이더 및 3D 머티리얼
머티리얼을 사용하여 3D 오브젝트를 렌더링하려면 버텍스 및 조각 셰이더가 필요합니다.
3D 씬의 수명 동안 머티리얼을 처음 접할 때 런타임에 다음과 같은 일이 발생합니다:
- 셰이더 소스 텍스트가 생성됩니다.
- 셰이더는 표준 Qt 셰이더 파이프라인을 통해 전송됩니다. 그 결과 셰이더의 중간 바이트코드 버전(SPIR-V), 다른 3D API(OpenGL용 GLSL, Direct3D용 HLSL 등)를 위한 여러 소스 코드 변형 및 추가 메타데이터가 생성됩니다.
- 3D 엔진이 graphics pipeline 을 생성하면 사용된 3D API에 적합한 바이트코드 또는 소스 변형이 선택되고, 기본 3D API는 실제 GPU 명령어 집합을 대상으로 2단계 컴파일을 수행할 가능성이 높습니다.
이 모든 과정을 합치면 비용이 많이 드는 작업이 될 수 있습니다. 애플리케이션의 후속 실행에서 이를 방지하기 위해 두 개의 영구 디스크 기반 캐시가 사용됩니다.
로우레벨 캐시
Qt Quick 3D 는 Qt Quick 및 시나리오 그래프를 기반으로 합니다. OpenGL 프로그램 바이너리, Vulkan 파이프라인 등에 대한 영구 디스크 기반 캐싱의 경우 동일한 인프라가 사용됩니다.
이에 대한 자세한 내용은 QQuickGraphicsConfiguration#Pipeline Cache Save and Load 을 참조하세요.
기본적으로 셰이더 디스크 캐시는 활성화되어 있습니다. 즉, 플랫폼이나 3D API 구현이 컴파일된 셰이더의 자체 영구 캐싱을 수행하지 않더라도 Qt는 QQuickWindow 의 수명 동안 수집되는 OpenGL 프로그램 바이너리 또는 유사한 에셋을 저장할 수 있습니다. 디스크에 데이터를 쓰는 것은 창이 닫힐 때 발생하며, 애플리케이션의 다음 실행 시 다시 로드됩니다. 이렇게 하면 애플리케이션의 이전 실행 중에 셰이더가 발생했을 때 그래픽 파이프라인을 훨씬 빠르게 생성할 수 있습니다.
3D 머티리얼 및 포스트 프로세싱 효과에 대한 셰이더도 이에 참여합니다.
머티리얼 셰이더 캐시
Qt Quick 과 달리 Qt Quick 3D 은 현재 3D 머티리얼 및 효과에 대한 셰이더 소스 텍스트의 런타임 생성에 의존합니다. 셰이더젠 툴을 사용하는 경우는 예외이지만, 이 기능은 실험 단계이므로 현재로서는 프로덕션용으로 권장되지 않습니다.
셰이더 소스 텍스트를 생성한 다음 1단계 컴파일 및 트랜스파일링(자세한 내용은 Qt Shader Tools 참조)을 수행하면 비용이 많이 드는 작업이 될 수 있습니다. 2D 머티리얼과 이펙트의 경우 일반적으로 빌드 시점에 이 작업이 수행되지만 3D의 경우 현재 옵션이 없습니다.
따라서 Qt Quick 3D 은 다른 디스크 기반 캐시를 사용합니다. 여기에는 생성된 3D 머티리얼과 효과에 대한 에셋이 저장됩니다.
즉, 로우레벨 캐시와 함께 사용하면 애플리케이션의 이전 실행 중에 발생한 머티리얼이 있는 3D 씬이 후속 실행에서 다시 발생해도 비용이 많이 드는 차단 작업이 발생하지 않습니다.
참고: 저수준 셰이더 및 파이프라인 캐시와 마찬가지로 쓰기 가능한 파일 시스템이 필요하며 플랫폼에서 QStandardPaths 을 통해 쓰기 가능한 캐시 위치를 제공해야 합니다.
응용 프로그램 속성 Qt::AA_DisableShaderDiskCache 과 해당 환경 변수는 머티리얼 셰이더 캐시에도 적용됩니다. 이 속성을 설정하면 Qt의 로우 레벨과 Qt Quick 3D 의 머티리얼 캐시가 모두 비활성화됩니다.
참고: qml 도구는 기본적으로 이 속성을 설정합니다. --enable-shader-cache 명령줄 인수를 전달하면 독립형 Qt 응용 프로그램과 동일한 동작을 얻을 수 있습니다.
© 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.