-
学生向けゲーム作成演習の様子
概要
- PS3 ゲーム開発用フレームワーク Cerium の紹介.
- SceneGraphによるゲーム作成
- Lindaを用いた、ネットワークゲームの作成例の紹介
Cerium を用いたゲーム開発
SuperDandy3D
- 学生実験でPS3上でのGame作成を行っている
- Cerium を用いて学生が作成
- ジョイスティックやキーボードでの操作が可能
-
3Dモデリング
まずはゲーム中のオブジェクトのモデリングを行う
-
3Dモデルの作成
Blender: フリーの高機能なモデリングツール
-
3Dモデルの作成
Blender: 作成画面
モデルをCeriumに読ませる.
- 作成したオブジェクトはBlenderから、スクリプトを使ってCerium用に変換
- xmlファイルとなったモデリングデータをCeriumが描画する
PS3,Cell,Cerium
PS3にはCell Broadband Engine が搭載されている。
-
Cellとは
Cellとはソニー、東芝、IBM社の3社が共同開発したマイクロプロセッサ
Cellは1基の制御系のプロセッサコアPPEと、8基の演算系プロセッサコアSPEで構成される(Ceriumで扱えるSPEの数は6基)。それぞれ高速なバスで接続されている
Ceriumとは
Ceriumとは当研究室で開発したゲーム開発用フレームワークである
Task Manager
タスクと呼ばれる分割されたプログラムを管理する
Scene Graph
ゲーム中のオブジェクトの振る舞いや、ルールを管理する。
Rendering Engine
Cerium独自に開発した描画用のエンジン
の3つの要素から構成される。
Ceriumは PS3/Cell、linux, macosx 上で動作する。
-
SceneGraph
Blenderで生成した3Dモデルを独自のXML形式で出力.
SceneGraph の各ノードには MoveTask, Collision Task がある.
SceneGraph
SceneGraph
SceneGraph
SceneGraph
SceneGraph
SceneGraph
SceneGraph
SceneGraph
SceneGraph
static void
boss1_move_right() {
x += 1;
if(x > screen_w) {
set_move(boss1_move_left);
}
}
static void
boss1_move_left() {
x -= 1;
if(x < screen_w) {
set_move(boss1_move_right);
}
}
SceneGraph
SceneGraph
SceneGraph
SceneGraph
SceneGraph
SceneGraph を
MoveTask
CollisionTask
で書き換えていく
MoveTask, CollisionTask は、ステートパターンで
入れ換えられる
これで、すべて書ける。
つまり、
SceneGraph の構築
MoveTask
CollsionTask
だけを書けば、あとは、Cerium Task Manager が自動的に並列に実行管理してくれる
SceneGraphの結果を描画
SceneGraphで操作したオブジェクトの結果を、レンダリングエンジンで描画する
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に対応する画像の色をみて決める
TaskManager
SceneGraph, RenderingEngineのTaskを管理し、SPEに
-
Cerium Task Manager
- Open/GL Mesa に Cell driver を書いたが、メインメモリに依存しすぎていたため、動作が遅くなってしまった。
- Task base で書く必要がある。
- Video Chip が公開されていないので、Rendering Engine も用意すべき
- SPE の Local Store は 256KB なので、コードの管理も必要
このような経緯で、Cell Task Manager を作成することになった。
-
Cerium Task Manager の特徴
PPU/SPUで、Task の互換性がある
SPU上の最適化は当面禁止
OS X 上でも動く
コードのデバッグはOS X 上でやる
並列化とチューニングだけPS3上で行なう
SPU上のメモリをCode と Data を Hash とメモリリストで管理する
SPUに入り切らない巨大なTaskでも実行できる
-
並列アーキテクチャは並列でないと...
特に、Cell/PS3 は、SPUで実行しないとだめ
既存のプログラミングでは、まったく歯が立たない
トリビアルなプログラムでも、並列にする必要がある
-
やってはいけないこと
最初に大量のTaskをすべて作る
Task が自分でデータを拾って来る
Task 同士が、同期を行なう
-
まとめ
Blender/Linux/Cerium を用いたオープンソースなゲームフレームワーク
SceneGraphを作れば、move/collision を記述するだけで並列に実行される
ソフトウェアレンダリングなんで、なんでも自分で書ける
-
今後の課題