이미지 기반 조명 사용
소개
Qt Quick 3D 는 장면이나 개별 머티리얼을 비추는 IBL(이미지 기반 조명)을 지원합니다.
IBL은 이미지로 장면을 비출 수 있는 조명 기법입니다. 실내 및 실외 장면에서 사실적인 조명과 반사를 만들고자 할 때 특히 유용합니다.
IBL에는 모든 이미지 파일을 사용할 수 있지만 360º HDR(하이 다이나믹 레인지) 이미지를 사용하는 것이 좋습니다. HDR 이미지는 JPEG 또는 PNG 이미지보다 훨씬 더 높은 다이나믹 레인지를 가지고 있습니다. 다이나믹 레인지가 높을수록 매우 밝은 것부터 매우 어두운 것까지 다양한 휘도 레벨을 통해 보다 사실적인 조명을 제공합니다.
다음 예는 HDR 이미지와 단일 방향 조명을 사용한 물체의 조명 효과를 보여줍니다:
빛 | 매끄러운 유전체 재질 | 거친 유전체 재질 | 매끄러운 메탈릭 머티리얼 | 거친 메탈릭 머티리얼 |
---|---|---|---|---|
단일 방향성 조명 | ||||
이미지 기반 조명 |
장면 조명
이미지를 사용하여 scene 을 조명하려면 이미지를 lightProbe 속성에 Texture 으로 추가합니다.
lightProbe: Texture { source: "maps/OpenfootageNET_garage-1024.hdr" }
이미지를 선택하면 씬에 대한 IBL이 설정됩니다. 씬의 모든 모델은 기본적으로 조명 프로브에 의해 조명됩니다.
참고: IBL을 다른 광원과 결합하여 오브젝트의 조명 효과를 보완할 수도 있습니다.
이제 씬에 IBL을 설정했으니 프로브의 다양한 속성을 살펴보겠습니다. 대부분의 경우 기본값으로 만족스러운 결과를 얻을 수 있지만 이미지와 원하는 결과에 따라 다음 속성 값을 조정할 수 있습니다:
- Exposure 라이트 프로브에서 방출되는 빛의 양입니다.
- Horizon Cut-Off 이 값을 높이면 환경의 아래쪽 절반에 어두움(검정색)이 추가되어 조명이 주로 이미지의 위쪽에서 나오게 되고 아래쪽 절반에서는 특정 반사가 제거됩니다.
- Orientation 이 속성은 라이트 프로브의 방향을 정의할 때 사용합니다. 오리엔테이션은 x, y, z 축에 대한 오일러 각도(도)로 정의됩니다.
속성 | 금속 재질 | 유전체 재질 |
---|---|---|
기본 설정 | ||
노출 | ||
수평선 컷오프 | ||
오리엔테이션 |
머티리얼 조명
전체 장면이 아닌 하나의 머티리얼에만 이미지 기반 조명을 사용하거나 이미지 기반 조명으로 이미 조명을 받은 모델에 별도의 광원 프로브를 사용하려면 이미지를 머티리얼에 대해 light probe 로 설정합니다.
위의 단계를 수행하면 머티리얼에 대한 별도의 라이트 프로브가 설정됩니다. 이 라이트 프로브는 지정된 씬 라이트 프로브가 있는 경우 이를 재정의합니다.
IBL 큐브맵 사전 생성
IBL을 사용하는 경우 애플리케이션에서 IBL 이미지에 대한 큐브맵을 생성해야 합니다. 기본적으로 이 작업은 애플리케이션 시작 중에 발생하며 특히 임베디드 및 모바일 디바이스에서는 상당히 느릴 수 있습니다. 따라서 Balsam을 사용하여 이 큐브맵을 미리 생성할 수 있습니다. .hdr 파일을 입력으로 Balsam을 실행하기만 하면 입력과 이름이 같지만 파일 확장자가 ktx인 큐브맵 파일이 출력됩니다. 그런 다음 이 파일을 lightProbe 프로퍼티의 연결된 Texture 에서 참조하면 Qt는 런타임에 비용이 많이 드는 처리 없이 미리 생성된 큐브맵을 로드합니다.
수동 베이킹
예를 들어 애플리케이션이 라이트 프로브 또는 스카이박스에 .hdr 이미지를 사용한다고 가정해 보겠습니다:
View3D { environment: SceneEnvironment { backgroundMode: SceneEnvironment.SkyBox lightProbe: Texture { source: "environment.hdr" } probeOrientation: Qt.vector3d(0, -90, 0) } // ... }
런타임에 environment.hdr을 사용할 수 있다고 가정하면 이 기능은 완벽하게 작동합니다. 그러나 .hdr 이미지를 로드하려면 비용이 많이 드는 사전 처리가 필요합니다. 실행하면 이 문제를 피할 수 있습니다:
balsam environment.hdr
그 결과 새 파일 environment.ktx
이 생성됩니다. .hdr 파일 대신 이 파일을 전송하고 텍스처 소스를 변경하면 로딩 시간이 훨씬 빨라집니다.
lightProbe: Texture { source: "environment.ktx" }
CMake를 통한 빌드 시간 베이킹
에셋에서 발삼을 수동으로 실행하는 것이 항상 이상적인 것은 아닙니다. 따라서 애플리케이션 빌드 시 동일한 작업을 자동으로 수행하기 위해 CMake를 사용하는 것이 좋습니다.
이 작업은 Qt6 패키지의 Quick3D 컴포넌트에서 제공하는 qt6_add_lightprobe_images CMake 함수를 사용하여 수행합니다:
... find_package(Qt6 COMPONENTS Quick3D) ... qt6_add_lightprobe_images(application_target "ibl_assets" PREFIX "/ibl" FILES "environment.hdr" )
application_target
를 적절한 대상으로 바꿉니다. 여기에서는 더 이상 environment.hdr에서 발삼을 수동으로 실행할 필요가 없으며 .hdr 파일도 애플리케이션과 함께 제공될 필요가 없습니다. 그 대신 빌드 중에 balsam이 자동으로 호출되고 :/ibl/environment.ktx
에서 애플리케이션 리소스에 environment.ktx가 추가됩니다. 그러면 lightProbe의 Texture 에서 이 파일을 참조해야 합니다.
lightProbe: Texture { source: "qrc:/ibl/environment.ktx" }
참고: 리소스 시스템의 최종 이름이 .qml 파일의 위치와 일치하는 경로를 갖도록 PREFIX를 설정하면 qrc 체계로 절대 경로를 제공하지 않고도 상대 소스 경로를 사용할 수 있습니다.
PREFIX 외에도 키워드 BASE도 사용할 수 있습니다. 동작은 qt6_add_resources의 동작을 따릅니다. 예를 들어 다음은 :/ibl/maps/environment.ktx
을 생성합니다:
qt6_add_lightprobe_images(application_target "ibl_assets" PREFIX "/ibl" BASE "../data/shared" FILES "../data/shared/maps/environment.hdr" )
qt6_add_shaders에서와 마찬가지로, 리소스 시스템에서 파일에 완전히 사용자 지정 이름을 지정할 수 있도록 OUTPUTS 키워드를 사용할 수 있습니다. 예를 들어 다음은 :/ibl/maps/environment.ktx
를 생성합니다:
qt6_add_lightprobe_images(application_target "ibl_assets" PREFIX "/ibl" FILES "../data/shared/maps/environment.hdr" OUTPUTS "maps/environment.ktx" )
참고: FILES 목록의 각 항목에 대해 OUTPUTS에 해당하는 항목이 있어야 합니다.
© 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.