ベイクドライトマップ(焼き込み済ライトマップ)

はじめに

焼き込み済のライトマップは、間接(または焼き込み済)ライティングをシーンに追加するための代替ワークフローです。 GIプローブ のアプローチとは異なり、焼き付けられたライトマップは実行時にほとんどリソースを消費しないため、ローエンドのPCやモバイルデバイスで正常に機能します。

GIProbe とは異なり、ベイクドライトマップは完全に静的です。焼き込んだ後は、まったく変更できません。また、シーンに反射を提供しません。そのため、インテリアで 反射プローブ(Reflection Probe) を使用する(またはエクステリアでSkyを使用する)ことが、高品質を得るための要件です。

焼き込むと、GIProbe よりもライトブリーディング(光線漏れ)に関する問題が少なく、高品質の設定でレイトレースモードを使用すると間接光の見栄えが良くなります(ただし、焼き込み処理には時間がかかる場合があります)。

最終的に、どの間接照明アプローチがより良いかは、ユースケースに依存します。一般に、GIProbeは見栄えが良く、セットアップがはるかに簡単です。ただし、モバイルまたはローエンドの互換性を確保するには、ベイクドライトマップが唯一の選択肢です。

視覚的比較

ベイクドライトマップとGIProbeの見た目の比較を次に示します。ライトマップはより正確ですが、照明がラップされていないテクスチャ上にあるという事実に苦しむことに注意してください。そのため、トランジションと解像度はそれほど良くないかもしれません。 GIProbeは(近似なので)あまり正確ではありませんが、全体的に滑らかに見えます。

../../_images/baked_light_comparison.png

セットアップ

まず、ライトマッパーが何かを行う前に、ベイク処理するオブジェクトにUV2レイヤーとテクスチャサイズが必要です。 UV2レイヤーは、オブジェクト内のすべての面がUVマップ内で独自の場所を持つことを保証する2次テクスチャ座標のセットです。面はテクスチャ内のピクセルを共有してはいけません。

オブジェクトに一意のUV2レイヤーとテクスチャサイズを持たせるには、いくつかの方法があります:

3D DCCから展開(アンラップ)

1つの選択肢は、お気に入りの3Dアプリから実行することです。通常、このアプローチは推奨されませんが、その手段が存在することを知ってもらうために最初に説明します。主な利点は、多くの再インポートが必要な複雑なオブジェクトでは、テクスチャ生成プロセスがGodot内で非常にコストがかかる可能性があるため、インポート前に展開(アンラップ)すると処理が速くなるということです。

2番目のUV2レイヤーで展開するだけです。

../../_images/baked_light_blender.png

そして、普通にインポートします。インポート後にメッシュのテクスチャサイズを設定する必要があることに注意してください。

../../_images/baked_light_lmsize.png

インポート時に外部メッシュを使用する場合、サイズは保持されます。 3D DCCのほとんどのアンラッパーは、迅速に動作することを目的としているため、品質重視ではありません。より良い展開図を作成するには、ほとんどの場合、シームや他の技術を使用する必要があります。

Godot内から展開する

Godotには、メッシュを展開してUVチャネルを視覚化するオプションがあります。 Meshメニューにあります:

../../_images/baked_light_mesh_menu.png

これにより、焼き込みに使用できる2番目のUV2座標セットが生成され、テクスチャサイズも自動的に設定されます。

シーンのインポート時に展開

これはおそらく全体的に最善のアプローチです。唯一の欠点は、大きなモデルでは、インポート時に展開に時間がかかることがあるということです。ファイルシステムドックでインポートされたシーンを選択し、[インポート]タブに移動します。そこで、次のオプションを変更できます:

../../_images/baked_light_import.png

Light Baking モードは "Gen Lightmaps" に設定する必要があります。ワールド単位のテクセルサイズ(Texel Size)も指定する必要があります。これにより、ライトマップテクスチャの最終サイズ(および、結果として、マップのUVパディング)が決定されます。

このオプションを設定すると、シーン内のすべてのメッシュのUV2マップが適切に生成されます。

注意点: シーン内でメッシュを再利用する場合、最初に見つかったインスタンスに対してUVが生成されることに注意してください。メッシュがさまざまな縮尺で再利用される場合(および縮尺が大きく異なる場合、半分以下または二倍以上)、これは非効率的なライトマップになります。ライトマッピングの使用を計画している場合は、異なるスケールでソースメッシュを再利用しないでください。

UV2を確認する

前に説明したメッシュメニューで、UV2テクスチャ座標を視覚化できます。何かが失敗している場合は、メッシュに次の UV2座標があることを確認してください:

../../_images/baked_light_uvchannel.png

シーンの設定

何かを行う前に、BakedLightmap ノードをシーンに追加する必要があります。これにより、インスタンス化されたシーンであっても、そのシーンのすべてのノード(およびサブノード)でライトのベイク処理が有効になります。

../../_images/baked_light_scene.png

これはベイカーによってサポートされているため、サブシーンは複数回インスタンス化することができ、それぞれに独自のライトマップが割り当てられます(前述のスケーリングに関するルールを必ず守ってください):

範囲設定

ライトマップは、それを使用して内部の動的オブジェクトに光を伝達するため、影響を受けるエリアと同程度のボリューム(容積)が必要です。(詳細は後述)。GIProbe で行うように、ボリュームでシーンをカバーするだけです:

../../_images/baked_light_bounds.png

メッシュの設定

MeshInstance ノードがベイク処理に参加するには、"Use in Baked Light"プロパティを有効にする必要があります。

../../_images/baked_light_use.png

シーンのインポート時にライトマップを自動生成する場合、これは自動的に有効になります。

ライトの設定

デフォルトでは、ライトは間接光でベイク処理されます。これは、シャドウマッピングと照明は依然として動的であり、移動するオブジェクトに影響を与えますが、そのライトからの光の跳ね返りはベイク処理されることを意味します。

ライトは無効(ベイクなし)または完全にベイク処理(直接および間接)できます。これは、ライトの Bake Mode メニューから制御できます:

../../_images/baked_light_bake_mode.png

モードは次のとおりです:

  • Disabled(無効): ベイク処理ではライトは無視されます。ライトを非表示にしてもベイク処理は無効化されないので、代わりにこれを使用する必要があります。
  • **Indirect(間接): **これはデフォルトのモードです。間接照明のみがベイク処理されます。
  • All(すべて): 間接照明と直接照明の両方がベイク処理されます。ライトを2回(動的および静的に)表示したくない場合は、単に非表示にしてください。

焼き込みの品質

BakedLightmap は、単純化するために、ボクセル化されたシーンを使用して照明を計算します。ボクセルのサイズは、**Bake Subdiv* *パラメーターで調整できます。細分化を行うとより詳細になりますが、焼き込みに時間がかかります。

一般に、デフォルトで十分です。また、Capture Subdivision (常にメインサブディビジョン以下である必要があります)もあります。これは、動的オブジェクトの光をキャプチャするために使用されます(詳細は後述)。ほとんどの場合、このデフォルト値で十分です。

../../_images/baked_light_capture.png

キャプチャサイズに加えて、Bake Mode を設定することで品質を変更できます。間接的なキャプチャの2つのモードが提供されます:

../../_images/baked_light_mode.png
  • ConeTrace(ボクセルコーントレース): デフォルトです。精度は劣りますが、高速です。GIProbe に似ています(ただし、わずかに優れています)。
  • RayTrace(レイ トレーシング): この方法はより正確ですが、ベイク処理にかなり時間がかかります。低品質または中品質で使用すると、一部のシーンで粒子が生成される場合があります。

ベイク(焼き込み)処理

ベイク処理を開始するには、BakedLightmap`` ノードの選択中に一番上の大きな **ライトマップを焼き込む ボタンを押すだけです:

../../_images/baked_light_bake.png

これには、選択したシーンのサイズ、焼き込み方法、品質に応じて、数秒から数分(または数時間)かかります。

焼き込みの設定

ベイク処理にはさらにいくつかのオプションがあります:

  • Bake Subdiv: Godotライトマッパーは、周りの光の情報を転送するためにグリッドを使用しています。デフォルト値のままで問題はなく、ほとんどの場合に適しています。細部の照明をより良くしたい場合や、シーンが大きい場合には増やします。
  • Capture Subdiv: これは、リアルタイムのキャプチャ情報(動的オブジェクトの照明)に使用されるグリッドです。ほとんどの場合、デフォルト値で問題ありません。通常、この値はBake Subdivより小さく、それより大きくすることはできません。
  • Bake Quality: Low、Medium、Highの3つの焼き込み品質モードが用意されています。品質が高いほど時間がかかります。
  • Bake Mode: ベイカーは2つの異なる手法を使用できます: Voxel Cone Tracing (高速ですが近似的)、または RayTracing (低速ですが正確)。
  • Propagation: Voxel Cone Trace モードで使用されます。GIProbe と同じように機能します。
  • HDR: 無効にすると、ライトマップは小さくなりますが、白(1.0)を超える光をキャプチャできません。
  • Image Path: ライトマップが保存される場所。デフォルトでは、シーン (".") と同じディレクトリにありますが、微調整できます。
  • Extents: 影響を受ける領域のサイズ(視覚的に編集できます)
  • Light Data: ベイク処理後のライトベイク処理されたデータが含まれます。テクスチャはディスクに保存されますが、これには動的オブジェクトのキャプチャデータも含まれますが、これは少し重い場合があります。.scn の代わりに .tscn 形式を使用している場合は、ディスクに保存できます。

動的オブジェクト

他のエンジンまたはライトマッパーの実装では、「ライトプローブ」と呼ばれる小さなオブジェクトをレベル全体に手動で配置して、キャプチャ データを生成する必要があります。これは、光をシーン内を移動する動的オブジェクトに転送するために使用されます。

ただし、このライトマッピングの実装では別の方法が使用されます。プロセスは自動であるため、何もする必要はありません。オブジェクトを動かすだけで、それに応じて点灯します。もちろん、それに応じてシーンの境界を設定する必要があります。そうしないと機能しません。

../../_images/baked_light_indirect.gif