1. シーングラフとPS3 を使った
    ゲームプログラミング

       Cerium Task Manager
    Blender / SceneGraph
  2. 構成案

    構成案と言っても、ほぼ去年のやつの改変

    • ゲームの作り方
      1. ゲームとはモデルのレンダリングと操作!
      2. うちはレンダリングエンジン自作! ネットワーク通信プロトコルも自作!
    • モデリング : Blender
      1. モデルの作り方
      2. モデル -> XML 変換
    • レンダリング: Cerium
      1. レンダリングの実装
      2. Ceriumの話 (PS3, タスクマネージャー)
    • ネットワーク: Linda
      1. Lindaの話
      2. お魚の例題
  3. 発表概要

    PS3 ゲーム開発用フレームワーク Cerium の紹介.

    Linda...

    Cerium を用いたゲーム開発

    images/cerium_game.jpg
    SuperDandy3D
  4. 3Dモデル

    ポリゴン: 3つの座標によって表現される三角平面.

    テクスチャ: ポリゴンに貼られた2Dの画像

    3D オブジェクト: ポリゴンが集まってできた一つのブジェクト

  5. 3Dモデルの作成

    Blender: フリーの高機能なモデリングツール

  6. モデルをCeriumに読ませる.

    sg

    3Dオブジェクトの作成 Blender. 生成したオブジェクトをXMLに変換.

    Ceriumでは, オブジェクトをSceneGraphと呼ばれるツリー構造で保持.

  7. Cellとは

    Cellとはソニー、東芝、IBM社の3社が共同開発したマイクロプロセッサ

    Cellは1基の制御系のプロセッサコアPPEと、8基の演算系プロセッサコアSPEで構成される(Ceriumで扱えるSPEの数は6基)。 PPEよりもSPEが高速なので、1SPE 上で実行するだけでも意味がある。 それぞれ高速なバスで接続されている

  8. Ceriumとは

    Ceriumとは当研究室で開発したゲーム開発用フレームワークである

    Task Manager
     タスクと呼ばれる分割されたプログラムを管理する
    Scene Graph
     ゲーム中のオブジェクトの振る舞いや、ルールを管理する。 Rendering Engine
     Cerium独自に開発した描画用のエンジン

    の3つの要素から構成される。

    Ceriumは PS3/Cell、linux, macosx 上で動作する。

    Rendering Engineの構成

    Rendering Engineは主に3つのタスクから構成されている

    CreatePolygonタスク
     モデリングデータからポリゴンを生成するタスク
    CreateSpanタスク
     生成されたポリゴンを水平な直線(Span)に分割するタスク
    DrawSpanタスク
     Spanのデータを元に、画面に描画するタスク

    Rendering Engineの流れ

    CreatePolygon:
    SceneGraph をもとに回転や並行移動したポリゴンを、モデルデータから生成するタスク
    ポリゴンは三角形である
    回転や平行移動はSceneGraphが持っている変換行列を用いる

    Rendering Engineの流れ

    CreateSpan:
    三角形のポリゴンを線に分割するタスク。 生成されたポリゴンを水平な直線(Span)の集合へと分割する
    Spanとは1ドット単位で分割された線

    Rendering Engineの流れ


    DrawSpan:
    Spanを画面へ描画するタスク
    Spanを1Dotずつ見ていき、対応する画面の1Dotに色をつける
    色はSpanに対応する画像の色をみて決める
  9. SceneGraph

    sg

    Blenderで生成した3Dモデルを独自のXML形式で出力.

    SceneGraph の各ノードには MoveTask, Collision Task がある.

  10. SceneGraph と Rendering Engine

          SceneGraph -> SceneGraph
    SceneGraph -> Polygon
    Polygon -> Span Pack
    Span Pack を Texture を使って Rendering
    これらを大きく並列に実行する
    Rendering は細かく並列に実行する
  11. SceneGraph と Rendering Engine

    1 dot 1 dot SPUが書いていく

    rendering

  12. Rendering Task

    SG2PP
  13. PlayStation3 と Cell

  14. Cell Architecture

    pipeline

  15. 並列性

    並列度を維持するには

    の2つを考慮しなければならない。
  16. 階層的並列プログラミング

  17. データ読み込み、 実行、データ書込

    pipeline

    パイプラインバッファはいくつ?
  18. Cerium Task Manager


    このような経緯で、Cell Task Manager を作成することになった。
  19. Cerium Task Manager の特徴

           PPU/SPUで、Task の互換性がある
    SPU上の最適化は当面禁止
    OS X 上でも動く
    コードのデバッグはOS X 上でやる
    並列化とチューニングだけPS3上で行なう
    SPU上のメモリをCode と Data を Hash とメモリリストで管理する
    SPUに入り切らない巨大なTaskでも実行できる
  20. ゲームとは、

           SceneGraph を
    MoveTask
    CollsionTask
    で書き換えていく
    MoveTask, CollsionTask は、ステートパターンで
    入れ換えられる
    これで、すべて書ける。

  21. つまり、

        SceneGraph の構築
    MoveTask
    CollsionTask
    だけを書けば、あとは、Cell が自動的に並列に実行してくれる

  22. 並列アーキテクチャは並列でないと...

    特に、Cell/PS3 は、SPUで実行しないとだめ
         既存のプログラミングでは、まったく歯が立たない
    トリビアルなプログラムでも、並列にする必要がある

  23. やってはいけないこと

          最初に大量のTaskをすべて作る
    Task が自分でデータを拾って来る
    Task 同士が、同期を行なう
  24. Demo

          相互制約が非常に大きい物理シミュレーションの例
    非ホロノミック系なので、単純な積分では力学を決定できない
    SPU上で、すべての要素を同時に計算する必要がある
    (あまり並列計算向きではない...ベクトル向き)
    (地味です...)

  25. まとめ

    Blender/Linux/Cerium を用いたオープンソースなゲームフレームワーク

    SceneGraphを作れば、move/collision を記述するだけで並列に実行される

    ソフトウェアレンダリングなんで、なんでも自分で書ける

  26. 今後の課題