3
|
1 \documentclass[twocolumn,twoside,9.5pt]{jarticle}
|
|
2 % \usepackage[dvips]{graphicx}
|
|
3 \usepackage[dvipdfm]{graphicx}
|
|
4 \usepackage{fancyhdr,picins}
|
7
|
5 \usepackage{comment}
|
3
|
6 \pagestyle{fancy}
|
|
7 \lhead{\parpic{
|
|
8 \includegraphics[height=1zw,clip,keepaspectratio]{pic/emblem-bitmap.pdf}}
|
|
9 琉球大学主催 工学部情報工学科 卒業研究発表会}
|
|
10 \rhead{}
|
|
11 \cfoot{}
|
|
12
|
|
13 \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
|
|
14 \setlength{\headheight}{0mm}
|
|
15 \setlength{\headsep}{5mm}
|
|
16 \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
|
|
17 \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
|
|
18 \setlength{\textwidth}{181mm}
|
|
19 \setlength{\textheight}{261mm}
|
|
20 \setlength{\footskip}{0mm}
|
|
21 \pagestyle{empty}
|
|
22
|
|
23 \begin{document}
|
12
|
24 \title{マルチコア CPU における\\ SceneGraph を用いたゲームの作成}
|
3
|
25 \author{065746J 仲宗根広樹 指導教員 : 河野真治}
|
|
26 \date{\today}
|
|
27 \maketitle
|
|
28 \thispagestyle{fancy}
|
|
29
|
|
30 \section{概要}
|
|
31 近年のゲームマシンは高度な並列性を持つようになっており、
|
|
32 ゲームプログラムでの様々なレベルでの並列処理が必須となっている。
|
|
33 プログラムの一部を並列処理するのではなく、定常的な並列度を提供する
|
|
34 必要がある。しかし、
|
|
35 データが処理される順番を把握することができないので出力結果などが特定しづらく、
|
|
36 逐次型に比べて難易度が高い
|
7
|
37 データ転送やタスクの生成、管理等の技術が多く存在する。\\
|
|
38 現在、学生実験にて PlayStation 3(PS3) で動作するゲーム開発を行っている。
|
9
|
39 短期間の学生実験では新しい技術を習得することに時間を割かれ、ゲームの完成度を上げることが難しくなる。\\
|
|
40 そこで本研究では、
|
3
|
41 SceneGraph と言うゲーム中の1つの場面(Scene) を構成するオブジェクトやその振る舞い、ゲームのルールの集合を導入する。
|
9
|
42 SceneGraph の処理を並列に行なうことにより、完成度の高いゲームの作成を可能とする。
|
3
|
43
|
|
44 \section{SceneGraph を使ったゲーム作成}
|
|
45 SceneGraph のノードは親子関係を持つ tree で構成される(図\ref{fig:SceneGraph})。
|
|
46
|
|
47 SceneGraph を使用すると、ゲーム内のオブジェクトは個別に SceneGraph ノードに分けられているので、ノードを別個に処理すると自然と並列度がでてくる。
|
|
48
|
|
49 SceneGraph ノード は以下のようなデータと動作を持つ。
|
7
|
50 \\\\
|
|
51 {\small
|
|
52 \begin{tabular}{|l|l|}
|
|
53 \hline
|
9
|
54 データ & 説明 \\ \hline
|
7
|
55 Vertex & ポリゴンオブジェクトの頂点座標 \\ \hline
|
|
56 Texture & ポリゴンオブジェクトのテクスチャ座標 \\ \hline
|
|
57 TextureImage & テクスチャイメージ \\ \hline
|
|
58 TransMatrix & ポリゴンオブジェクトの変換行列 \\ \hline
|
|
59 Coordinates & オブジェクトの座標 \\ \hline
|
|
60 Angle & オブジェクトの角度 \\\hline
|
9
|
61 Property & オブジェクトの内部状態 \\
|
7
|
62 \hline
|
|
63 \end{tabular}
|
|
64 \\\\\\
|
|
65 \begin{tabular}{|l|l|}
|
|
66 \hline
|
9
|
67 動作 & 説明 \\ \hline
|
7
|
68 Move & 自律的なオブジェクトの動く \\ \hline
|
|
69 Collision & 他のノードとの衝突判定をする \\ \hline
|
|
70 \end{tabular}
|
|
71 }
|
|
72 \\\\
|
|
73 \begin{comment}
|
3
|
74 \begin{itemize}
|
|
75 \item データ
|
|
76 \begin{enumerate}
|
|
77 \item Vertex :ポリゴンオブジェクトの頂点座標
|
|
78 \item Texture:ポリゴンオブジェクトのテクスチャ座標
|
|
79 \item TextureImage:テクスチャイメージ
|
|
80 \item TransMatrix :ポリゴンオブジェクトの変換行列
|
|
81 \item Coordinates :オブジェクトの座標
|
|
82 \item Angle:オブジェクトの角度
|
|
83 \item Property:オブジェクトのゲームに係わる内部状態
|
|
84 \end{enumerate}
|
|
85 \item 動作
|
|
86 \begin{enumerate}
|
|
87 \item Move:自律的なオブジェクトの動き
|
|
88 \item Collision:他のノードとの衝突判定をする
|
|
89 \end{enumerate}
|
|
90 \end{itemize}
|
7
|
91 \end{comment}
|
3
|
92
|
4
|
93 SceneGraph の親子関係に沿って TransMatrix を計算し、Move, Collision を実行することで SceneGraph 内のオブジェクトが変化する。Collision によって Move が変更され、Move によって Coordinates や Angle が変更される。これらをどのように変更させるかがゲームのルールになる。
|
|
94
|
3
|
95 \begin{figure}[htb]
|
|
96 \begin{center}
|
|
97 \includegraphics[scale=0.4]{image/SceneGraph.pdf}
|
4
|
98 \caption{tree 構造の SceneGraph}
|
3
|
99 \label{fig:SceneGraph}
|
|
100 \end{center}
|
|
101 \end{figure}
|
|
102
|
|
103
|
|
104 \section{Cell Broadband Engine} \label{sec:cell}
|
|
105 Cell\cite{cell} は1基の PowerPC Processor Element (PPE) と8基の Synergistic Processor Element (SPE) で構成されるヘテロジニアスマルチコアプロセッサである。各プロセッサは高速バスで接続されている。本研究では6基の SPE が使用可能となっている。
|
|
106
|
|
107 \section{Cerium}
|
|
108 Cerium とは当研究室で開発した Cell 上で動作するゲームフレームワークである。
|
|
109 Cerium は SceneGraph、OSMesa に代表される Rendering Engine、そしてそれらの実行単位を Task とし、動的に全てのコアが動作する様な割り振りを行うカーネル TaskManager で構成されている。
|
|
110
|
|
111 現在、Cerium では SceneGraph の Move, Collision を PPE でシーケンシャルに処理しているので、この部分の処理を SPE を用いて並列に処理するように変更する。
|
|
112
|
5
|
113 \section{SceneGraph の並列処理}
|
|
114 \subsection{Property}
|
12
|
115 オブジェクトの動作(move, collision) に必要になるのは Coordinates や Angle であり、Polygon や Texture のデータは不要になる。そこで、ゲームに必要なオブジェクトの内部状態を持った配列 Property を用いる。Property には Coordinates, Angle の他に、tree を再生成する時に必要な親子関係、オブジェクト生成消滅のパラメータなどが含まれる。\\
|
|
116 Move, Collsion の処理をする際は Property を SPE に送り、変更されて返された Updated Property を元に PPE 側で SceneGraphTree を構成する。 (図\ref{fig:sgtask})\\
|
|
117 \begin{figure}[htb]
|
|
118 \begin{center}
|
|
119 \includegraphics[scale=0.7]{image/SceneGraphTask.pdf}
|
|
120 \caption{SceneGraphTree の生成}
|
|
121 \label{fig:sgtask}
|
|
122 \end{center}
|
|
123 \end{figure}
|
|
124 \subsection{chain}
|
|
125 SceneGraph の処理の例題として、学生実験で作成された鎖のシミュレーション chain を使用する。
|
|
126 この例題では、動作は Move の処理のみ行い、処理に使用する SPE は1基となっている。
|
|
127 \begin{figure}[htb]
|
|
128 \begin{center}
|
|
129 \includegraphics[scale=0.3]{image/chain.png}
|
|
130 \caption{chain の画面}
|
|
131 \label{fig:chain}
|
|
132 \end{center}
|
|
133 \end{figure}
|
3
|
134
|
12
|
135 [Move] chain のオブジェクトの値は一つ前のオブジェクトの値から算出されるので、複数 SPE に分割して並列処理することができない。
|
|
136 \\
|
|
137 Move の処理を SPE で行った場合と PPE で行った場合の FPS の比較を以下に示す。
|
|
138 \begin{center}
|
|
139 \begin{tabular}{|l|l|}
|
|
140 \hline
|
|
141 & FPS(Frame Per Scecond) \\ \hline
|
|
142 PPE & 2.708696 \\ \hline
|
|
143 SPE & 2.893348 \\
|
|
144 \hline
|
|
145 \end{tabular}
|
|
146 \end{center}
|
|
147 PPE よりも SPE で処理した方の FPS が若干向上した。
|
9
|
148 \if 0
|
3
|
149 \subsection{vacuum}
|
|
150 SceneGraph の処理の例題として、学生実験で作成されたゲーム vacuum を使用する。
|
|
151 vacuum には自機と吸収ブロック、敵ブロックの3種類のオブジェクトがあり、自機を上下左右に移動させ、ボタンを押している間は自機の周りのブロックを引き寄せ、うまく吸収ブロックだけを自機と衝突させるゲームである。このゲームのMoveとCollisionは以下のようになる。
|
|
152
|
|
153 \begin{figure}[htb]
|
|
154 \begin{center}
|
|
155 \includegraphics[scale=0.7]{image/vacuum.png}
|
|
156 \caption{vacuum のゲーム画面}
|
|
157 \label{fig:vacuum}
|
|
158 \end{center}
|
|
159 \end{figure}
|
|
160
|
|
161 [Move] vacuum のオブジェクトは全て独立して動くので、使用する SPE に均等に Property を割り振る。
|
|
162 SPE でオブジェクトの種類毎の Move 処理を行い、Property を更新して PPE に返す。
|
|
163
|
|
164 \if0
|
|
165 \begin{figure}[htb]
|
|
166 \begin{center}
|
|
167 \includegraphics[scale=0.43]{image/Move.pdf}
|
|
168 \caption{vacuum の Move}
|
|
169 \label{fig:Move}
|
|
170 \end{center}
|
|
171 \end{figure}
|
|
172 \fi
|
|
173
|
|
174 [Collision]
|
|
175 vaccum の Collision は自機と吸収ブロック(Collision A)、自機と敵ブロック(Collision B)の二つがある。
|
|
176 Collision の種類毎に SPE で動作する Collision Task を作成する。どちらの Collision も自機とブロックの衝突判定しか行わないので SPE には自機とブロックの Property を送り、SPE で2者間の衝突判定を行い、Property を更新して PPE に返す。(図\ref{fig:Collision})\\
|
|
177
|
|
178 \begin{figure}[htb]
|
|
179 \begin{center}
|
|
180 \includegraphics[scale=0.43]{image/Collision.pdf}
|
|
181 \caption{Collision に使う Property を各 SPE に渡す}
|
|
182 \label{fig:Collision}
|
|
183 \end{center}
|
|
184 \end{figure}
|
|
185
|
|
186 Move, Collision を SPE で処理する際に、SPE には SceneGraph ノードは送らない。代わりに vacuum の Move, Collision に必要な情報をまとめた Property を送る。
|
|
187 Property は SceneGraph ノードと1対1で対応しており、Coordinates, Angle, 親子関係の情報, ノードの生成消滅の情報を持つ。
|
|
188 PPE 側では返されてきた Property を元に SceneGraph を作成し Tree を再構成して Rendering に渡す。
|
9
|
189 \fi
|
3
|
190
|
|
191 \section{まとめと今後の課題}
|
|
192 \begin{itemize}
|
12
|
193 \item SPE 1基で SceneGraph を処理する例題はできたので、複数 SPE に均等に処理を割り振る例題の作成および、SPE での演算の SIMD 化。
|
3
|
194 \item Property から SceneGraph を生成し tree を構築する部分において、SceneGraph の新規生成と削除を考慮した設計を行う。
|
|
195 \end{itemize}
|
|
196
|
|
197 \thispagestyle{fancy}
|
|
198 \begin{thebibliography}{9}
|
|
199
|
|
200 \bibitem{cell}Sony Corporation.
|
|
201
|
|
202 Cell BroadbandEngine \texttrademark アーキテクチャ, 2006
|
|
203
|
|
204 \bibitem{spursengine}TOSHIBA: SpursEngine
|
|
205
|
|
206 \verb|http://www.semicon.toshiba.co.jp|\\
|
|
207 \verb|/product/assp/selection/spursengine/index.html|
|
|
208
|
|
209 \bibitem{cerium} SourceForge.JP: Cerium Rendering Engine
|
|
210
|
|
211 \verb|https//sourceforge.jp/projects/cerium/|
|
|
212
|
|
213 \bibitem{opencl} OpenCL
|
|
214
|
|
215 \verb|http://www.khronos.org/opencl/|
|
|
216
|
|
217 \bibitem{wataru} Wataru MIYAGUNI.
|
|
218
|
|
219 Cell 用の Fine-Grain Task Manager の実装, 2009
|
|
220
|
|
221 \end{thebibliography}
|
|
222 \end{document}
|