読者です 読者をやめる 読者になる 読者になる

AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

MeshBakerFreeで町をまとめて結果を比較

Unity

速くするには、もうMeshをまとめるしかない。
ということで、MeshBakerのフリー版を試してみた。有料版は$55でなかなか高い。
無料版はmeshのprefab保存ができないことと、ShaderがDiffuseまたはBumpedDiffuseに制限される。

検証のための素材は、ビルと一軒家を適当にならべた町と道路。

meshBakeなし+Occlusionなし

これはノーマル状態。Occlusionsしてないので、ビルに隠れた一軒家をレンダリングしないみたいなことはないが、カメラに表示されないならレンダリングしないは働いてるみたい。
ローポリモデルだが、バッチ数やSetPassCall数もそれなりに多い
f:id:yasu9780:20170210122507p:plain

meshBakeなし+Occlusionあり

Occlusionベイクしている。建物で隠れる建物をレンダリングしないなどカリングが働いている。
f:id:yasu9780:20170210122513p:plain
ただ、数種類のビルや一軒家を回転させたりして並べてる町なので、一部であっても全体でもバッチ数やSetPass数に差が無い。
カメラに1軒しか家が無いみたいな場合は違ってくるでしょうけど。
間引いている分、ポリゴンの頂点数は減っている。

meshBakeあり+Occlusionなし

meshBakeしてみた。町と道路全体をまとめている。
ただUnityの頂点数制限64Kがあるので、meshは一つではなく三つに分かれている。
テクスチャはアトラス化で一つになっている。

バッチ数は20→9、SetPass数は18→7と半分以下に減少。
ただし、頂点数は大幅に増えている。複数の建物をまとめたので、本来表示しないで良い位置の建物まで表示されているため。
転送するテクスチャなどは減るでしょうが、頂点数が増えるとGPUの仕事は増える。CPUからGPUへの道路混雑は減ったが、GPUの仕事は増えた感じ。

f:id:yasu9780:20170210122518p:plain

meshBakeあり+Occlusionあり

まとめてBakeすると効率が悪いので、町を右と左に分けてBakeした。
カメラ位置的に片方の町しか表示されてない状態。
さらにOcculusionもBakeした。たしかに片方の町が間引かれている。
f:id:yasu9780:20170210122522p:plain

これでバッチ数、SetPass数は少ないまま、ポリゴン頂点数も減っている。
ここでは二つに分けたけど、ブロックで分けるなどするともっと良いでしょう。
基本的に近いオブジェクトをまとめるべきかと思う。

SkyBoxを切ったらSetPassCall1に

f:id:yasu9780:20170210125801p:plain

なんでSetPasCallが1にならないのかと思ってDeepProfiler確認したらSkyBoxの分でした( ゚Д゚)
切ったらバッチもSetPassCallも1になりました。
fpsも40くらい増えた。SkyBox6面体で、描画範囲も広いので侮れない。こっちをまとめる方が先かもしれない。
↑再度確認したら、ShaderがToonShaderだったせい。MobileDiffuseに戻したらfps70台に戻った。
ToonShaderはmobileDiffuseよりもさらにモバイルだった。
↑と思ってもう一度やったら再現しなかった。mobileDiffseもToonBasicも大差なし。unityChanClothだとバッチ2になるので2回描画しているのが分かる。


ほかにも無料のMeshまとめソフトもつかってみたが、テクスチャアトラスで変になった。うまくテクスチャのUVを合わせるなど汎用性を出すのはたいへんみたい。
prefabにはできないけどSceneにはおいておけるので、とりあえずFree版を使おうかな
このmeshBakerは、SkinnedMeshのまとめもできて、boneやWeightを維持すると書いてる。別のモデルの服を着せてまとめれば、服がboneに応じて曲がる?
本当にできるのなら凄い。

フリー版はBakeするときの対応Shaderが制限されているけど、まとめた後にShader変更できるから、そんなに制限になってない気がする。


indie-du.com
kan-kikuchi.hatenablog.com

広告を非表示にする