view rendering.tex @ 9:a9f3e198cb96

*** empty log message ***
author akira
date Wed, 05 Mar 2008 19:23:59 +0900
parents 5cfa596eece1
children
line wrap: on
line source

\section{レンダリングエンジン}
ここでは例題として用いるレンダリングエンジンCeriumについて説明する。
Ceriumはシーングラフ、レンダリングエンジン、タスクマネージャから構成され
る。(図\ref{fig:Cerium})
\begin{figure}[htb]
\begin{center}
\includegraphics[scale=.4]{./fig/cerium_detail.pdf}
\end{center}
\caption{Ceriumの要素}
\label{fig:Cerium}
\end{figure}

SceneGraphはBlender3Dモデリングツールから出力されるポリゴン情報やテクス
チャ情報などが記述されたxmlをパースし、XYZの頂点座標を取得する。図\ref{fig:Cerium}のSceneGraphの入力はXYZの頂点座標となる。XYZの頂点座標をキー入力にあわせて、拡大や縮小、移動などを行うのがTransformとなる。XYZの頂点をポリゴンにまとめるのがGatherとなる。
ポリゴンとは図\ref{fig:SPAN}の三角形の各頂点の値のことである。
\begin{figure}[htb]
\begin{center}
\includegraphics[scale=.4]{fig/span.pdf}
\end{center}
\caption{データ構造}
\label{fig:SPAN}
\end{figure}

レンダリングエンジンはSPANを生成する部分とSPANにRGBをマッピングし描画す
る部分とに分けることができる。SPANとは図\ref{fig:SPAN}のポリゴンに対するある特定のY座標に関するデータを抜き出した構造体である。
SPANを生成する部分は図\ref{fig:Cerium}のcreate\_spanの部分に相当する。Create\_SPANではポリゴンからSPANを計算する部分(CreateSPAN)とテクスチャを読み込む部分(TextureImage)のみ行う。

SPANにRGBをマッピングし描画する部分は図\ref{fig:Cerium}のDRAWの部分に相当する。
DRAWではCreate\_SPANで生成されたSPANを受け取り、ZBufferをみながら描画するデータをメモリに書き込んでいく。ZBufferとは画面サイズ分用意されたZのメモリ空間で、XY座標に対する描画されるZの値が代入されている。SPANのZ座標とZBufferのZを比較し、カメラからみてどちらが手前にあるかというのを判断するのがDRAWのZcompareである。
実際にZBufferと比較して描画するSPANであるならば、XY座標に対してのテクスチャのRGB情報をメモリに書き込む。その役目が図\ref{fig:Cerium}のMapping RGBとなる。RGB情報をマッピングした後、実際に描画するのがWriteFBとなる。

タスクマネージャはタスクを管理するライブラリで、タスクと呼ばれる分割され
た各プログラムを依存関係を考慮しながらメモリ上にマッピングし、SPU上では
そのプログラムをDMAによりロードする。(図\ref{fig:taskmanager})\\
\begin{figure}[htb]
\begin{center}
\includegraphics[scale=.5]{./fig/taskmanager.pdf}
\end{center}
\caption{タスクマネージャ}
\label{fig:taskmanager}
\end{figure}
これはSPUのLSが256Kbしかないため必要になる。
タスクマネージャは次のような関数で実行することができる。
\begin{table}[htb]
\begin{center}
\begin{tabular}{|c|c|}
\hline
set\_symbol & タスクのID登録 \\ \hline
open & IDの取得 \\ \hline
create\_task & タスクを作る \\ \hline
spawn\_task & 実行タスクQueueに追加 \\ \hline
set\_depend & 依存関係の考慮 \\ \hline
set\_cpu & タスクを行うCPUのセット \\ \hline
run & 実行タスクQueueの実行 \\ \hline
\end{tabular}
\caption{タスクマネージャの関数}
\label{table:task_func}
\end{center}
\end{table}
\\
タスクマネージャは登録されたタスクをみて、プログラムのロードを行い、
入力データの読み込み、計算、出力データの書き出しを行う。またcreate\_taskのときに入力データのサイズやアドレスなどが登録される。またタスクマネージャはPPUで実行するかSPUで実行するかを明示的に書くことができる。またSPUを使う場合はSPUコアを使うことができる。