Qt Shader Tools 개요

Qt Shader Tools 모듈은 크로노스 SPIR-V 웹 사이트에 설명된 대로 SPIR-V 오픈 소스 생태계를 기반으로 합니다. SPIR-V로 컴파일할 때는 glslang이 사용되며, 번역 및 반영은 SPIRV-Cross를 통해 이루어집니다.

Qt 애플리케이션과 라이브러리에서 셰이더 코드를 한 번 작성할 경우 모든 셰이더는 단일 언어로 작성된 후 SPIR-V로 컴파일되어야 합니다. 이 셰이딩 언어는 현재 Vulkan과 호환되는 GLSL입니다. 이는 OpenGL 스타일의 GLSL Qt 5.x가 기대하는 것과는 다릅니다. 차이점에 대한 개요는 GL_KHR_vulkan_glslspecification을 참조하세요.

그런 다음 반사 정보(입력, 출력, 셰이더 리소스)와 함께 SPIR-V 바이트코드를 번역하여 GLSL, HLSL, 메탈 셰이딩 언어와 같은 다른 셰이딩 언어의 소스 코드를 생성합니다. 특히 GLSL의 경우, 여기에는 여러 가지 변형, 즉 GLSL ES 100, GLSL ES 300, GLSL 120 및 150과 같은 다양한 GLSL 버전에 적합한 소스 코드 생성도 포함됩니다. 그런 다음 직렬화 가능한 QShader 컨테이너 객체로 패키징되며, 일반적으로 디스크에 .qsb 파일로 저장됩니다. Qt 렌더링 하드웨어 인터페이스는 QShader 인스턴스를 직접 사용하여 런타임에 사용되는 그래픽 API에 가장 적합한 셰이더 소스 또는 바이트코드를 선택합니다. QShader 객체는 일반적으로 응용 프로그램과 함께 제공되는 .qsb 파일 또는 Qt 리소스 시스템에서 Qt 자체에서 역직렬화됩니다.

일부 플랫폼은 셰이더 소스 코드를 SPIR-V와 유사한 중간 포맷으로 컴파일하는 옵션을 제공합니다. 여기에는 플랫폼별 도구를 실행하는 것이 포함됩니다. Direct 3D의 경우, qsb 툴은 HLSL 소스 코드가 생성된 후 Windows SDK에서 fxc 툴을 호출하는 옵션을 제공합니다. 그러면 이 툴은 HLSL 소스 코드를 fxc 에서 생성된 DXBC 바이너리로 대체합니다. 이렇게 하면 더 이상 컴파일의 첫 번째 단계(HLSL 소스에서 DXBC로)를 직접 수행할 필요가 없으므로 애플리케이션의 런타임 성능에 긍정적인 영향을 미칠 수 있습니다. macOS 및 iOS의 경우 XCode SDK에서 유사한 도구를 제공합니다. 이 접근 방식의 단점은 이러한 도구를 실행하는 것이 해당 플랫폼에서만 가능하다는 것입니다. 따라서 애플리케이션 빌드 시 셰이더 컨디셔닝을 수행하면 대상 플랫폼과 호출할 수 있는 플랫폼별 도구에 대한 지식이 암시적으로 제공되므로 qsb의 CMake 통합과 함께 사용하기에 가장 적합합니다.

다음 다이어그램은 qsb 도구를 호출하는 동안 발생하는 단계를 설명합니다:

Qt 셰이더 컨디셔닝 시스템의 주요 구성 요소는 다음과 같습니다:

  • qsb 명령줄 도구
  • qsb 도구에 대한 CMake 통합
  • QShader ( QtGui 모듈의 일부)
  • QShaderBaker (이 모듈의 일부, qsb 툴에 해당하는 라이브러리)

일반적인 사용법 Qt Quick

애플리케이션 개발자는 일반적으로 다음 중 하나가 포함된 Qt Quick 장면에서 사용자 정의 셰이더 코드로 작업합니다:

  • ShaderEffect 항목
  • QQuickItem 을 서브클래스화하여 빌드한 커스텀 머티리얼과 함께 씬 그래프 노드를 사용하는 서브클래스 QSGMaterial.

예를 들어 다음 QML 스니펫을 생각해 보겠습니다:

ShaderEffect {
    width: 100; height: 100
    fragmentShader: "myeffect.frag.qsb"
}

여기서 fragmentShader URL은 .qml 파일 위치를 기준으로 .qsb 파일을 참조합니다. 애플리케이션은 .qml 파일 옆에 myeffect.frag.qsb 을 전송할 것으로 예상됩니다. 애플리케이션과 함께 제공될 필요가 없는 Vulkan 스타일 GLSL 소스에서 해당 파일을 생성하려면 애플리케이션에서 직접 또는 CMake를 통해 qsb 도구를 사용해야 합니다.

일반적인 사용법 Qt Quick 3D

Qt Quick 3DShader Tools 모듈을 직접 사용하여 런타임에 셰이더 컨디셔닝을 수행합니다. 또한 셰이더 컴파일러 및 기타 툴에 대한 런타임 종속성이 이상적이지 않은 경우 빌드 시점에 머티리얼에 대한 셰이더를 미리 생성하는 솔루션을 제공합니다. 두 경우 모두 qsb 툴은 Qt Quick 3D 의 자체 프레임워크와 툴로 캡슐화되어 있으므로 개발자가 직접 작업할 필요가 없습니다.

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