ゆるロボ製作所開発事例 – ドローコール削減

Post on 27-Jun-2015

25062 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

Transcript

第5回 渋谷Unity技術勉強会

ゆるロボ製作所開発事例 – ドローコール削減技 n 連発!

株式会社ゲームポット スマートフォン開発部

吉谷幹人

自己紹介

■吉谷幹人(ヨシヤミキト)と申します

■ゲームポットでモバイル向けアプリを開発してます ・ソーシャルゲームの開発に関わったり ・社会人2年目奮闘中

■Unity使い始めて半年 ・3Dゲームの開発経験はまったくありませんでした

■開発事例アプリ「ゆるロボ製作所」について

■ドローコール削減について

■デザイナ巻き込んだスクラム開発の話

今日お話すること

ゆるロボ製作所

・ロボ生産マシンに材料と燃料をセット ・経過時間に応じてロボが製造 ・図鑑コンプ目指す

■放置系キャラコンプゲーム

■傾けて出荷

■ゆるカワ3Dキャラ

・ロボを転がしてベルトコンベアに

・30体固有アクション

ゆるロボ製作所

■完全無料 ・AdMobの広告のみ

■リリース3日でApp Store ゲームカテゴリ(無料)1位

ゆるロボ製作所

■Google Play ゲームカテゴリ(無料)1位

デザイナ巻き込んだスクラム開発

■開発手法としてスクラムを利用 ・アジャイル開発の一種 ・変化に柔軟に対応できる ・短期間の開発(スプリント)を何回もまわす ・スプリントごとにプレイ可能なゲームを作る

スクラムで開発

■開発体制 ・PM(スクラムマスター):1人 + 補佐1人 ・デザイナー:メイン1人、3Dキャラヘルプ1人 ・プログラマ:1人

■期間 ・プロトタイピング:2週間 ・製品版:2ヶ月(4スプリント)

体制

・小規模、開発人数が少ない ・必要な要素のみ利用

■厳密なスクラムではない

■実践したこと ・プロダクトバックログでユーザーストーリー管理 ・ストーリーポイントでの見積もり ・重要度による優先作業の明確化 ・デイリースクラム(朝会)の実施 ・タスクボードで進捗確認 ・スプリント最終日でデモ、KPTで振り返り × タスク分解、バーンダウンチャート (効果よりオーバーヘッドのほうが大きいと判断)

スクラムで開発

■NGUI ・EZ GUIがEasyじゃないって何回も聴かされた ・他と比較した結果、使いやすさ・パフォーマンスが良かった

使用したプラグインなど

■全員が常にUnity上で最新版を確認 ・デザイナにもバージョン管理システム(Git)使ってもらった

デザイナにもUnity使ってもらった

■素材の受け渡し・適用のオーバーヘッドゼロ ・デザイナが素材をUnityにプロジェクトに追加 ・位置や細かいパラメータはデザイナが微調整

プログラマ

よくある開発の流れ

デザイナ

仮の素材でUI実装 素材作成

素材Unityに取り込み

素材組み込み

微調整

UIイメージ作成

朝会などで確認

UIイメージチームで共有

フィードバック適用 フィードバック適用

Gitで反映

・基本システムの実装 ・ロボ企画、3Dモデル(6体) ・ミニマムで遊べる状態

■ スプリント1

■ スプリント2 ・チュートリアル ・ロボ行動ロジック ・ロボデザイン、3Dモデル(30体)着手

各スプリント内容

■ スプリント3 ・広告の差し込み ・UIのブラッシュアップ ・ロボ3Dモデル完成(30体)

■ スプリント4 ・ソーシャルメディア投稿機能 ・ゲームバランス調整 ・社内テストフィードバック適用(3回)

各スプリント内容

■とにかく速い ・調整にかかるコストが減った

デザイナと一緒にUnity使ってスクラム開発して

■スプリントごとにブラッシュアップが楽 ・新しいUIの追加や改修が柔軟にできた

■各々の知識を補えた ・プログラマ(私)が全然グラフィック・3Dの知識ない

ドローコール削減

■ いろんなキャラをたくさん歩かせる

■いろんな機種でも対応させたい ・Android ・iPhone 3GS

ゆるロボのゲームとしての要件

・15体ぐらいはわらわらさせたい

■ いろんなキャラをたくさん歩かせる

■いろんな機種でも対応させたい ・Android ・iPhone 3GS

ゆるロボのゲームとしての要件

・15体ぐらいはわらわらさせたい

ドローコール減らす戦い

■描画命令を送る回数

■コール数減らせばFPSが上がる

ドローコール数とは

■GameペインのStatsから見れる

■ 目安(iPhone4に関して)

■ドローコール20を目標にした

・200コール:15fps ・100コール:30fps ・50コール:60fps

実際のドローコール目標値

・低スペックマシンでの動作も想定

■ キャラ:32コール

ゆるロボを何も考えずにつくると

■ 背景:3 - 5コール

・ロボ15体:15コール ・ねじこ(アシスタント):1コール ・影16体分:16コール

■ GUI:40 – 50コールくらい?

■ ロボ製造マシン:1コール

■ キャラ:32コール

ゆるロボを何も考えずにつくると

■ 背景:3 - 5コール

・ロボ15体:15コール ・ねじこ(アシスタント):1コール ・影16体分:16コール

■ GUI:40 – 50コールくらい?

20コールとか余裕でオーバー!

■ ロボ製造マシン:1コール

オーバーする主原因は?

■Blob Shadow Projector1つで1コール

■スキンメッシュオブジェクト1つで1コール

■OnGUIの呼び出し

・影の投影

・ボーンアニメーションが入ってるオブジェクト

・UnityデフォルトのGUI処理系 ・ボタン表示等で1コール:OnGUI.Button();

改善法1:Blob Shadow Projector使わない

■非スキンメッシュの影ポリを足元に配置

■注意:なるべくRayは飛ばさない ・地面の位置測定につかいたくなる ・Updateで行うと割と高負荷 ・通常は固定値、必要になったら飛ばすなど

・同じマテリアルならバッチ化され1コール

■背景オブジェクト全部まとめた

改善法2:スキンメッシュオブジェクトをまとめる

・全部ひっくるめて1コールに

■アニメーションはスクリプトで動かす ・出荷口の開く・閉じる ・ベルトコンベア ・工場のガジェット(歯車など)

■パネルをまとめる

改善法3:NGUIをうまく使う

・UIPanelごとにコールされる ・GameObjectでグループ構造作って一つのパネルに

■テクスチャをまとめる ・テクスチャ(アトラス)ごとにコールされる ・UIもフォントも一枚(1024x1024)におさめた

■NGUI ・ドローコールを減らすためのポイントがある

■動かさないオブジェクトはStaticをOnに

■スカイボックスを利用しない

・Static Batchingの対象にする

その他

・もし空を表現する場合は半球にテクスチャ張って代用

■Dynamic Batching分断に注意 ・Transform.scaleが(-1,1,1) と(1,1,1)の物 ・Renderer.receiveShadowsの設定が違う物

を交互に配置しない

■ キャラ:17コール

n連発の結果

・ロボ15体:15コール ・ねじこ(アシスタント):1コール ・影16体分:1コール

■ 背景:1コール

■ NGUI:1コール

■ ロボ製造マシン:1コール

■ キャラ:17コール

n連発の結果

・ロボ15体:15コール ・ねじこ(アシスタント):1コール ・影16体分:1コール

■ 背景:1コール

■ NGUI:1コール

■ ロボ製造マシン:1コール

20コール達成!

まとめ

■デザイナにもスクラムとUnity使ってもらった ・オーバーヘッドが激減 ・ブラッシュアップが意欲的・柔軟にできる

■ドローコール減らすのが高速化の鍵 ・バッチ化でコールをまとめる ・スキンメッシュオブジェクトに注意 ・NGUIいいね

まとめ

おわりです

top related