1. FINAL
FANTASY
Record
Keeper
cocos2d-?‐xレイヤーの最適化
株式会社ディー?エヌ?エー
Japanリージョン
ゲーム事業本部
技術?編成部
開発基盤グループ
惠良良
和隆
kazutaka.era@dena.com
Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
10. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
つまり???
全く最適化されていない???orz
11. 最適化?方針
! CBT終了了から正式リリースまで時間的余裕は無い
! 出来る限りリスクが低いコード修正に絞りたい
? 複数プランを出し、?手軽で効果の?高そうなものから着?手
! ?大規模なデータ改修は避けたい
! ベンチマークとなる端末(iOS、Android)を決める
? iOS:iPhone4S
? Android:Galaxy
S2(Android2.3系のもの)
Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
! 最適化作業はiOS端末で?行行う
? Androidに?比べてプロファイラが充実している
? ネイティブコードのデバッグのし易易さ
12. 最適化?手順
1. コンパイラによる最適化が有効なビルドを準備
2. プロファイラで情報収集(Xcode、Instruments)
3. ボトルネックの候補を抽出
4. 負荷原因を調査
Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
a) コードを?見見て推測
b) 推測を元にコード修正
c) パフォーマンスの変化をチェック
5. 正式なコード修正
6. 1.に戻る
31. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
ありえないほど多い描画パス
諸悪の根源:マスクノード
32. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
ありえないほど多い描画パス
! マスクノードとは?
? ?自?身の?子孫ノードをテクスチャに描画し、
そのテクスチャに対してαマスクを適?用する独?自拡張ノード
! 便便利利なので???と多?用された結果、描画パスが20に!
マスクノード禁?止令令発令令!!
本当に必要なところでしかマスクノードは使わない。
バトル画?面で使われているものは、
マスクノードでなくても良良いものだった。
これらを削ることで、描画パスは1になった。
33. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
無駄なOpenGL
ES
API呼び出し(DrawCall以外)
34. Copyright
(C)
DeNA
Co.,Ltd.
All
Rights
Reserved.
無駄なOpenGL
ES
API呼び出し(DrawCall以外)
問題となっている箇所は全て独?自拡張したコードで、
cocos2d-?‐xのOpenGLステートキャッシュを使っていない
?
ステートキャッシュを使うように修正