KanikamaGIはVRChatでの使用を想定した、ライトマップをランタイムで更新する仕組みです。
動作環境
- Unity2019.4.29f1
- VRChat SDK3
- MerlinVR/UdonSharp
使い方
動作確認用ワールド
特徴
- Udonを使っているのでVRChatで動きます。
- UnityのRealtimeGIを使用しないため、高負荷でも(多分)止まりません。
- 毎フレーム更新できます。
- 通常の静的なGIと併用できます。
- StanardシェーダーにKanikama機能を追加したシェーダーが入っています。
- Directionalモードに対応しています。
残念なところ
- 光源の数だけライトマップの枚数が増えるため、ワールドの容量が大きくなります。
- ライトプローブの動的な更新はできません。
- Bakery未対応(いつか対応します)
光源として使えるもの
- ライト
- Baked、Mixedに対応しています。
- 発光マテリアル
- StandardシェーダーのEmissionに対応しています。
- 環境光
- Ambient Lightの明るさと色を変えることができます。
- モニター
- 画面を最大で16個のマスに分割して、それぞれを発光マテリアルをつけた板ポリとして扱うことでGIに映像を反映します。
仕組み
- 事前に光源の数だけライトマップをベイクします。
- ランタイムではUdonとシェーダーを使って、ベイクした複数のライトマップを合成し、RenderTextureに出力します。
- RenderTextureは事前にGIを反映されたいオブジェクトのマテリアルに配っておくので、ライティングが更新されます。
仕組み自体はよく知られており、新しいものではありません。KanikamaGIの開発では以下を参考にしました。
- 無 解説 - Imaginantia
- ProjectCiAN 制作記|wata_pj|note
- リアルタイムレンダリング 第4版 11章
また、開発では以下のリポジトリとアセットにお世話になりました。
LICENSE
MIT
Links
- KanikamaGI Discord
- https://twitter.com/shiva_duke28 (my twitter)
- pull requests will be very wellcomed <3