【Unity5でレースゲーム】フレームレートアップのため高速化にチャレンジ
前回、フレームレートを表示してみて、ちょっとレースゲームとして物足りない20fpsという事が判明しました。
フレームレートが一番きついスタート後のストレートで測定した値です。
前回の記事:
tf.hateblo.jp
20fpsという値は低いとは言え、サターン用デイトナUSAが20fpsだったので遊べなくはないレベルではあります。
専用チップをカセットに搭載し、毎秒9000ポリゴン表示を可能にしたメガドライブ版バーチャレーシングは15fps(参考:IQGamer: Retro Tech Analysis: Virtua Racing (MD vs 32X))でポリゴンもガックガクでしたが当時はそんな事は一切気にならず、大喜びで遊んでいました。
さて、高速化についてですが、まず試したのが街のオブジェクトのスタティック化です。
街全体を選択した状態でインスペクター右上のStatic右側の三角印をクリックしてBatching Staticにチェックを入れます。
普通にStaticの左側のチェックボックスをチェックするとパソコンのCPU負荷が100%の状態で何10分待っても処理が終わらないのであきらめました。
これだけでフレームレートが10fps向上し30fpsになりました!
次はオクルージョンカリングに挑戦してみます。
街のオブジェクトのOccluder Staticにチェックを入れ、Occlusion Culling画面の設定はデフォールトのままでBakeして見ました。これだけでオクルージョンカリングが有効になります。
無効にするにはカメラのOcclusion Cullingのチェックを外せばOKです。
早速試してみます。
約33fps.... 期待したほどの効果はありませんでした。
というのも、この場面では除外されるオブジェクトがそれほど多くないためです。
オクルージョンカリングがOFFの時に描画されるオブジェクトはこんな感じです。
ONにすると画面左側の三角形の領域と画面右下の部分のオブジェクトが減っていますが、トータルで見るとそれほど減っていません。
最後に、Edit > Project Setting > QualityでV Sync CountをDon't Syncにしてみました。
48fpsとかなり向上しました。ただ、V SyncをOFFにするとコーナーリング時など画面が激しく左右に動くときに若干画像が乱れることがあります。
オクルージョンカリングの話に戻りますが、オクルージョンカリングがONのとき、木のオブジェクトのような透明部分があるオブジェクトの向こう側のオブジェクトが表示されないことに気がつきました。
木の根元に車を寄せたとき、オクルージョンカリングOFFのとき見えていた遠景が、ONにすると消えてしまいます。
OFFのとき
ONのとき
木は本当は巨大な四角いポリゴンでできているのですが、透明部分があるテクスチャーにより木の形に見えます。
そして、木を四角いポリゴンとして扱ってしまうため奥のオブジェクトを非表示にしてしまっているようです。
これは影についても同様で、木の根元の何もない空間に影が落ちたり、逆に木の影が四角になったりするのがずっと気になっていました。
そして、ようやくこれらを一気に解決する方法がわかりました。
WalkRoadの子オブジェクトのwalk_block_Aからwalk_block_IにTransPという文字が含まれているマテリアルが3つあり、su_Double_Clipというシェーダーが設定されているのですが、これをNature/Tree Soft Occlusion Leavesに変更すると、あらま、影は綺麗な木の形になりました。
そして、一旦Occlusion Cullingの設定でClearしてから再Bakeすると、オクルージョンカリングがONでも木の向こうのオブジェクトが正しく表示されるようになりました。
そして、何故かガードレールのデザインも表示されるようになりました。
シェーダーを元に戻すとこうなります。
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