ウーパの手習い

Unity,Blender,SubstanceDesigner&Painter,ZBrush,WindowsMRを手にした状態。ATL広尾の客員研究員に登録して、いろんな機材を堪能中!

Unity: 特定のオブジェクトだけ照らすライト

ATL広尾を再現したVRChatワールドの床に、床がパカッと開く落とし穴を組み込みました。その都合で、Static/非Static、つまりライトマップを利用する床と利用しない床の2パターンの床を用意することになります。

  • 開く床部分(A):開く(動く)オブジェクトなので、非Static設定。ライティングはRealtime設定のリアルタイムライトで照らす
  • それ以外の床(B):静止オブジェクトなのでStatic設定。ライティングはベイクしたライトマップを使う

結果、ライトマップを反映させると床Bのみ明るく、床Aは暗いままという状態になります。

f:id:uuupacom:20180503170721p:plain

ややこしいですが、画像中でA,B,C,Dと書かれている領域が、開く床部分である「床A」です

 

床Aだけを照らそうとリアルタイムライトを用意しましたが、RealtimeなライトとはいってもStaticな静的オブジェクトにも影響してしまい、画面全体が明るくなってしまいます。

床B部分も非Staticにすれば床Aとの色合いは統一できますが、VRChat用の負荷軽減も考慮して、床BはStatic設定にしておいてライトマップを使っておきたいところ。

結論としては、UnityのLayer機能とライトのCulling Mask機能を活用して、床Aだけに影響するライトを設定し、色を合わせることで対応しました。以下その作業の一部始終を動画にしました。

youtu.be

※手法自体は目新しいことではなく、手順も以下の記事を参考にさせていただいているので、私が重複してこの記事を書く必要もないかもしれませんが、自分用メモ記事として失礼します

Unity3D:ライトを特定のオブジェクトのみに当てる - devlog [naru design]