Unity: 特定のオブジェクトだけ照らすライト
ATL広尾を再現したVRChatワールドの床に、床がパカッと開く落とし穴を組み込みました。その都合で、Static/非Static、つまりライトマップを利用する床と利用しない床の2パターンの床を用意することになります。
- 開く床部分(A):開く(動く)オブジェクトなので、非Static設定。ライティングはRealtime設定のリアルタイムライトで照らす
- それ以外の床(B):静止オブジェクトなのでStatic設定。ライティングはベイクしたライトマップを使う
結果、ライトマップを反映させると床Bのみ明るく、床Aは暗いままという状態になります。
床Aだけを照らそうとリアルタイムライトを用意しましたが、RealtimeなライトとはいってもStaticな静的オブジェクトにも影響してしまい、画面全体が明るくなってしまいます。
床B部分も非Staticにすれば床Aとの色合いは統一できますが、VRChat用の負荷軽減も考慮して、床BはStatic設定にしておいてライトマップを使っておきたいところ。
結論としては、UnityのLayer機能とライトのCulling Mask機能を活用して、床Aだけに影響するライトを設定し、色を合わせることで対応しました。以下その作業の一部始終を動画にしました。
※手法自体は目新しいことではなく、手順も以下の記事を参考にさせていただいているので、私が重複してこの記事を書く必要もないかもしれませんが、自分用メモ記事として失礼します