​​【Unity】Magic Light Probesを使ってLight Probeを自動化しシーンを軽量化しよう!

先日のアップデートで、STYLYにてLight Probe機能が使用可能になりました。
Light Probeは、VRなどで事前にライティングのシミュレーションの計算をしておくことで、リアルタイムに計算する負荷を軽減しシーンを軽量化できる機能です。
この機能を生かしてライティングをリッチにするためのアセット「Magic Light Probes」を紹介いたします。

Light Probeについてのリリースの記事は以下です

Light Probeを使ったシーンのイメージ

実際に、Light Probeを使用すると、以下のようなライティングを表現できます。

以下の動画は、今回の記事で説明するLight Probeを設定したシーンです。
右が設定前で、左が設定後の様子です。
左のシーンは、Light Probeで綺麗に映るようにライトを設定したのちに、Magic Light Probeを用いてLight Probeを設定しています。
ライティングが自然になっていることがわかります。

Light Probeなしのシーン。
ディレクショナルライトの光が直接当たらない場所ではオブジェクトが背景とうまくなじまない。

Light Probeなしのシーン

Light Probeありのシーン。
陰になった場所でもオブジェクトと背景の関節光などがそれぞれ自然にマッチする。

Light Probeありのシーン

具体的には以下のような特徴が反映されています。

  • 間接光などライティングの精度が上がり自然な見た目になっている。
  • 事前にライトのシミュレーションがされておりシーンが軽くなっている。
  • Unityを用いた場合、影の詳細度やレンダリング範囲を調整できる。

特に以下の2つの場面で有効です。

  • シーンの移動するオブジェクトに対し質の高いライティング (間接的な反射光を含む) を行う。
  • 景観にUnityのLODシステムを使用するときに、静的シーンのライティング情報を提供する。

    LODシステムの解説と設置の仕方は以下の記事です


    Magic Light Probesを使ってみよう!

    Light Probeの設定を自動で行ってくれるアセットが「Magic Light Probes」です。

    Light Probeは便利な機能ですが、Light Probeの設定は手間がかかります。
    ライティングのシミュレーションを格納する箇所を自分で設定する必要があるからです。
    複雑なシーンに一つ一つシミュレーションを設定したり、ライティングの強弱や精密さを設定しようとすると、どうしても時間がかかってしまいます。

    そうしたシミュレーションを自動で行ってくれるのがこのMagic Light Probesというアセットです。
    以下の動画を見ると、アセットを使用した場合の見た目の違いがよく分かります。

Magic Light Probesのインストール方法

Magic Light Probesは、以下のリンクよりUnity Asset Storeからダウンロードできます。
設定したいUnityシーンを開いた後、Unity Asset StoreにてAdd to My Assetsを選択し、ダウンロードとインポートをしてください。

Magic Light ProbesをUnityにインポートする際に、以下のようなエラーが出ることがあります。

Assets/Magic Light Probes/Extensions/RaycastCommandMultihit.cs(157,13 : error CS0227: Unsafe code may only appear if compiling with /unsafe. Enable “Allow ‘unsafe’ code” in Player Settings to fix this error.

その場合は、UnityのProject Settingsを開き、PlayerのOther Settingsを開き下の画像の青文字の箇所「Allow `unsafe ` Code」にチェックを入れると解決します。

青字のAllow `unsafe ` Codeにチェック

Magic Light Probesの設定方法

今回は以下のようなオブジェのあるシーンにLight Probeを適用してみます。

こちらの部屋は、Sketchfabよりダウンロードしています。
SketchfabからUnityに簡単にアセットをダウンロードする方法は、以下の記事をご覧ください。

オブジェのあるシーン

Magic Light Probesをダウンロードすると、上部メニューにToolsが追加されます。
そこから、Magic Tools > Magic Light Probes > MLP Manager を選択することで、MLP Managerというウィンドウを開けます。

MLP Manager

このウィンドウを開いたら下の画像の「Add Volume…」というボタンを押します。

Add Volume…

すると、下の画像のように「Magic Tools」というオブジェクトがヒエラルキーに追加されます。
この際、シーンビューの画面中央にオブジェクトが追加されるので、Light Probeを追加したい場所の中央をシーンビューで開いておくと次の設定が簡単になります。

Magic Tools

追加されたMagic Toolsの子オブジェクトに「MLP Group 0 Volume」というオブジェクトがあり、それを選択すると、Light Probeを配置するエリアの設定ができます。

MLP Group 0 Volume

LIght Probeはエリア全体に散らばらせたり、特に照らしたい箇所に集中して配置したりすることでライティングのバランスを整えることができます。

まずは部屋全体にLight Probeを配置してみます。
MLP Group 0 Volumeを部屋全体のサイズに設定します。

MLP Group 0 Volumeを部屋全体のサイズに設定

次に、ヒエラルキーのMLP Group 0を選択し、インスペクターを確認していきます。
インスペクターの「Magic Light Probes(Script)」という欄からLight Probeを計算する設定ができます。

MLP Group 0を選択

まず、Light Probeを設置するエリアの床を設定します。
Drag & Drop Objects Hereという欄に、床になるオブジェクトをドラック&ドロップします。

Drag & Drop Objects Here

床に該当するオブジェクトが無い場合は「Use Volume Bottom」にチェックを入れます。
この設定をした場合、MLP Group 0 Volumeの下部が床の扱いになります。

床として設定するオブジェクトは、ColliderかMesh Rendererが付与されている必要があります。
もしどちらも無い場合は以下のようなウィンドウが出るので、インスペクターからMesh ColliderかMesh Rendererを付与してください。

コライダーかMesh Rendererを持っている必要がある

また、Magic Light ProbesでLight Probeを計算するオブジェクトは、「Static」である必要があります。
Staticなオブジェクトを選択していない場合は、下のようなウィンドウが出ます。

Static設定になっている必要がある

Staticとは静的なオブジェクトであることを示しており、Staticにすることで、リアルタイムな処理とは別に事前に計算を行っておくことができます。
オブジェクトを「Static」にするには、ヒエラルキーで該当オブジェクトを選択し、下記写真のようにインスペクターの右上のStaticにチェックを入れてください。

この際、子オブジェクトだけStaticにしても、親オブジェクトがStatic出ない場合、Light Probeが反映されないので注意してください。

Static

複数の子オブジェクトを持ったオブジェクトをStaticにする場合、最も根の位置にある親オブジェクトをStaticにすると、以下のようにウィンドウのように子オブジェクトをまとめてStaticにする選択ができて便利です。

まとめてStaticに変更

この際に、インスペクターのMagic Light Probes(Script)という欄に、「The main volume contains too many sub-volumes.」というエラーが出ることがあります。
これは、マップが広すぎたり、マップ内に計算するLight Probeの量や密度が高すぎて、計算できないことを示しています。
この場合はインスペクター内の値を調整して計算が可能な値に設定します。

主に使用するパラメーターは以下です。
こちらは、それぞれのパラメーターを理解するより、まず短い時間で計算が処理できる値でLight Probeを配置してみて、その後パラメーターを調整して精度をあげていくのが分かりやすいです。
また、後述しますがMagic Light ProbesのAssetsにはデモシーンが含まれているので、デモシーンの設定の値を参考にすることもできます。

パラメーター名 内容
Probes Spacing Light Probeを配置する間隔を設定します。通常は0.4以上で十分な密度です。
Corners Detection Threshold 計算するオブジェクトのジオメトリの交差を決定する値です。
Corner Probe Spacing ジオメトリの交点に設置するLight Probeの間の距離を設定します。
Distance From Geometry Light Probeがジオメトリからどれだけ離れるかを設定します。
Probes Count Limit Light Probeを設置する上限数を決めることで、計算が重くなりすぎないようにできます。

また、それ以外のパラメーターの詳細や、上記パラメーターを変更する際の影響のGifなどは、こちらで確認できます。 

なお、デフォルトの状態だとDefaultのレイヤーのモデルしか考慮しないので、他のレイヤーも考慮したい場合はMagic Light Probes(Script)のCulling OptionからCollision Detection Layersを変更します。
しかし、STYLYで使用する場合は基本的にDefaultのオブジェクトしか使用できないため、ここではDefaultのレイヤーでオブジェクトを設定します。

ここまでの設定が終わったら、Magic Light Probes(Script)の「Calculate Proves Volume」を選択してLight Probeを配置する計算を始めます。

下記のように計算の前にシーンをセーブすることを推奨されるので、セーブしましょう。
※このウィンドウが出た時に「OK」を選択すると、計算の度にセーブの確認をしてくれますが、Don’t save and don’t ask againを選択すると、都度自分でセーブしなければならないので注意してください。

セーブの確認

計算は下記のようにインスペクター上で進捗が分かります。

インスペクター上に進捗表示

計算が完了すると、以下のようにLight Probeがシーンに配置できました。

Light Probeがシーンに配置された

次に特にライティングを綺麗に見せたい箇所にLight Probeを追加していきます。
先程のように、MLP Managerウィンドウから「Add Volume…」を選択し、集中してLight Probeを配置する箇所にMLP Groupを配置します。

Light Probeを追加

同様に、上記の手順で綺麗に見せたいオブジェクトに集中的にLight Probeを配置することができます。

より集中させてLight Probeを配置

このような設定の参考は、Magic Light ProbesのアセットのExampleで確認できます。
以下のように、デモシーンや、室内シーン、Terainを使った場合や、広い屋外のシーンなどの配置例を見ながら、インスペクターでどのような値を設定しているか確認することができます。

デモシーン


デモシーンのオブジェクト付近


デモシーンのライト付近


terrainなど屋外のデモシーン


建物の内外に設定するデモシーン


広大なデモシーン

STYLYにアップロードしよう!

STYLYにアップロードする場合は、Magic Toolsを含んだプレハブかシーンをアップロードする必要があります。
Magic Toolsを含まずにアップロードすると、Light ProbeがSTYLY上で反映されないことにご注意ください。

Magic Light Probesの使い方の説明は以上です。
特に動的なオブジェクトへのライティングが軽く綺麗になるので、そうしたシーンで利用してサクサクでリアルなシーンをぜひ作ってみてください!

STYLYにアップロードする方法

3DモデルをSTYLYにアップロードしてみましょう。

STYLYアカウントを作成する

アカウント作成方法

STYLYにアップロードする方法

UnityからSTYLYにアップロードする方法

STYLYに関する質問、バグ報告、改善してほしい要望はSTYLY FORUMまで
https://jp.forum.styly.cc/support/discussions