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ステートキャッシュを使っていない
⇓
ステートキャッシュを使うように修正