Version: 2023.2
言語: 日本語
ライトプローブ - 技術的な情報
スクリプトを使用したライトプローブの配置

ライトプローブグループ

ライトプローブをシーンに配置するには、Light Probe Group (ライトプローブグループ) コンポーネントをアタッチしたゲームオブジェクトを使う必要があります。ゲームオブジェクトに Light Probe Group コンポーネントを加えるには、 Component -> Rendering -> Light Probe Group の順に選択します。

シーン内のどんなゲームオブジェクトにでも Light Probe Group コンポーネントを加えることができます。ただし、プロジェクトから誤って削除する可能性を減らすために、新しい空のゲームオブジェクト (GameObject > Create Empty) を作成し、それに Light Probe Group コンポーネントを追加することをお勧めします。

Ringing

特定の状況下では、ライトプローブに輪状のアーティファクト (Ringing と呼ばれます) が出現します。これは、ライトプローブの周囲のライトに大きな違いがある場合によく発生します。例えば、ライトプローブの片側に明るいライトがあり、反対側にライトがない場合、ライトの強度は後ろ側で “オーバーシュート” します。このオーバーシュートは後ろ側にライトの点を発生させます。

ライトプローブの輪状アーティファクトの例
ライトプローブの輪状アーティファクトの例

これに対処するにはいくつかの方法があります。

  • Light Probe Group コンポーネントで、Remove Ringing を有効にします。Unity は意図しないライトスポットを自動的に取り除きます。ただし、これにより一般的にライトプローブの精度が低下し、ライトのコントラストが低下するため、外観の結果を確認する必要があります。
  • プレイヤーがライトスポットが見える位置に到達できないような位置に、ゲーム内障害物を配置します。
  • ライトプローブに直接光をベイクしないでください。直接光は、鋭い切れ目 (影のエッジなど) を持つ傾向があり、ライトプローブには適しません。間接光のみをベイクするには、混合ライティング を使用します。

ライトプローブの配置

To move, add or remove Light Probes in a Light Probe Group, do the following:

  1. Select the Light Probe Group in the Hierarchy window or the Scene view.
  2. In the Scene view, in the Tools overlay, select the Edit Light Probe Group tool.

ライトプローブグループを編集するとき、ゲームオブジェクトと同様に個々のライトプローブを操作できます。ただし、ライトプローブはゲームオブジェクトではありません。それらは Light Probe Group コンポーネント内の一揃いの点です。

新しいライトプローブグループの編集を開始するときは、下のようなキューブ内に配置された 8 つのプローブから成るデフォルトの配置から始めます。

デフォルトのライトプローブの配置
デフォルトのライトプローブの配置

You can use the controls in the Edit Light Probe Group tool to add new probe positions to the group. The probes appear in the Scene as yellow spheres which you can position in the same way as GameObjects. You can also select and duplicate individual probes or in groups, using the keyboard shortcuts for duplicating (Ctrl+D or Cmd+D), or copying and pasting.

ライトプローブ位置の選択

通常、オブジェクトの表面全体にわたって連続的な解像度を持つライトマップとは異なり、ライトプローブ情報の解像度は、ライトプローブの位置をどれくらい密に詰め込むかによって定義されます。

ライトプローブが保存するデータの量と、ゲームのプレイ中に実行する計算量を最適化するためには、通常、可能な限り少ないライトプローブを配置するのが一般的です。 ただし、ある空間から別の空間へのライトの変化を記録するのに十分なライトプローブを置く必要があります。つまり、複雑なライトやコントラストの強いライトの領域にはライトプローブをより密なパターンで配置し、ライトがあまり変化しない領域では、ライトプローブの間隔を広げて配置します。

シンプルなシーンの周囲に密度の異なるライトプローブを配置
シンプルなシーンの周囲に密度の異なるライトプローブを配置

上の例では、ライトプローブは、コントラストとカラーの変化が大きいビルの近くやビル間ではより密に置かれ、道路沿いはライティングがあまり変化しないので広い間隔で置かれています。

ライトプローブを配置する最も簡単な方法は、それらを規則的な 3D グリッドパターンに配置することです。この設定はシンプルで効果的ですが、必要以上に多くのメモリを消費する可能性があり、余分なライトプローブが多く配置されることがあります。例えば、上のシーンでは、道路に沿って多数のプローブが配置されていれば、リソースの無駄になります。道路の距離によってライトがあまり変化しないので、多くのライトプローブは近隣のライトプローブとほとんど同じライトのデータを格納します。このような状況では、より数の少ないライトプローブで、間隔をあけてこのライティングデータを補間する方がはるかに効率的です。

ライトプローブは個々には大量の情報を保存しません。技術的な観点からいうと、各プローブはサンプルされた点から見たビューの球面的なパノラマの HDR 画像で、球面調和関数 L2 を使用してエンコードされており、27 の浮動小数点値として格納されます。 ただし、何百ものプローブを含む大規模なシーンではそれらが累積することもあり、必要以上に密集したライトプローブでは、ゲームの大量のメモリが無駄になる可能性があります。

ボリュームの作成

ゲームが 2D 平面 (例えば、道路上で走り回る車など) で行われるものであっても、ライトプローブは 3D のボリュームを持つ必要があります。

つまり、点が並ぶ垂直方向の “レイヤー” が少なくとも 2 つ必要です。

下の例で、左の図ではライトプローブは地面の表面だけに配置されています。これでは良いライティングの結果を得られません。なぜなら、このライトプローブからでは感知できる四面体の体積を計算できないからです。

右の図ではライトプローブは 2 つのレイヤーに配置されています。一部は地面の高さに、その他はもっと高い位置にあるため、それらを合わせて 3D のボリュームを形成し、多くの四面体ができます。こちらは良い配置です。

左の図は、ライトプローブの位置選択の悪い例を示しています。プローブによって作られる体積に高さが生じないことがその理由です。右の図は、ライトプローブの位置選択の良い例を示しています。
左の図は、ライトプローブの位置選択の悪い例を示しています。プローブによって作られる体積に高さが生じないことがその理由です。右の図は、ライトプローブの位置選択の良い例を示しています。

リアルタイムのグローバルイルミネーションのためのライトプローブ配置

Enlighten リアルタイムグローバルイルミネーションを使用すると、移動するライトが動的に反射したライトを静的なゲームオブジェクトに投影できるようになります。

ライトプローブを Enlighten リアルタイムグローバルイルミネーションとともに使用すると、移動するライトが、動的に反射したライトを移動するゲームオブジェクトにキャストすることも可能になります。結果として得られるライトの品質は、ライトプローブの配置方法に依存するため、慎重に配置することが重要です。

ライトプローブは、空間内のその位置の間接ライティングを捉えます。ライティング環境を忠実にキャプチャするためには、ライティングのバリエーションが多いと予想されるエリアに、より多くのプローブを配置する必要があります。例えば、移動するライトや多くの遮蔽物 (occluder) があるエリアでは、多くのプローブが必要になることがあります。ライティングのバリエーションがほとんど、またはまったくないエリアでは、配置するプローブの数を少なくしてメモリと計算リソースを節約することができます。

通常、静的ライトがある大きなエリアでは、少数のライトプローブのみが必要です。しかし、この静的ライトのエリア内に移動するライトを設定し、移動するオブジェクトが、移動オブジェクトから正確な反射光を受けるようにしたい場合に、十分な精度を得るには、このエリア内にライトプローブの密集したネットワークが必要です。ライトのサイズと範囲、これらのライトの移動速度、動的ライトを受ける移動オブジェクトのサイズによって、ライトプローブの配置方法が決まります。

ライトプローブの配置のトラブルシューティング

ライトプローブ位置の選択は、ライトプローブが補間されることを考慮して行う必要があります。ライトプローブが適切にシーンのライトの変化を包含しないと問題が発生します。

下の例は、両側に 2 つの明るい街灯があり、中央に暗い領域がある夜間のシーンを示しています。ライトプローブが街路灯の近くにのみ配置され、その間にある暗い領域にまったく配置されない場合、街路灯からのライトは暗い中間領域に “漏れ”、移動するオブジェクトに照射します。 これは、ライトの補間が 1 つの明るい点からもう 1 方の明るい点になっているため、その間の暗い領域についての情報がないためです。

この図は、適切でないライトプローブの配置を示しています。2 つの街灯の間の暗い領域にはプローブがありません。そのため、暗い領域はまったく補間されません。
この図は、適切でないライトプローブの配置を示しています。2 つの街灯の間の暗い領域にはプローブがありません。そのため、暗い領域はまったく補間されません。

リアルタイムライトまたは混合ライトを使用している場合、この問題はあまり目立たないかもしれません。なぜなら、間接ライトだけが暗い領域に “漏れる” からです。完全にベイクしたライトを使う場合に、問題はより顕著になります。なぜなら、このような状況では、動くオブジェクトが受ける直接光もライトプローブで補間されるためです。この例のシーンでは 2 つの街灯がベイクされているので、動くオブジェクトはライトプローブからの直接ライトを受けます。結果を見ると、動くオブジェクト (救急車) は、暗い領域を通過する間も明るく照らされたままです。これは期待した効果ではありません。黄色いワイヤフレームの四面体は、道路の端の明るいところからもう一方の端まで補間が行われていることを示しています。

これは好ましくない結果です。救急車が暗い領域を通る時も明るく照らされたままです。なぜなら、暗い領域にライトプローブが配置されていないためです。

この問題を解決するために、下に示すように、暗い領域にもっとライトプローブを置きます。

シーンでは暗い領域にもライトプローブが配置されています。移動する救急車は、シーンの端からもう一方の端まで移動しながら、暗いライティングを受けます。

今度は、救急車は、意図通りシーンの中心部で暗いライティングを受けます。
今度は、救急車は、意図通りシーンの中心部で暗いライティングを受けます。

LightProbeGroup

ライトプローブ - 技術的な情報
スクリプトを使用したライトプローブの配置