ライトプローブをシーンに配置するには、Light Probe Group (ライトプローブグループ) コンポーネントをアタッチしたゲームオブジェクトを使う必要があります。ゲームオブジェクトに Light Probe Group コンポーネントを加えるには、 Component -> Rendering -> Light Probe Group の順に選択します。
シーン内のどんなゲームオブジェクトにでも Light Probe Group コンポーネントを加えることができます。ただし、プロジェクトから誤って削除する可能性を減らすために、新しい空のゲームオブジェクト (GameObject > Create Empty) を作成し、それに 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 は意図しないライトの点を自動的に削除します。ただし、これにより一般的に、ライトプローブの精度が低下し、コントラストが低下するため、結果の見た目を確認する必要があります。 プレイヤーがライトの点を見ることができない位置にゲームの障害物を置く、なども良いでしょう。 直接光をライトプローブにベイクすることは避けてください。直接光は急な不連続性 (シャドウエッジなど) を持つ傾向があり、ライトプローブには不向きです。間接ライトのみをベイクするには、混合ライト を使用します。 動的なゲームオブジェクトを照らすには、ライトプローブの代わりに リアルタイムの GI を使用します。
ライトプローブグループを編集するとき、ゲームオブジェクトと同様に個々のライトプローブを操作できます。ただし、ライトプローブはゲームオブジェクトではありません。それらは Light Probe Group コンポーネント内の一揃いの点です。
新しいライトプローブグループの編集を開始するときは、下のようなキューブ内に配置された 8 つのプローブから成るデフォルトの配置から始めます。
Light Probe Group インスペクターの制御を使用して新しいプローブの位置を加えることができます。プローブはシーン内で黄色のスフィアで表示され、ゲームオブジェクトと同じ方法で配置できます。また、一般的な “複製” のキーボードショートカット (ctrl+d/cmd+d) を使ってプローブを個別、または、グループで選択し複製できます。
ライトプローブの編集が終了したら、ライトプローブグループの編集モードを無効にしてください。そうすることで、通常どおりシーンのゲームオブジェクトを編集したり、移動したりすることができます。
通常、オブジェクトの表面全体にわたって連続的な解像度を持つライトマップとは異なり、ライトプローブ情報の解像度は、ライトプローブの位置をどれくらい密に詰め込むかによって定義されます。
ライトプローブが保存するデータの量と、ゲームのプレイ中に実行する計算量を最適化するためには、通常、可能な限り少ないライトプローブを配置するのが一般的です。 ただし、ある空間から別の空間へのライトの変化を記録するのに十分なライトプローブを置く必要があります。つまり、複雑なライトやコントラストの強いライトの領域にはライトプローブをより密なパターンで配置し、ライトがあまり変化しない領域では、ライトプローブの間隔を広げて配置します。
上の例では、ライトプローブは、コントラストとカラーの変化が大きいビルの近くやビル間ではより密に置かれ、道路沿いはライティングがあまり変化しないので広い間隔で置かれています。
ライトプローブを配置する最も簡単な方法は、それらを規則的な 3D グリッドパターンに配置することです。この設定はシンプルで効果的ですが、必要以上に多くのメモリを消費する可能性があり、余分なライトプローブが多く配置されることがあります。例えば、上のシーンでは、道路に沿って多数のプローブが配置されていれば、リソースの無駄になります。道路の距離によってライトがあまり変化しないので、多くのライトプローブは近隣のライトプローブとほとんど同じライトのデータを格納します。このような状況では、より数の少ないライトプローブで、間隔をあけてこのライティングデータを補間する方がはるかに効率的です。
ライトプローブは個々には大量の情報を保存しません。技術的な観点からいうと、各プローブはサンプルされた点から見たビューの球面的なパノラマの HDR 画像で、球面調和関数 L2 を使用してエンコードされており、27 の浮動小数点値として格納されます。 ただし、何百ものプローブを含む大規模なシーンではそれらが累積することもあり、必要以上に密集したライトプローブでは、ゲームの大量のメモリが無駄になる可能性があります。
ゲームが 2D 平面 (例えば、道路上で走り回る車など) で行われるものであっても、ライトプローブは 3D のボリュームを持つ必要があります。
つまり、点が並ぶ垂直方向の “レイヤー” が少なくとも 2 つ必要です。
下の例で、左の図ではライトプローブは地面の表面だけに配置されています。これでは良いライティングの結果を得られません。なぜなら、このライトプローブからでは感知できる四面体の体積を計算できないからです。
右の図ではライトプローブは 2 つのレイヤーに配置されています。一部は地面の高さに、その他はもっと高い位置にあるため、それらを合わせて 3D のボリュームを形成し、多くの四面体ができます。こちらは良い配置です。
Unity のリアルタイム GI を使うと、静的な景観に対し移動するライトから動的な反射光を投げることが可能です。ただし、ライトプローブを使う場合、移動するゲームオブジェクトが移動するライトから動的な反射光を受けることも可能です。
そのため、ライトプローブは 2 つのとても似通った、しかし異なる機能を持っています。ライトプローブは静的なベイクしたライトを格納し、ランタイムに動的リアルタイムグローバルイルミネーション (GI、または反射光) のサンプルされた点を示し、移動するオブジェクトにライティングの効果を与えます。
したがって、動的な移動するライトを使用していて、リアルタイムの反射光を動いているゲームオブジェクトに対して投げたい場合は、ライトプローブをどこに配置するか、それらをどのように密集させるかの選択に影響を与える可能性があります。
この状況を考慮するときに重要なのは、比較的変化のない 静的ライト の広い領域には、たった 2–3 のプローブを配置するだけで良い場合があります。なぜなら、そのライトは広い範囲にわたり変化しないからです。ただし、この領域内で 動くライト を使用し動くオブジェクトに対して反射光を投げようとようとする場合、この領域内でより密なライトプローブのネットワークが必要になります。そうすることにより、十分高いレベルの正確さでライトの範囲とスタイルを合わせることができます。
どのくらいの密度でライトプローブを配置するかは、ライトのサイズと範囲、移動する速度、反射光を受ける移動オブジェクトの大きさによって異なります。
ライトプローブ位置の選択は、ライトプローブが補間されることを考慮して行う必要があります。ライトプローブが適切にシーンのライトの変化を包含しないと問題が発生します。
下の例は、両側に 2 つの明るい街灯があり、中央に暗い領域がある夜間のシーンを示しています。ライトプローブが街路灯の近くにのみ配置され、その間にある暗い領域にまったく配置されない場合、街路灯からのライトは暗い中間領域に “漏れ”、移動するオブジェクトに照射します。 これは、ライトの補間が 1 つの明るい点からもう 1 方の明るい点になっているため、その間の暗い領域についての情報がないためです。
リアルタイムライトまたは混合ライトを使用している場合、この問題はあまり目立たないかもしれません。なぜなら、間接ライトだけが暗い領域に “漏れる” からです。完全にベイクしたライトを使う場合に、問題はより顕著になります。なぜなら、このような状況では、動くオブジェクトが受ける直接光もライトプローブで補間されるためです。この例のシーンでは 2 つの街灯がベイクされているので、動くオブジェクトはライトプローブからの直接ライトを受けます。結果を見ると、動くオブジェクト (救急車) は、暗い領域を通過する間も明るく照らされたままです。これは期待した効果ではありません。黄色いワイヤフレームの四面体は、道路の端の明るいところからもう一方の端まで補間が行われていることを示しています。
これは好ましくない結果です。救急車が暗い領域を通る時も明るく照らされたままです。なぜなら、暗い領域にライトプローブが配置されていないためです。
この問題を解決するために、下に示すように、暗い領域にもっとライトプローブを置きます。
シーンでは暗い領域にもライトプローブが配置されています。移動する救急車は、シーンの端からもう一方の端まで移動しながら、暗いライティングを受けます。