Unity6で使用できる新しいライトプローブ関連機能である「Adaptive Probe Volumes」を使ってみたので、導入とちょっとしたメモなどを軽くまとめてみました!
※ライティング初心者なので、間違っていたことを書いていたらご一報ください...!
挙動を確認した環境
Unity 6000.0.26f1
Adaptive Probe Volumesとは?
そもそもライトプローブって?
空間上の光の情報を一定間隔の情報にして、あらかじめ保持(ベイク)しておく機能です。
この情報を使って、わざわざランタイムで複雑な光を計算しなくても綺麗な環境光が再現できます。
公式:https://docs.unity3d.com/ja/2023.2/Manual/LightProbes.html
(こちらは旧ライトプローブの解説ですが、参考になります)
Adaptive Probe Volumesは従来のライトプローブを扱いやすく、さらに高機能にしたライティング関連機能です。
今までのライトプローブは手動で配置するのが煩雑だったり、精度を高く間接光を取得できないなどの問題がありました。
これを手軽に、精度高く実現できる機能です!
公式の解説なども参考にしてみてください。
(youtube)Unityの新しいライティング機能 Adaptive Probe Volumes
Adaptive Probe Volumesを導入してみる
その前に、自分が試した環境と状況を書いておきます。
よりAdaptive Probe Volumesの効果がわかるように、リアルタイムライトなし(Directional LightのModeをBaked)、影はライトマップに焼き込みます。
- Unity 6000.0.26.f1
- Render Pipeline: URP
- Platform: Android
- Directional Light
- Mode: Baked
- Lighting Settings
- Lighting Mode: Subtractive
- 環境オブジェクトはライトマップを適用
Adaptive Probe Volumesの有効化
Adaptive Probe Volumesを有効にするには、Universal Render Pipeline Asset
(URPの設定)を編集する必要があります。
Lighting -> 「Light Probe System」をAdaptive Probe Volumes
に切り替えましょう。
オブジェクトの配置
次に、オブジェクトを配置しましょう。
これはお好みで...
今回はライトマップも焼こうと思うので、オブジェクトはstaticにしてMesh RenderのReceive Global Illumination
はLightmaps
に設定しました。
ライトプローブの影響を受けるオブジェクトとして、Capsuleを追加しました。
このオブジェクトはデフォルトのLitシェーダがMesh Rendererに指定されています。
最後に重要なAdaptive Probe Volume
コンポーネントを持つGameObjectを追加します。
ヒエラルキーでCreate -> Light -> Adaptive Probe Volume で追加できます。
ModeをScene
にしましょう。
Scene
にするとそのシーンに配置されているMeshの範囲に応じて有効範囲を定めてくれます。
範囲を手動で絞りたい場合はLocal
で編集すると良さそうです。
この時点でAdaptive Probe Volume
に警告が出ているかもしれませんが、次の工程を踏めば消えるはず...です。
Probe Volumesのベイク
次に、Window -> Renderering -> Lighting でライティング設定を表示しましょう。
今回は以下の設定のようにして...Generate Lighting
ボタンを押しましょう!
(補足1:Lighting Modeは目的に応じて設定してください。今回はSubtractive
にしてあります。)
(補足2:上記以外はデフォルトのままになっています。)
少し待つとベイクが完了します。
ウィンドウの右下あたりに進捗が出ていますね(macで確認)。
ベイクできてるかどうか確認
ベイクが終わると、今回はライトマップも焼いているので見た目が綺麗になります。
...が、コレだけだと本当にライトプローブもベイクされているのかわからないので、便利なデバッグ機能を使いましょう。
Window -> Analysis -> Rendering Debugger からツールを開きます。
そして、Probe VolumesタブのDisplay Probes
をチェックして有効化しましょう。
そうすると玉がたくさん表示されるはずです。
このような表示になれば、ライトプローブは正しくベイクできております。
ライトプローブの挙動確認
動的オブジェクトのCapsuleくんを動かして、挙動を確認してみましょう。
ちょっとわかりづらいですが...影の中に入ると色が変わっていますね!
Android環境での注意事項
実際に自身の既存プロジェクトで遭遇したのですが、ライトプローブをベイクしようとすると下記のエラーが発生しました。
こちらは、Player SettingsのGraphics APIにVulkan
を追加すれば解消されました!
おまけ
自身の既存プロジェクトではUnity Toon Shader(現時点の最新版は0.10.2)で使用しようとしたのですが、うまくいきませんでした...
微細な影響はみられたのですが、実用の範囲内ではなく...
正し、従来のライトプローブなら問題なく動作していたので、対応待ち...ということになりそうです。
まとめ
準備が整えば、あとはコンポーネントからのベイクからも行けそうです。
ベイク時間もそんなにかからず、神機能ですね!
略してAPV...この機能が発表された時から心待ちにしていた機能なんですが、なるほどシェーダー側での対応も必要っぽいですね...
Unity Toon Shaderの対応を心待ちにしております...