circle-loader
by
709/ 1

みなさん、こんにちは。こちらはUWA Technologies(略称UWA)です。今日は「あなたのモバイルゲーム開発の最適化時間を数ヶ月節約する方法」について、可能の解決策を提供したいと思います。去年のCEDEC 2019にご参加した皆様にはイメージがあるかもしれませんが、知らない人々に弊社または弊社の製品を紹介したいと思います。


UWAとは

UWA Technologiesは、モバイル/VR/ARなど様々なゲーム開発者向け、パフォーマンス分析と最適化ソリューション及びコンサル ティングサービスを提供している会社です。

UWA Technologiesが提供している「UWAローカル分析ツール」と「オンラインソ リューション」は、中国でTencent、Neteaseから始め、2,500以上の開発チーム、3,000以上のプロジェクトに採用され、実機に基づいたパフォーマンステストレポートが開発のボトルネックをより簡単に解決でき、中国のゲーム業界の急発展に大きく寄与しました。

「Make it Simple」という企業理念に基づいて、弊社は今後、日本でも製 品やサービスを展開し、皆様と共に日本のゲーム業界の発展に貢献できる ように一生懸命努力してまいります。

弊社のクライアント

弊社が成立した5年間にたくさんのゲーム会社や開発チームとの合作経験があります、最適化の速さとサービスの良いさによく高評価させております。下図に中国での名作ともう日本に登録した作品をいくつ例としてあげますので、この中に皆様がご存知しているプロジェクトはありませんか。

私たちの経験

弊社が成立されたばかりの時、市場を占めているモバイルゲームはほぼカードRPGであり、シーンも小さくて、ちょっとシンプルなものでした。

その後、アクションRPG、MOBA、MMORPGなども増えてきました。

現在、もっと複雑なゲーム、例えばオープン・ワールド・シューティングやオープン・ワールド・サンドボックスは大人気になりました。

見られやすいのは、過去の4年間に、モバイルゲームは複雑になり、2Dから3D、小さなシーンから大きなシーン、プレイヤーが少ないから多くなります……最適化も重要になります。

これは弊社のデータベースにおけるモバイルゲームのパフォーマンス傾向です。上の線はRedmi Note2でのCPUコストです、ローエンドモデルの代表と認められます。下の方はSamsung S6でのデータで、ミドルローエンドモデルの代表と認められます。

約3年前のCPUコストはとても高いと見られます。ただし、2017年以降、ゲームが複雑になってきましたが、CPUコストは下がっています。これは「モバイルゲームのパフォーマンスはだんだん良くなっている」という意味です。2,000以上のゲームからこのデータを得ましたから、もしかしたら、これはモバイルゲーム史上初めての大規模な「全体的なパフォーマンス上昇」かもしれません。

そのため、市場競争から取り残されないように、質の良いゲームを作ることが重要になっています。


UWA GOT とは

GOTはGame Optimization Toolkitの略称で、Unityアプリのプロファイリングを行なう商用ツールです。UWA GOTを使って、テストプロジェクトの各種データも使っている関数も直接にグラフやリストで見られます。何処かに悪いパフォーマンスや問題を起こす可能性があれば、ヒントもさせ、可能の解決策も提供します。ゲームの開発と最適化に役に立ちます。

UWA GOTは「Rendering」、「UI」、「Loading」と「Memory」4つの方面を分析でき、全方的にプロジェクトのパフォーマンスを検査します。


レンダリング

レンダリングのパフォーマンスに対して、問題の鍵は透明レンダリング不透明レンダリングに集めています。下図のように、透明レンダリングは総体の約50パーセント(赤枠)、不透明レンダリングは約37パーセント(青枠)を占めています。二つともにUWA GOTレポートに毎フレームのCPUコストが詳しく見られます。


レンダリング最適化のボトルネック、ドローコール三角形数もレポートに顕示されます。

ドローコールを最適化する最も一般的な方法は、ドローコールのバッチ処理です。 詳細はUnityマニュアルをご覧ください、こちらには説明しません。ここでシェアしたいのは、二つの実際によく遭う「ドローコールのバッチ処理を影響する」問題です。

1つ目はMaterial instanceです。 この画像では、木と草がバッチ処理されていないことがわかります。 どうして? 右側のインスタンスマテリアルは原因になります。マテリアルは同じように認めますが、Unityはそれらを異なるものとして処理するため、バッチ処理できません。インスタンスマテリアルを生成しないために、Material Property Blockを使用してMaterialパラメータを変更する必要があります。また、大量の草、木や石のある場合、レンダリングにはGPUインスタンスを使う必要があります。 ドローコールを減らすためには非常に便利です。

2つ目は、異なるLightmapです。 ゲームオブジェクトが異なるライトマップに属している場合もバッチ処理できません。例えば、このプロジェクトには24のライトマップがあり、解像度は512 x 512です。したがって、1024 x 1024でライトマップをリベイクし、ライトマップ数は6になるため、バッチ処理が大幅に改善されます。

三角形については、単純化する必要があります。このスクリーンショットでボトルネックがすぐ見られます。こちらの三角形数は非常に多いです。 カメラがLandから遠く離れているのがわかります。ですから、カメラにはより多くのゲームオブジェクトを捕まれています。 それが原因です。ここではMeshLab、SimplygonまたはUnity LOD gourpなどのLOD(Level of Details)で三角形を単純化でき、役に立ちます。

スキンメッシュの最適化方法も同じです。ドローコールを最適化し、三角形を単純化してください。

UWA GOTレポートでは、どのスキンメッシュに頂点と三角形が多いかを表示でき、開発者が迅速に最適化できます。


プロジェクト《キワミ》では、武将たちの三角形はすべて1500未満です。だからローエンドモデルでも、レンダリングコストはとても低いです。

また、GPUスキニングとGPUインスタンス化を使って、ドローコールを最適化し、CPU計算をGPUに変えることもできます。こちらに2つの便利なオープンソースプロジェクトをお勧めします。

https://github.com/Unity-Technologies/Animation-Instancing

https://github.com/chengkehan/GPUSkinning

最後に最適化する結果を見でください。UWA GOTを使って、40日間の最適化処理後、CPUコストは8.2から6.2に減少しました。


UWAおよびUWA GOTについてもっと了解したい場合には、UWA公式サイトに移動してください。
UWA GOTを使っていたnowsprintingさんも自身のブログでUWA GOTについて詳しく説明してしましたが、興味があれば「やらなイカ?」に移動してご覧ください。


UWA公式サイト:https://jp.uwa4d.com

UWA公式ブログ:https://blog.jp.uwa4d.com

UWA公式Q&Aコミュニティ(中国語注意)https://answer.uwa4d.com