Mercurial > hg > Papers > 2008 > gongo-ess
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つのステージを並列に動かす事で並列度を上げている。