diff cerium.tex @ 0:d40dd97c0a50

Initial revision
author gongo
date Mon, 14 Jul 2008 00:27:51 +0900
parents
children 3ee6deaab278
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cerium.tex	Mon Jul 14 00:27:51 2008 +0900
@@ -0,0 +1,105 @@
+\section{Cerium}
+Cerium は Scene Graph, Rendering Engine, Task Manager から構成され、
+
+\begin{enumerate}
+  \item Scene Graph が持つ Polygon の座標から、実際に表示する座標の計算を行い、
+    PolygonPack を生成する
+  \item PolygonPack から、同じ Y 座標を持つ線分の集合 SpanPack を生成する
+  \item SpanPack を (Texture を読み込みながら) Z Buffer を用いて描画する
+\end{enumerate}
+
+という 3 つのタスクを持つ (\figref{fig:cerium})。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.35]{figure/cerium.pdf}
+    \caption{Cerium の 要素}
+    \label{fig:cerium}
+  \end{center}
+\end{figure}
+
+
+Ceritum は、Scene Graph、PolygonPack、SpanPack に対してデータ並列実行を
+行う。さらに、この 3 つのタスクは表示画面毎にパイプライン的に実行される。
+そのため、Ceritum では並列度を維持することができる。
+
+\subsection{Scene Graph}
+本研究では、ゲーム中の一つの場面 (Scene) を構成するオブジェクトやその振る舞い、
+ゲームのルールの集合を Scene Graph とする \cite{chiaki} 。
+Scene Graph のノードは
+親子関係を持つ木構造で構成される (\figref{fig:scene_graph}) 。
+そのため、Scene Graph の各ノードに対してデータ並列実行することが
+可能と言える。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.35]{figure/scene_graph.pdf}
+    \caption{Scene Graph Structure}
+    \label{fig:scene_graph}
+  \end{center}
+\end{figure}
+
+Scene Graph によりプログラムが個々のゲーム場面に分割され、
+ゲーム場面の遷移を StatePattern を用いて記述すると、
+if,case 文が排除できるので、プログラムの可読性と独立性が向上する。
+これにより、過去の PS、PS2 によるゲームプログラムの移植や改良にかかる
+作業時間短縮が見込める。
+
+Scene Graph Node は以下のようなデータと動作を持つ。
+
+\begin{itemize}
+  \item データ
+    \begin{itemize}
+      \item Vervatim : ポリゴンオブジェクトの頂点座標
+      \item Texture : ポリゴンオブジェクトのテクスチャ座標
+      \item TextureImage : テクスチャイメージ
+      \item TransMatrix : ポリゴンオブジェクトの変換行列
+      \item Coordinates : オブジェクトの座標
+      \item Angle : オブジェクトの角度
+    \end{itemize}
+  \item 動作
+    \begin{itemize}
+    \item Move : 自律的なオブジェクトの動き
+    \item Collision : 他ノードと衝突したときの動き
+    \end{itemize}
+\end{itemize}
+
+今回は Scene Graph の作成に、オープンソースの 3D モデリングツールである
+Blender \cite{blender}  を用いる。Blender でオブジェクトを作成し、
+ポリゴン情報やテクスチャ情報が記述された xml ファイルを出力する。
+その xml ファイルを Rendering Engine が受け取って Polygon を生成する。
+
+
+\subsection{Rendering Engine} \label{sec:rendering-engine}
+Rendering Engine は Polygon から Span を生成する部分と Span に RGB を
+マッピングし描画する部分と二つに分けることが出来る。
+Span とは、Polygon に対するある特定の Y 座標に関するデータを抜き出した
+ものである (\figref{fig:span}) 。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.48]{figure/span.pdf}
+    \caption{Span}
+    \label{fig:span}
+  \end{center}
+\end{figure}
+
+生成された Span を SPE が DMA で受け取り、Z Buffer を用いて
+Frame Buffer に書き込むピクセルの座標に対応する RGB 値を、
+テクスチャデータから取り出して書き込む。
+テクスチャデータは、プログラム起動時に一度だけ DMA で全て取得する。
+
+Frame Buffer は mmap されているので、ピクセルデータを DMA 転送することで
+描画している。
+
+\subsection{Cerium TaskManager}
+\figref{fig:cerium} のタスクを TaskManager に適用すると
+\figref{fig:manager-pipeline} のようにパイプライン的に動作する。
+
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.36]{figure/manager-pipeline.pdf}
+    \caption{Task Manager が行う Cerium Pipeline}
+    \label{fig:manager-pipeline}
+  \end{center}
+\end{figure}