이 페이지에서

다음과 함께 셰이더의 영구 캐싱 Qt Quick 3D

셰이더 및 3D 머티리얼을 활용한

머티리얼을 적용한 3D 오브젝트를 렌더링하려면 버텍스 셰이더와 프래그먼트 셰이더가 사용됩니다.

3D 씬의 수명 주기 동안 머티리얼이 처음 발견될 때 런타임에 다음과 같은 과정이 발생합니다:

  • 셰이더 소스 텍스트가 생성됩니다.
  • 셰이더는 표준 Qt 셰이더 파이프라인을 통해 전송됩니다. 그 결과, 셰이더의 중간 바이트코드 버전(SPIR-V), 다른 3D API용 여러 소스 코드 변형(OpenGL용 GLSL, Direct3D용 HLSL 등) 및 추가 메타데이터가 생성됩니다.
  • 3D 엔진이 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 머티리얼 및 효과에 대한 셰이더 소스 텍스트를 런타임에 생성하는 방식을 사용합니다. 단, Shadergen 도구를 사용하는 경우는 예외이지만, 이 기능은 실험적인 단계이며 현재로서는 실제 제작 환경에서 사용하는 것을 권장하지 않습니다.

셰이더 소스 텍스트를 생성한 후 1단계 컴파일 및 트랜스파일링(자세한 내용은 Qt Shader Tools 참조)을 수행하는 작업은 리소스 소모가 클 수 있습니다. 2D 머티리얼 및 효과의 경우 이는 일반적으로 빌드 시점에 수행되지만, 3D의 경우 현재로서는 그러한 옵션이 없습니다.

따라서 Qt Quick 3D 는 또 다른 디스크 기반 캐시를 사용합니다. 이 캐시는 생성된 3D 머티리얼 및 효과에 대한 자산을 저장합니다.

즉, 저수준 캐시와 결합하여, 애플리케이션의 이전 실행 과정에서 이미 사용된 머티리얼이 포함된 3D 장면은 이후 실행에서 다시 만나더라도 비용이 많이 들고 작업을 차단하는 작업으로 이어지지 않습니다.

참고: 저수준 셰이더 및 파이프라인 캐시와마찬가지로 , 이를 사용하려면 쓰기 가능한 파일 시스템이 필요하며, 플랫폼이 QStandardPaths 을 통해 쓰기 가능한 캐시 위치를 제공해야 합니다.

애플리케이션 속성 Qt::AA_DisableShaderDiskCache 및 해당 환경 변수는 머티리얼 셰이더 캐시에도 적용됩니다. 이 속성이 설정되면 Qt의 저수준 캐시와 Qt Quick 3D 의 머티리얼 캐시가 모두 비활성화됩니다.

참고: qml 도구는 기본적으로 이 속성을 설정합니다. 독립 실행형 Qt 애플리케이션과 동일한 동작을 얻으려면 --enable-shader-cache 명령줄 인수를 전달하십시오.

실행 시 3D 머티리얼 캐시에 관한 정보를 출력받으려면 qt.quick3d.cache 로깅 범주를 활성화하십시오.

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