【Unity5でレースゲーム】車体の下に影を付けて接地感を向上
現在作成中のカーレースゲームですが、建物の影の中に入ると車の影が見えなくなり、下の写真のように接地しているのかいないのか良くわからないのが気になっていました。
現実の世界では車の下は影の中でもさらに暗く見えるはずです。これはアンビエントオクルージョンと言う方法を使ってCGで再現できるらしいです。
参考:
ambientocclusion.hatenablog.com
UnityのスタンダードアセットにSSAO(Screen Space Ambient Occlusion)をするためのスクリプトがスタンダードアセットのEffects>Image Effects>Scriptsの中に用意されているので、早速メインカメラに取り付けて走らせてみました。
確かに車の下に影が付いていい感じになったのですが、フレームレートがずいぶん下がってしまいました。
SSAOを掛けないときは48fpsでした。
SSAOを掛けると36fpsに下がってしまいました。
さらに悪いのが、意図せぬところに影ができてなんだか画面が汚くなってしまった事です。
路面に描かれた矢印やラインの周囲に汚い影ができてしまっています。これは元々街のモデルに隙間があるのが原因なのでSSAOが悪いという訳ではないのですが、見た目が良くありません。普通の影も同じようになるのですが、これらのオブジェクトのMesh RendererのCast ShadowsをOFFにしてごまかすことが可能です。
TravelShooting JPのように影のオブジェクトを車の下に置くことも考えましたが、調べてみるとUnityにはBlobShadowProjectorという便利な物がある事がわかりました。影の投影装置ですね。
これを車オブジェクトの子オブジェクトにして、車の真上に置いて下を向ければOKです。
こんな感じの設定にしてみました。
車の影の形は四角い方がしっくり来るのでClip Studio Paintで四角を描いてガウスぼかしを掛けてこのようなCookie用テクスチャーを作りました。
車のオブジェクトに影が落ちないように車のボディにCarBodyというレイヤーを与え、Ignore Layersパラメーターで無視するようにしています。
Near Clip Plane とFar Clip Planeパラメーターで影の濃さや車が地面から離れたときの影の薄くなり方を調整する事ができるようです。
一番最初の絵にBlobShadowProjectorで影をつけるとこうなりました。
車が宙に浮くにしたがい影が薄くなって行きます。いい感じになるようにNear Clip PlaneとFar Clip Planeパラメーターを調整しました。
Blob shadowを付けたときのフレームレートはどうでしょう。
影を付けていないときと同じ48fpsでした!
また、車の下以外のところに影は付きませんので画面が汚くなる事はありません。
今回の動画です。
https://itunes.apple.com/jp/app/toraberushutingu-retorona/id917570972?mt=8&uo=4&at=10laCt
https://itunes.apple.com/jp/app/beecluster-wu-liaono-zongsukurorushutingugemu/id663801586?mt=8&uo=4&at=10laCt