テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

ライトを複数置いた時の問題

ライティングは、Unityのゲームを手っ取り早くハイクォリティに見せる為の手段の一つだと思う。

キャラクターに影が付けば難しい事をしているように見えるし、
何より3Dと世界が巧くマッチするので、3D特有の安っぽさが消える。

と、調子に乗って一杯ライトを置きまくったら、反映されないライトが出てきた。

どういうこっちゃ。

スクリーンショット 2012-05-29 22.25.01
MOBは消毒だー

■反映されないライト

まずコイツを見てほしい。

下の絵は、ライトを持った主人公・dRobot-X(仮)が、大怪獣CaveWorm(仮)に
一歩近づいたときに起こる現象である。

スクリーンショット 2012-05-29 22.19.55 スクリーンショット 2012-05-29 22.20.09

おわかりただけただろうか。
どうも他のライトの範囲内に入るとライトが消えてしまう現象が起こるらしい。

これは街灯のような、一定間隔で並んでいるライトでも発生する現象らしく、
初期段階の試作品では「懐中電灯が勝手に消える」現象が多発した。

敵側がスポットライトを持って歩いていると、プレイヤーが持っているライトが勝手に消える等の
現象も起こっていて、中々に面倒くさい。

ちなみにこれは、昨日の【PlayMakerの使い方 その1】で紹介したデモで確認できる。

■問題の解決法?

この問題の手っ取り早い解決方法は、
[Rendering]の[Pixel Light Count]を増やす事。
(初期値は2)

多分、ピクセルライトなる物は1画面に使用出来る数を制限されていたんじゃないかと。

ちなみにピクセルライトは、多分動的なライトの事で、
ライトマップにベイクしないスポットライトとか、ポイントライトの事だと思う(勘)。

スクリーンショット 2012-05-29 22.44.08 スクリーンショット 2012-05-29 22.44.39

フゥーハハハ、これで解決!

残念、ところがどっこい夢じゃありませんギッチョンチョン。

■ライトとパフォーマンス

Unityの最適化】を見る限り、ピクセルライトボトルネックになるモノらしい。

Simple Checklist to make Your Game Faster(ゲーム高速化のチェックリスト)にも、
Do not use Pixel Lights when it is not necessary (必要無ければピクセルシェーダは使うな)とのお達しが。

要するにライトはあんまり増やせない。

ならば他の方法は無いものかと探してみたところ、
Unity Asia Bootcamp Tour Tokyo レポート その3】によると、
デファードライティングならばライトを複数用意してもレンダリングコストが一定になるらしい。
デファーとライティングの詳しい説明(Unityのドキュメントからリンクしてた)
Deferred lighting approaches

ならばデファードライティングを使えば良いじゃんと思ったら、
Deferred Lighting Rendering Path】によると
it is not currently available on mobile platforms(モバイルじゃ動かん?)の上、Pro専用らしい。

むむむ。
やっぱライトマップかなあ


ちなみに、「凶悪怪獣CaveWorm(仮)」は【FT CaveWorm】って無料のアセットモデル。
このクォリティで待機/移動/攻撃/やられモーションも付いている優れもの。

そのうちモデル系のアセットは、まとめて紹介したいなあ。