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

ライトプローブグループ

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

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

Light Probe Group コンポーネント
Light Probe Group コンポーネント
プロパティ 機能
Edit Light Probes ライトプローブグループを変更するには、Edit Light Probes ボタンをクリックして編集を有効にします。これにより、ライトプローブだけを移動し編集できるようになるので、作業が終わったら忘れずに無効にする必要があります。Edit Light Probes を有効にしている間は、Unity のゲームオブジェクトや他の要素を移動、編集することはできません。
Show Wireframe このプロパティを有効にすると、シーンビューにライトプローブグループのワイヤーフレームが表示されます。無効にすると、Unity はライトプローブの点のみを表示し、それらを接続するワイヤフレームは表示しません。
Remove Ringing このプロパティを有効にすると、シーンからライトプローブの輪状アーティファクトが自動的に削除されます。詳細は、このページ後半の 輪状アーティファクト を参照してください。
Selected Probe Position シーン内の選択したライトプローブの X、Y、Z 座標を取得します。このプロパティは読み取り専用です。
Add Probe ライトプローブグループにライトプローブを追加します。
Select All ライトプローブグループ内のすべてのライトプローブを選択します。
Delete Selected 選択したライトプローブをライトプローブグループから削除するには、これをクリックします。
Duplicate Selected これをクリックすると、選択したライトプローブを複製します。

輪状のアーティファクト

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

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

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

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

ライトプローブの配置

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

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

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

Light Probe Group インスペクターの制御を使用して新しいプローブの位置を加えることができます。プローブはシーン内で黄色のスフィアで表示され、ゲームオブジェクトと同じ方法で配置できます。また、一般的な “複製” のキーボードショートカット (ctrl+d/cmd+d) を使ってプローブを個別、または、グループで選択し複製できます。

ライトプローブの編集が終了したら、ライトプローブグループの編集モードを無効にしてください。そうすることで、通常どおりシーンのゲームオブジェクトを編集したり、移動したりすることができます。

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

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

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

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

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

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

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

ボリュームの作成

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

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

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

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

The left image shows a bad choice of Light Probe positions, because there is no height to the volume defined by the Light Probes. The right image shows a good choice of Light Probe positions.
The left image shows a bad choice of Light Probe positions, because there is no height to the volume defined by the Light Probes. The right image shows a good choice of Light Probe positions.

Light Probe placement for real-time global illumination

Enlighten Realtime Global Illumination makes it possible for moving lights to cast dynamically bounced light on static GameObjects.

When you use Light Probes along with Enlighten Realtime Global Illumination, it is also possible for moving lights to cast dynamic bounced light on moving GameObjects. The quality of the resulting lighting depends on how your Light Probes are positioned, and therefore it is important to position them carefully.

A Light Probe captures the indirect lighting at its position in space. In order to faithfully capture the lighting environment, you must place more probes in areas where you expect more variation in the lighting. For example, you may need many probes in areas with moving lights or many occluders. In areas with little or no lighting variation, you can place fewer probes to save on memory and computation resources.

Normally only a few Light Probes are needed in large areas of static light. However, if you plan to have moving lights within this area of static light, and you want moving objects to receive accurate bounced light from these moving lights, you need a dense network of Light Probes within this area to provide sufficient accuracy. The size and range of your lights, how fast these lights move, and the size(s) of the moving objects receiving dynamic light determine how you space your Light Probes.

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

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

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

This image shows poor Light Probe placement. There are no Light Probes in the dark area between the two lamps, so the dark area is not included in the interpolation at all.
This image shows poor Light Probe placement. There are no Light Probes in the dark area between the two lamps, so the dark area is not included in the interpolation at all.

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

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

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

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

The ambulance now takes on the darker lighting in the centre of the Scene, as desired.
The ambulance now takes on the darker lighting in the centre of the Scene, as desired.

  • 2018–10–17 修正されたページ

  • 2017–06–08 公開ページ

  • Remove Ringing2018.3 で追加NewIn20183

  • Light Probes は 5.6 で更新

LightProbeGroup

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