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

ライトプローブグループ

ライトプローブをシーンに配置するには、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 のボリュームを形成し、多くの四面体ができます。こちらは良い配置です。

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

動的 GI のためのライトプローブの配置

Unity のリアルタイム GI を使うと、静的な景観に対し移動するライトから動的な反射光を投げることが可能です。ただし、ライトプローブを使う場合、移動するゲームオブジェクトが移動するライトから動的な反射光を受けることも可能です。

そのため、ライトプローブは 2 つのとても似通った、しかし異なる機能を持っています。ライトプローブは静的なベイクしたライトを格納し、ランタイムに動的リアルタイムグローバルイルミネーション (GI、または反射光) のサンプルされた点を示し、移動するオブジェクトにライティングの効果を与えます。

したがって、動的な移動するライトを使用していて、リアルタイムの反射光を動いているゲームオブジェクトに対して投げたい場合は、ライトプローブをどこに配置するか、それらをどのように密集させるかの選択に影響を与える可能性があります。

この状況を考慮するときに重要なのは、比較的変化のない 静的ライト の広い領域には、たった 2–3 のプローブを配置するだけで良い場合があります。なぜなら、そのライトは広い範囲にわたり変化しないからです。ただし、この領域内で 動くライト を使用し動くオブジェクトに対して反射光を投げようとようとする場合、この領域内でより密なライトプローブのネットワークが必要になります。そうすることにより、十分高いレベルの正確さでライトの範囲とスタイルを合わせることができます。

どのくらいの密度でライトプローブを配置するかは、ライトのサイズと範囲、移動する速度、反射光を受ける移動オブジェクトの大きさによって異なります。

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

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

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

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

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

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

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

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

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

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

  • 2017–06–08 公開ページ

  • Remove Ringing2018.3 で追加NewIn20183

  • Light Probes は 5.6 で更新

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