Mercurial > hg > Papers > 2008 > gongo-ess
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}