Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
第7回テックヒルズ
PLAYGROUND内の描画仕組み
ロマン ピコア
現代のモバイル用描画パイプライン

固定機能
プログラム可能
状態の変更のコスト
実行回数や負担を減らすための一般方法
まったく描画しないために処理
カメラの空間に無い物を描画しない。(カリング)

ピクセル毎の負担を減らす又ステート変更を減
らす
透明ではないオブジェクトを「近く遠く」にソート

透明であるオブジェクトを...
モバイル、2Dの場合


Shader数が少ない、変わらないゲームも多い。




透明ではない物はほとんどありません:背景のみ。






画像とαブレンド・足し算ブレンドはほとんど。

Z Bufferのトリックは無意味。

...
次のボトルネック:切り替えより回数減らそう
描画回数を減らすため、ステートが同じなら、バッチを実現。
4回実行(頂点情報だけが違う)
一回で描画

複数の描画命令を同じステートなら、同じ頂点リストにまとめて、実行数を減らす。
変わりにCPUがV...
Playgroundでは?
XY

UV

モデル : XY バッファ / UV バッファ

インスタンス化 + 2D Matrixをかける(状態キャッシュ)
CO X U X U X U
インスタンス : Color + XYUV Buffe...
速度を保つためにはキャッシュ&フラグ
①変わった時にフラグのみを変更
②変更された所だけのMatrixを再計算(フラグがあるため、
最適化ができて、無駄な計算せずにすむ)

Index
XY UV

2Dモデル
2Dインスタンス
シーングラフの...
気になる、Cocos 2Dはどうしている?

見た限り、バッチは可能ですが、純粋にプログラマーの責任
気になる、Unityはどうしている?
普段の場合、Unityの仕様を見ると、
 Batching of static model done by Unity Pro.
 Batching of dynamic model done by U...
Upcoming SlideShare
Loading in …5
×

Playground内の描画仕組み

3,469 views

Published on

Slide describing the playgroung 2D game engine rendering system.

Published in: Technology
  • Be the first to comment

Playground内の描画仕組み

  1. 1. 第7回テックヒルズ PLAYGROUND内の描画仕組み ロマン ピコア
  2. 2. 現代のモバイル用描画パイプライン 固定機能 プログラム可能
  3. 3. 状態の変更のコスト
  4. 4. 実行回数や負担を減らすための一般方法 まったく描画しないために処理 カメラの空間に無い物を描画しない。(カリング) ピクセル毎の負担を減らす又ステート変更を減 らす 透明ではないオブジェクトを「近く遠く」にソート 透明であるオブジェクトを「遠く近く」にソート 高級なゲームはモデルOcclusionを計算 シェーダーの種類・パラメターでソート テクスチャーでソート A A A B B B
  5. 5. モバイル、2Dの場合  Shader数が少ない、変わらないゲームも多い。   透明ではない物はほとんどありません:背景のみ。    画像とαブレンド・足し算ブレンドはほとんど。 Z Bufferのトリックは無意味。 3Dに比べてベクターデータ/頂点が少ない。 塗る面積が3Dとやや同じ・もっと大きいかも。 (Overdraw)
  6. 6. 次のボトルネック:切り替えより回数減らそう 描画回数を減らすため、ステートが同じなら、バッチを実現。 4回実行(頂点情報だけが違う) 一回で描画 複数の描画命令を同じステートなら、同じ頂点リストにまとめて、実行数を減らす。 変わりにCPUがVertex Shaderの計算の一部を自前で計算し、バッファー作成する。
  7. 7. Playgroundでは? XY UV モデル : XY バッファ / UV バッファ インスタンス化 + 2D Matrixをかける(状態キャッシュ) CO X U X U X U インスタンス : Color + XYUV Buffer L YV YV YV 描画時にバッチバッファにまとめる XUXUXUXUXUXUXUXUXU … YV YV YV YV YV YV YV YV YV … CO CO CO CO CO CO … … L L L L L L 同じステートで実行
  8. 8. 速度を保つためにはキャッシュ&フラグ ①変わった時にフラグのみを変更 ②変更された所だけのMatrixを再計算(フラグがあるため、 最適化ができて、無駄な計算せずにすむ) Index XY UV 2Dモデル 2Dインスタンス シーングラフのノード XUXUXUXU YVYVYVYV ③変更された時だけにMatrixをかけて、画面空間で XYを計算。そしてXYUVをインターレス化:キャッ シュ CO L ④フラグによって、コピーの最適化: XYUV, COLOR, INDEX XYU V Index COL
  9. 9. 気になる、Cocos 2Dはどうしている? 見た限り、バッチは可能ですが、純粋にプログラマーの責任
  10. 10. 気になる、Unityはどうしている? 普段の場合、Unityの仕様を見ると、  Batching of static model done by Unity Pro.  Batching of dynamic model done by Unity. (=Playgroundと同じ動 作)  Culling done by Unity 普通に3Dモデルで2Dを描画する作業なら、バッチ機能がやってくれ るはず。 しかし2Dライブラリの場合、ライブラリ次第です。 例えば、ex2DライブラリはC#で自前でバッチする。

×