Qt Quick 3D - ベイクドライトマップの例

3D シーンでのベイクドライトマップの使用例を示します。

この例では、シーンで完全にベイクされた照明を使用しています。その結果、レンダリングされたシーンは、主に間接照明が追加されたことで、よりリアルに見えます。チェックボックスの助けを借りて、ライトマップを無効にすることもできるので、リアルタイムとフルベイクドアプローチのレンダリング結果を比較することができます。

ライトの設定

シーンには1つのポイントライトがあります。チェックボックスをオンにすると、ライトのbakeMode 、Light.BakeModeAllに設定されます。

PointLight {
    bakeMode: root.lightBakeMode
    y: 190
    brightness: brightnessSlider.value
    castsShadow: true
    shadowFactor: 75
    shadowBias: 20
}

このプロパティをLight.BakeModeDisabled 以外の値に設定すると、二重の目的があります。ライトマップのベイク時に、ライトがライトマップされたシーンの一部であり、シーンに貢献していることを示します。実行時、シーンを普通にレンダリングするとき、ライトは完全にまたは部分的にベイクされたライトであることを示し、ライトマップされたモデルのマテリアルにおける特定のリアルタイム計算を無効にします。このため、チェックボックスは、both LightのbakeModeプロパティと、Modelオブジェクトに関連付けられたBakedLightmap のenabledプロパティを切り替えます。

モデルのセットアップ

コーネルボックスは、8つのサブメッシュを持つModelです。これはBoxタイプとしてカプセル化され、そのインスタンスがメインシーンでインスタンス化されます。

Box {
    usedInBakedLighting: true
    lightmapBaseResolution: 256
    bakedLightmap: BakedLightmap {
        enabled: root.lmEnabled
        key: "box"
        loadPrefix: "file:"
    }
    scale: Qt.vector3d(100, 100, 100)
}

このモデルは、ライトマップされたシーンでparticipates 、ライトマップbaked for it 。前者はusedInBakedLighting プロパティで示されます。これだけでは、ボックスのミニシーンにライトマップがベイクされるわけではなく、ライトマップに参加するだけです(つまり、間接照明を計算するときに、光線がモデルから跳ね返ることができます)。

ライトマップを完全に生成し、ベイク処理中に保存するために、enabledtrue を設定したBakedLightmap オブジェクトも設定します。key は一意の識別子を指定します。

簡単なデプロイのために、アプリケーションは生成されたライトマップ(.exr ファイル)を Qt リソースシステム経由で実行ファイルにパックします。CMakeLists.txtには、リソースとして追加するqlm_box.exr 。ライトマップをリベイクするときは、変更されたファイルを拾うようにアプリケーションを再度ビルドする必要があります。エンジンが実行時にファイルを見つけられるように、loadPrefix

サンプルプロジェクト @ code.qt.io

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。