イメージベースライティングの使用
はじめに
Qt Quick 3Dでは、シーンや個々のマテリアルを照らすためにIBL(画像ベースのライティング)がサポートされています。
IBLは、画像を用いてシーンを照らすことができるライティング手法です。これは、屋内や屋外のシーンでリアルな照明や反射を作成したい場合に特に役立ちます。
IBLには任意の画像ファイルを使用できますが、360° HDR(ハイダイナミックレンジ)画像の使用が推奨されます。HDR画像は、例えばJPEGやPNG画像に比べてはるかに広いダイナミックレンジを持っています。ダイナミックレンジが広いほど、非常に明るい部分から非常に暗い部分まで幅広い輝度レベルを表現できるため、よりリアルな照明効果を得ることができます。
以下の例は、HDR画像と単一の方向性ライトを使用した場合の、オブジェクトへの照明効果の比較を示しています:
| 光 | 滑らかな誘電体マテリアル | 粗い誘電体マテリアル | 滑らかな金属素材 | 粗い金属系素材 |
|---|---|---|---|---|
| 一方向の光 |
|
|
|
|
| 画像ベースの光 |
|
|
|
|
シーンの照明
画像を使用してscene を照らすには、その画像をTexture としてlightProbe プロパティに追加します。
lightProbe: Texture {
source: "maps/OpenfootageNET_garage-1024.hdr"
}画像を選択すると、シーンのIBL設定が完了します。デフォルトでは、シーン内のすべてのモデルがライトプローブによって照らされます。
注: IBLを他の光源と組み合わせて、オブジェクトの照明効果をさらに引き立てることもできます 。
シーンの IBL 設定が完了したので、プローブの各プロパティについて見ていきましょう。多くの場合、デフォルト値で満足のいく結果が得られますが、画像や希望する結果に応じて、以下のプロパティ値を調整することもできます。
- Exposure ライトプローブから放出される光の量。
- Horizon Cut-Off この値を大きくすると、環境の下半分が暗くなり(黒くなり)、照明が主に画像の上部から来るように強制されます(これにより、下半分からの特定の反射が除去されます)。
- Orientation このプロパティは、ライトプローブの向きを定義します。向きは、x、y、z軸に対するオイラー角(度単位)で定義されます。
| プロパティ | メタリックマテリアル | 誘電体マテリアル |
|---|---|---|
| デフォルト設定 |
|
|
| 露出 |
|
|
| 地平線のカットオフ |
|
|
| 向き |
|
|
マテリアルの照明
シーン全体ではなく、1つのマテリアルにのみ画像ベースのライティングを適用する場合、またはすでに画像ベースのライティングで照らされているモデルに別のライトプローブを使用する場合は、そのマテリアルの「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 によるビルド時のベイク処理
アセットに対して手動でbalsamを実行することは、必ずしも理想的とは限りません。そのため、アプリケーションのビルド時にCMakeを利用して同じタスクを自動的に実行することを推奨します。
これは、Qt6パッケージのQuick3Dコンポーネントが提供するqt_add_lightprobe_images()CMake関数を使用することで実現されます:
...
find_package(Qt6 COMPONENTS Quick3D)
...
qt_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
FILES
"environment.hdr"
)application_target を適切なターゲットに置き換えてください。 これにより、environment.hdrに対して手動でbalsamを実行する必要がなくなり、.hdrファイルをアプリケーションに同梱する必要もなくなります。代わりに、ビルド中にbalsamが自動的に呼び出され、:/ibl/environment.ktx にapplicationリソースとしてenvironment.ktxが追加されます。その後、lightProbeのTexture でこのファイルを参照するように設定する必要があります。
lightProbe: Texture {
source: "qrc:/ibl/environment.ktx"
}注: リソースシステム内の最終的な名前が .qml ファイルの場所と一致するパスになるよう PREFIXを設定することで 、qrc スキームで絶対パスを指定する代わりに、相対ソースパスを使用できるようになります。
PREFIXに加えて、キーワード BASE も利用可能です。その動作はqt_add_resources() に従います。たとえば、次のように指定すると、:/ibl/maps/environment.ktx が生成されます:
qt_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
BASE
"../data/shared"
FILES
"../data/shared/maps/environment.hdr"
)qt_add_shaders()と同様に、OUTPUTSキーワードを使用することで、リソースシステム内のファイルに完全にカスタムな名前を指定できます。たとえば、以下のコードも:/ibl/maps/environment.ktx を生成します:
qt_add_lightprobe_images(application_target "ibl_assets"
PREFIX
"/ibl"
FILES
"../data/shared/maps/environment.hdr"
OUTPUTS
"maps/environment.ktx"
)注: FILESリストの各エントリに対して 、OUTPUTSにそれに対応するエントリが必ず存在する必要があります。
© 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.













