view cerium-rendering.tex @ 5:30bf38a518e8

*** empty log message ***
author gongo
date Tue, 25 Mar 2008 09:48:38 +0900
parents 2ef36d40ee96
children b70a62630a57
line wrap: on
line source

\section{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 はテクスチャ情報のアドレスと高さと幅、それに加えて
ポリゴンのある Y 座標に対する左端のピクセル情報、右端のピクセル情報、
そして Span の長さを持つ。

生成された Span を SPE に DMA 転送し描画処理を行うわけだが、
全ての Span を SPE に送るのは問題がある。
先に述べたように、SPE が扱えるメモリ領域は 256KB と非常に小さい。
本研究の画面環境が 1920x1080 であるため、Span の情報は元より、
描画に使う Z Buffer のサイズも、
1 line だけで 1920 * 4byte(RGB$\alpha$) = 7 KB となる。
そこで、SPE に DMA 転送する前に、Y 座標を 8 line 毎に
Span のリストを生成する。これを SpanPack とする。
8 line 毎にとっている理由は、SPE が持てる Z Buffer が 8 line 分 (60KB)
ぐらいだろうという見解からくるものである。

Span が持つ情報からテクスチャを計算し、ピクセル毎の RGB$\alpha$情報を
取得する。しかし、SPE の メモリ領域の問題から、あらかじめ
全てのテクスチャを転送しておくことが不可能な場合がある。
それらを考慮し、テクスチャを分割する必要がある。
テクスチャは、8x8 の大きさに分割される。
Span はそれぞれのテクスチャに沿って生成される。つまり、
Span 一つにつき、分割したテクスチャ一つが DMA される。