view cerium.tex @ 10:1d3cd0c9eddb

*** empty log message ***
author gongo
date Mon, 14 Jul 2008 21:29:17 +0900
parents 30b41d745225
children ae4f04bc66a4
line wrap: on
line source

\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 では並列度を維持することができる。

Cerium は、C++ で実装されており、プログラム行数は 6075 行である。

\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}

このパイプラインは Scheduler レベルではなく、
Task Level でのパイプラインを表しており、
\figref{fig:cerium} の3つのステージを並列に動かす事で並列度を上げている。