はじめに
VRChat に限らず、Unity や Unreal Engine などで質の良い 3D ワールドを製作する場合、ベイク (光の当たり具合の事前計算) は必須の措置だと思います。
Unity の場合、ベイク機能がデフォルトで組み込まれているのですが、処理時間が長くて効率が悪いため、外部のアセットを使うなどして、時間の短縮を図る方は多いのではないでしょうか?
自分も同じで、ベイクには Bakery と呼ばれる Unity アセットストアで販売されている有料のベイクツールを使用しています。
https://assetstore.unity.com/packages/tools/level-design/bakery-gpu-lightmapper-122218
通常は、Bakery でベイクをするで問題ないのですが、Unity デフォルトのベイク機能を使いたい場合もあります。例えば Realtime GI を活用したい場合です。
Realtime GI を使うと、Emission を有効にしたオブジェクトマテリアルのリアルタイムの変更が、周囲に影響を与えることが出来るようになります。
以下の動画は、その様子を撮影したものです。
この Realtime GI を活用すれば、VRChat の動画プレイヤーの明かりが、室内にリアルタイムに反映される、といったことも出来るようになります。
ただ、この Realtime GI を使う場合、必然的にベイクは Unity 標準のベイク機能を選択しなければならないため、結果的にベイク処理に膨大な時間が掛かってしまい、効率が悪いです。
今回は、この Unity 標準の Realtime GI を使いながらも、同時に Bakery のベイク (Baked GI) も同時に行える方法を紹介しようと思います。
手順
Realtime GI の有効化
- メニューの「Windows」→「Rendering」→「Lighting」を選択
- Lighting ウィンドウで「Realtime Global Illumination」をチェック
Realtime GI の Lightmapper を Enlighten に設定 (Bakery の為に設定)
- メニューの「Edit」→「Project Settings…」を選択
- Project Settings ウィンドウで「Edit」→「Enable Enlighten for Baked GI (Legacy)」をチェック
(※ 注意点あり) - メニューの「Windows」→「Rendering」→「Lighting」を選択
- Lighting ウィンドウで「Lightmapper」を Enlighten に設定
シーン上のオブジェクトの設定
-
ベイクしたいオブジェクトを static に設定
-
Realtime GI 用の光源にしたいオブジェクト (以下、Realtime GI オブジェクトと呼称) を static に設定
-
Realtime GI オブジェクトに適用するマテリアルの「Global Illumination」を Realtime に設定
-
Realtime GI オブジェクトの変化を周囲に伝えるための U# スクリプトを作成して、Realtime GI オブジェクトに適用
// スクリプトの例 using UdonSharp; using UnityEngine; using VRC.SDKBase; using VRC.Udon; public class RealtimeGI : UdonSharpBehaviour { private MeshRenderer _renderer; void Start() { _renderer = GetComponent<MeshRenderer>(); } void Update() { // この行で、Renderer のリアルタイムの更新を周囲に伝えます RendererExtensions.UpdateGIMaterials(_renderer); } }
Bakery の設定
- メニューの「Tools」→「Render Lightmap…」を選択
- ウィンドウ上で「Settings mode」を Experimental に設定
- ウィンドウ上で「Combine with Enlighten real-time GI」にチェック
- 「Render」を選択してベイクを実行
後はシーンのデバッグ実行中に、エディター上で Realtime GI オブジェクトのマテリアルの色を変更すると、周囲に光源の変化が伝わる様子が見られると思います。
お疲れ様でした😊
注意点
今回紹介した方法ですが、1つ気をつけなければならない点があります。
Project Settings ウィンドウでチェックした「enable Enlighten for Baked GI (Legacy)」ですが、これは Unity 2023 以降で廃止予定になる項目のようです。
Enable the Enlighten backend for Baked GI lightmaps. This is a deprecated feature that is no longer available in 2023.1 and later.
この記事を執筆している 2024年10月時点では VRChat 推奨の Unity バージョンは 2022 3.22f1 なので問題は生じないのですが、いずれ Unity のバージョンを上げる必要に迫られたときに「enable Enlighten for Baked GI (Legacy)」が消えることで、Bakery が Enlighten を認識できなくなってしまいます。
Bakery が何らかの対策を行ってくれれば良いのですが、Enlighten との併用機能は Experimental (実験) モードに存在するため、あまり期待できないかなというのが個人的な意見です。
おわりに
今回紹介した方法を使うことで、注意点はあるものの、Enlighten の Realtime GI と Bakery による Baked GI を併用することができました。
以下の動画は、この方法で VRChat で動画プレイヤーを再生した様子を撮影したものです。
動画プレイヤーは最初から Realtime GI に対応しているので、動画プレイヤー自体 (Screen) には、サンプルのスクリプトを適用するだけで済みます。
動画プレイヤーをリアルタイムな光源として活用することで、雰囲気の良い空間を演出することができますね✨
他にも、Realtime GI は色々な応用ができそうです。
今回は、以上です。お疲れ様でした!