Mercurial > hg > Events > OSC2010
view presen/osc2010.html @ 9:57a4fa3f2359 default tip
fix
author | Yutaka_Kinjyo |
---|---|
date | Sat, 02 Oct 2010 13:08:21 +0900 |
parents | 93c3962d9a01 |
children |
line wrap: on
line source
<html> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>2010-10-02 (土) シーングラフとPS3 を使ったゲームプログラミング</title> <!-- metadata --> <meta name="generator" content="S5" /> <meta name="version" content="S5 1.2a2" /> <meta name="author" content="Eric A. Meyer" /> <meta name="company" content="Complex Spiral Consulting" /> <!-- configuration parameters --> <meta name="defaultView" content="slideshow" /> <meta name="controlVis" content="hidden" /> <!-- style sheet links --> <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projec tion" id="slideProj" /> <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="scree n" id="outlineStyle" /> <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" /> <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="project ion" id="operaFix" /> <!-- S5 JS --> <script src="ui/default/slides.js" type="text/javascript"></script> </head> <body> <div class="layout"> <div id="controls"><!-- DO NOT EDIT --></div> <div id="currentSlide"><!-- DO NOT EDIT --></div> <div id="header"></div> <div id="footer"> <h1>2010-10-02 (土) シーングラフとPS3 を使ったゲームプログラミング</h1> <h2></h2> </div> </div> <ol class="xoxo presentation"> </li> <li class="slide"> <h1>学生向けゲーム作成演習の様子</h1> </li> <div class="slide"> <h1>概要</h1> <ul> <li>PS3 ゲーム開発用フレームワーク <span class="text-maroon">Cerium</span> の紹介.</li> <li>SceneGraphによるゲーム作成</li> <li>Lindaを用いた、ネットワークゲームの作成例の紹介</li> </ul> </div> <div class="slide" id="id17"> <h1>Cerium を用いたゲーム開発</h1> <div align="center" class="align-center"><img alt="images/cerium_game.jpg" class="align-center" src="images/cerium_game.jpg" style="width: 450px;" /></div> <div align="center"> SuperDandy3D </div><ul class="simple"> <li>学生実験でPS3上でのGame作成を行っている</li> <li>Cerium を用いて学生が作成</li> <li>ジョイスティックやキーボードでの操作が可能<ul> <li>SDL を用いて入力値を取得している</li> </ul> </li> </ul> </div> <!-- section:Blender --> <li class="slide"> <h1>3Dモデリング</h1> まずはゲーム中のオブジェクトのモデリングを行う </li> <li class="slide"> <h1>3Dモデルの作成</h1> <p>Blender: フリーの高機能なモデリングツール</p> <img src="gazo/blender.jpeg" style="width: 30%"> <img src="gazo/post.png" style="width: 30%"> <img src="gazo/blenderlogo.jpeg" style="width: 30%"> </li> <li class="slide"> <h1>3Dモデルの作成</h1> <p>Blender: 作成画面</p> <img src="gazo/blender2.png" style="width: 60%"> </li> <div class="slide"> <h1>モデルをCeriumに読ませる.</h1> <img src="gazo/model2xml.png" style="width: 90%"> <ul> <li>作成したオブジェクトはBlenderから、スクリプトを使ってCerium用に変換</li> <li>xmlファイルとなったモデリングデータをCeriumが描画する</li> </ul> </div> <div class="slide"> <h1>PS3,Cell,Cerium</h1> PS3にはCell Broadband Engine が搭載されている。 </div> <!-- section:Cerium --> <li class="slide"> <h1>Cellとは</h1> <big>Cell</big>とはソニー、東芝、IBM社の3社が共同開発したマイクロプロセッサ<br> Cellは1基の制御系のプロセッサコア<u>PPE</u>と、8基の演算系プロセッサコア<u>SPE</u>で構成される(Ceriumで扱えるSPEの数は6基)。それぞれ高速なバスで接続されている<br><br> <table height="100%" width="100%" border="0"> <tr><td align="center" valign="middle"> <img src="gazo/cell1.png" style="width: 35%%"></td></tr> </table> <!--<img src="gazo/cell1.png" style="width: 45%%"><br>--> </li> <div class="slide"> <h1>Ceriumとは</h1> <big>Cerium</big>とは当研究室で開発したゲーム開発用フレームワークである<br><br> <u>Task Manager</u><br> タスクと呼ばれる分割されたプログラムを管理する<br> <u>Scene Graph</u><br> ゲーム中のオブジェクトの振る舞いや、ルールを管理する。 <u>Rendering Engine</u><br> Cerium独自に開発した描画用のエンジン <br><br> の3つの要素から構成される。<br><br> Ceriumは PS3/Cell、linux, macosx 上で動作する。 </div> <li class="slide"> <h1>SceneGraph</h1> <img src="photo/cerium_sg_tree.jpg" style="width 100%" > <p>Blenderで生成した3Dモデルを独自のXML形式で出力.</p> <p></p> <p>SceneGraph の各ノードには <font color="red">MoveTask, Collision Task</font> がある.</p> </pre> </li> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/boss.png" style="width: 60%"> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/scenegraph2.png" style="width: 100%"> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/scenegraph1.png" style="width: 100%"> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/move.png" style="width: 70%"> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/collision1.png" style="width: 70%"> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/collision2.png" style="width: 70%"> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/collision3.png" style="width: 70%"> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/collision4.png" style="width: 60%"> </div> <div class="slide"> <h1>SceneGraph</h1> <pre> static void boss1_move_right() { x += 1; if(x > screen_w) { <font color="red">set_move(boss1_move_left);</font> } } static void boss1_move_left() { x -= 1; if(x < screen_w) { <font color="red">set_move(boss1_move_right);</font> } } </pre> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/boss2.png" style="width: 60%"> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/boss3.png" style="width: 70%"> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/boss4.png" style="width: 60%"> </div> <div class="slide"> <h1>SceneGraph</h1> <img src="gazo/hito.png" style="width: 60%"> </div> <div class="slide"> <h1>SceneGraph</h1> <p><pre> SceneGraph を<br> MoveTask<br> CollisionTask<br> で書き換えていく<br> MoveTask, CollisionTask は、ステートパターンで<br> 入れ換えられる<br> </pre> これで、すべて書ける。<br> <p></div> <div class="slide"> <h1>つまり、</h1> <pre> SceneGraph の構築<br> MoveTask<br> CollsionTask<br> </pre> だけを書けば、あとは、Cerium Task Manager が自動的に並列に実行管理してくれる<br> <p></div> <div class="slide"> <h1>SceneGraphの結果を描画</h1> SceneGraphで操作したオブジェクトの結果を、レンダリングエンジンで描画する </div> <div class="slide"> <h1>Rendering Engineの構成</h1> <p class="ex2">Rendering Engineは主に3つのタスクから構成されている</p> <u>CreatePolygonタスク</u><br> モデリングデータからポリゴンを生成するタスク<br> <u>CreateSpanタスク</u><br> 生成されたポリゴンを水平な直線(Span)に分割するタスク<br> <u>DrawSpanタスク</u><br> Spanのデータを元に、画面に描画するタスク<br> </div> <div class="slide"> <h1>Rendering Engineの流れ</h1> <img src="gazo/rendering1.png" style="display:block; width: 60%; margin: auto;"> <u><big>CreatePolygon</big></u>:<br> SceneGraph をもとに回転や並行移動したポリゴンを、モデルデータから生成するタスク<br> ポリゴンは三角形である<br> 回転や平行移動はSceneGraphが持っている変換行列を用いる </div> <div class="slide"> <h1>Rendering Engineの流れ</h1> <img src="gazo/rendering2.png" style="display:block; width: 60%; margin: auto;"> <div style="float: left; width: 50%;"><u><big>CreateSpan</big></u>:<br> 三角形のポリゴンを線に分割するタスク。 生成されたポリゴンを水平な直線(Span)の集合へと分割する<br> Spanとは1ドット単位で分割された線 </div> <img src="gazo/span2.png" style="display:block; width: 38%; float: right; margin-top:5%"> </div> <div class="slide"> <h1>Rendering Engineの流れ</h1> <br> <img src="gazo/rendering3.png" style="display:block; width: 65%; margin: auto;"> <u><big>DrawSpan</big></u>:<br> Spanを画面へ描画するタスク<br> Spanを1Dotずつ見ていき、対応する画面の1Dotに色をつける<br> 色はSpanに対応する画像の色をみて決める </div> <div class="slide"> <h1>TaskManager</h1> SceneGraph, RenderingEngineのTaskを管理し、SPEに </div> <li class="slide"> <h1>Cerium Task Manager</h1> <p></p> <ul> <li>Open/GL Mesa に Cell driver を書いたが、メインメモリに依存しすぎていたため、動作が遅くなってしまった。</li> <li>Task base で書く必要がある。</li> <li>Video Chip が公開されていないので、Rendering Engine も用意すべき</li> <li>SPE の Local Store は 256KB なので、コードの管理も必要</li> </ul> <br> このような経緯で、Cell Task Manager を作成することになった。 </li> <li class="slide"> <h1>Cerium Task Manager の特徴</h1> <pre> PPU/SPUで、Task の互換性がある<br> SPU上の最適化は当面禁止<br> OS X 上でも動く<br> コードのデバッグはOS X 上でやる<br> 並列化とチューニングだけPS3上で行なう<br> SPU上のメモリをCode と Data を Hash とメモリリストで管理する<br> SPUに入り切らない巨大なTaskでも実行できる<br> </pre> </li> <li class="slide"> <h1>並列アーキテクチャは並列でないと...</h1> 特に、Cell/PS3 は、SPUで実行しないとだめ<br> <pre> 既存のプログラミングでは、まったく歯が立たない<br> </pre> トリビアルなプログラムでも、並列にする必要がある<br> <p></li> <li class="slide"> <h1>やってはいけないこと</h1> <pre> 最初に大量のTaskをすべて作る<br> Task が自分でデータを拾って来る<br> Task 同士が、同期を行なう<br> </pre> </li> <!-- section:Linda --> <li class="slide"> <h1>まとめ</h1> Blender/Linux/Cerium を用いたオープンソースなゲームフレームワーク<br> <p>SceneGraphを作れば、move/collision を記述するだけで並列に実行される<br> <p>ソフトウェアレンダリングなんで、なんでも自分で書ける<br> <p> </li> <li class="slide"> <h1>今後の課題</h1> </li>