cocos2d-x 最新事情 - SQUARE ENIX€¦ · cocos2d-x v3.x誕生の理由 cocos2d-iphone...

Post on 31-Aug-2020

6 views 0 download

Transcript of cocos2d-x 最新事情 - SQUARE ENIX€¦ · cocos2d-x v3.x誕生の理由 cocos2d-iphone...

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

cocos2d-x 最新事情

〜 v3.xの魅力お教えします 〜

第9BD マネージャー・テクニカルディレクター 畑 圭輔

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

自己紹介

お仕事成分表

テクニカルディレクターマネージャー

モバイル関連技術支援業務

技術調査、推進、採用

プラットフォーマー対外折衝

マネージメント業務

コンソール開発(PlayStationⓇ,PlayStationⓇ2)

組み込み系開発管理業務

業 界 11 年 目

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

自己紹介

プライベート

執筆、雑誌連載、web連載

Seasons

Keisuke Hata

ブログもやってます

申請時は メッセージ 添えてね

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

アジェンダ

• cocos2d-x v3.xのご紹介

• coco2d-x x SQEX

• cocos2d-xへの取り組み

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

cocos2d-x v3.xのご紹介

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

その前に…

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

cocos2d-x v3.x誕生の理由

cocos2d-iphone

Objective-C C++

cocos2d-x v2.x

for iOSfor iOS,Android™

PC…

移植よるパフォーマンスの

限界!!

移植C++11

cocos2d-x v3.x

for iOS,Android™ PC…

リニューアル

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

ハイライト

• C++11への移行

• 命名規則の変更

• Newレンダラー

• Labelの改善

• UIパーツ、ウィジェット

• 3D対応

• コマンドラインツール

v3.1.1最新

New!!

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

C++11への移行

• C++11によるエンジンリライト

• 問題だったcallback処理をstd::functionで一新

• C++11ベースのスレッドAPI

C++03

C++11

ObjCのコードを強引に移植した部分をC++11で完全に置き換えた。 • パフォーマンス向上 • リファクタリング

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

命名規則の変更

CC

PointArray

m_obRect

CCObject

Sprite

cocos2d::CC

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

命名規則の変更

CC

PointArray

CCObject

Sprite

_rect

cocos2d::CC

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

命名規則の変更

PointArray

CCObject

Sprite

_rect

cocos2d::CC

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

命名規則の変更

PointArray

CCObject

Sprite

_rect

CC

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

命名規則の変更

PointArray

CCObject

Sprite

_rect

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

命名規則の変更

PointArray

Sprite

_rect

Ref Clonable

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

命名規則の変更

• エンジン一新に伴う命名規則の変更(cocos2d恒例)

ハンガリアン記法の削除

CC,cocos2dネームスペースの削除

CCObject(基底クラス)の削除

Sprite

_rect

PointArray

Ref, Clonable

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

Newレンダラー

• フルスクラッチで書き直し

• SceneGraphから切り離し

1. CommandQueue System

2. RenderCommandGroup

3. Auto Batching

4. Auto Culling

Really fast!!

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

CommandQueue System

Node

Node

Node

Node

visit

visit

visit

visit

draw() OpenGL ES

API

CPU Block Expensive!!

v2.x• SceneGraph解析時のvisitメソッド内でdrawメソッドが最終的に呼び出される。

• drawメソッド内では、OpenGL ES APIを実行し、描画命令を発行。

OpenGL ES APIコール時のCPUブロックがSceneGraph解析処理のパフォーマンスに影響。且つ、都度APIコールによる非効率な描画処理が行われる。

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

CommandQueue System

Node

Node

Node

Node

visit

visit

visit

visit

v3.xNew!!

CommandQueue

CommandQueue

CommandQueue

CommandQueue OpenGL ES API

OpenGL ES API

OpenGL ES API

OpenGL ES API

• visit=>drawメソッド内で描画CommandをQueueに積む。

• 最終的にCommandQueueに従ってOpenGL ES APIを実行し、描画処理をまとめて行う。

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

RenderCommandGroup• 通常の描画以外の特殊なものは、描画グループを分けて管理

1. ClippingNode

2. RenderTexture

3. その他(ユーザーカスタム)

Z値

Z値

Z値

最終的には、各コマンドグループのZ値をもとにソートを行い、描画順が確定する。

Z値ソート

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

Auto Batchingv2.x

Node

Node

Node

visit

visit

visit

visit

draw() OpenGL ES

API

Node

都度,OpenGL ES APIが呼び出されてしまうためバッチ処理ができない。

• バッチ処理を実行するには、CCSpriteBatchNodeを別途作成して、子供のNodeを管理させる形を取る必要がある。

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

Auto Batchingv2.x

Node

Node

Node

visit

visit

visit

visit

draw() OpenGL ES

API

Node

都度,OpenGL ES APIが呼び出されてしまうためバッチ処理ができない。

BatchNode

• バッチ処理を実行するには、CCSpriteBatchNodeを別途作成して、子供のNodeを管理させる形を取る必要がある。

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

Auto Batchingv2.x

Node

Node

Node

visit

visit

visit

visit

draw() OpenGL ES

API

Node

都度,OpenGL ES APIが呼び出されてしまうためバッチ処理ができない。

BatchNode

• バッチ処理を実行するには、CCSpriteBatchNodeを別途作成して、子供のNodeを管理させる形を取る必要がある。

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

visit

visit

visit

visit

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

Auto Batchingv3.x

• 同じマテリアル、Z値であれば、OpenGL ES APIは、1コールで描画する=Auto Batching

Node

Node

Node

Node

visit

visit

visit

visit

CommandQueue

CommandQueue

CommandQueue

CommandQueue OpenGL ES API

OpenGL ES API

OpenGL ES API

OpenGL ES API

Batching最大=65536/6個。 同じZ値でなくても異なるマテリアルが途中に表示されないSceneGraphならOK。

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

Auto Batchingv3.x

• 同じマテリアル、Z値であれば、OpenGL ES APIは、1コールで描画する=Auto Batching

Node

Node

Node

Node

visit

visit

visit

visit

CommandQueue

CommandQueue

CommandQueue

CommandQueue OpenGL ES API

OpenGL ES API

Batching最大=65536/6個。 同じZ値でなくても異なるマテリアルが途中に表示されないSceneGraphならOK。

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

visit

visit

visit

visit

CommandQueue

CommandQueue

CommandQueue

CommandQueue

1 DrawCall

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

Auto Culling

• drawメソッド内で画面内に存在するNodeかどうか判定。

• 存在すれば、CommandQueueに描画コマンドを積む。

Node

Node

Node

Node

visitvisit

visit

visit

CommandQueue

CommandQueue

CommandQueue

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

Labelの改善

• ラベルの使い勝手向上

• Glow処理

• Shadow処理

• アウトライン処理

• 等…

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

UIパーツ、ウィジェット

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

UIパーツ、ウィジェット

Button Checkbox

Slider

ImageView

LoadingBar

TextAtlas

TextEditor

TextBMFont

TextField

Layout

ScrollView

PageView

ListView

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

UIパーツ、ウィジェット

Button Checkbox

Slider

ImageView

LoadingBar

TextAtlas

TextEditor

TextBMFont

TextField

Layout

ScrollView

PageView

ListView

Create “Dynamic”

Create “Static”

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

3D対応• 3Dオブジェクトとの親和性

• 2x3マトリックスから4x4マトリックスへ

• Sprite3D=2.5Dコンテンツ制作が可能に!

X

Y

X

Y

Z

W

auto sprite = Sprite3D::create("plane.obj"); sprite->setTexture(“plane.png"); addChild(sprite);

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

#

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

#

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

# cocos

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

# cocos

compile new run jscompile deploy

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

#

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

# cocos new -p test.app -l cpp

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

# cocos new -p test.app -l cpp

Create new project!!

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

#

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

# cocos compile -p ios

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

# cocos compile -p ios

BUILD SCCEED!!

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

#

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

# cocos run -p ios

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

コマンドラインツール

# cocos run -p ios

Run Simulator!!

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

cocos2d-x x SQEX

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

cocos2d-x採用タイトル

2Dコンテンツの開発のしやすさが人気に!

©2012-2014 SQUARE ENIX CO., LTD. All Rights Reserved.

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

cocos2d-xへの取り組み

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

LGPLライセンスコード

ccUTF8.cpp/h CCBMLabelFont

LGPLライセンスコードcocos2d-x

利用者

第3者によるソースコードのリバースエンジニアリングを許可する必要がある。

作成するプログラムにリンクするライブラリが リバースエンジニアリングを許可しないものが 含まれていたりする場合などに問題に!!

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

これはまずい…

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

cocos2d-xチームに相談

cocos2d-x開発GoogleGroupにて

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

その後…

ccUTF8.cpp/h CCBMLabelFont

LGPLライセンスコード cocos2d-x

利用者

第3者によるソースコードのリバースエンジニアリングを許可する必要がある。

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

その後…

ccUTF8.cpp/h CCBMLabelFont

cocos2d-x

利用者

第3者によるソースコードのリバースエンジニアリングを許可する必要がある。

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

その後…

ccUTF8.cpp/h CCBMLabelFont

cocos2d-x

利用者

第3者によるソースコードのリバースエンジニアリングを許可する必要がある。

LLVMライセンス

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

その後…

ccUTF8.cpp/h CCBMLabelFont

cocos2d-x

利用者

LLVMライセンス

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

その後…

ccUTF8.cpp/h CCBMLabelFont

cocos2d-x

利用者

LLVMライセンス

安心して利用可能に!!

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

https://github.com/cocos2d/cocos2d-x/pull/6635

https://github.com/cocos2d/cocos2d-x/pull/6643v2.x

v3.x

詳しい差分情報

v3.1以降

v2.2.4?以降

利用可能なバージョン

v2.x系

v3.x系

© 2014 SQUARE ENIX CO., LTD. All Rights Reserved.

ご静聴ありがとうございました!!