この記事は、開発者の視点から見たCocos2d-x v3.xのレンダリングパイプラインの概要となっています。
これは、コアエンジンチームによって提供されるオリジナルのロードマップの置換ではありません。
※ 新しいレンダリングパイプラインの実装の詳細はカバーしきれていない状態です。貢献して頂ける場合は、ロードマップのドキュメントを参照してください。
それでは新しいレンダリングパイプラインのビジョンを見ていきましょう。
Cocos2d-x v3.xのレンダリングパイプラインは、最近のモバイルデバイスに普及してきたマルチコアCPUを活用することで、レンダリングのパフォーマンスの向上を図っています。
その一方、Cocos2d-x v3.xのAPIスタイルはCocos2d-x v2.xとの互換性があり、今までCocos2d-x v2.xを使用してきたCocos2d-xユーザもすぐに馴染めるようになっています。
新しく実装された機能と、改善の目標点を次のようにまとめることができます。
- レンダラーとシーングラフの切り離し
- 視錐台ジオメトリカリング
- 別スレッド上でのレンダリング
- 自動バッチ処理
- (ノードベース)カスタマイズ可能なレンダリング
- 2Dの機能を最適化をしているが、3Dの機能にも適している
現在、Cocos2d-x v3.0betaではレンダラーをシーングラフから切り離しており、自動バッチ処理及び自動カリングをサポートしています。
レンダリングについての詳細を知りたい場合、このリンク先を参照してください。ロードマップ
上記でも言及したように、実際のレンダリングは別のスレッド上で行われ、RenderQueueがグラフィックカードに直接OpenGLコマンドを発行しています。
次のスクリーンショットの用になっています。
シーングラフのプロセスは、様々なコマンドを生成しながらフロントエンドのスレッドで実行されます。
各コマンドは、CommandQueueに送信され(ソートや再配置が行われる)別々のバックエンドスレッドで実行されます。
各コマンドの内部形式はこのドキュメントでの説明の範囲外になるので、ロードマップのドキュメントをご覧になってください。
Cocos2d-x v3.xを拡張する場合・・
例えば、いくつかのスプライトを定義したい場合、描画コードをカスタマイズする必要があり、古いdraw関数は使用することはできません。
draw関数の要求に応じたコマンドを構成する必要があり、対応するコマンドを熟知する必要があります。
詳細についてはCocos2d-x v3.0betaに組み込まれているDrawNodeのページでご覧になることができます。
Cocos2d-x v3.xのレンダリングパイプラインは制作されたばかりで、完成に近づけるためには多くの時間と試行するユーザが必要となります。
GitHubのプルリクエストを使うと、あなたの意見やコメントを送信することができます。
どのような種類のコメントでも構わないので、貢献して頂けることを願っています。