annotate rendering.tex @ 7:5cfa596eece1

*** empty log message ***
author akira
date Wed, 05 Mar 2008 11:25:22 +0900
parents cba427f17200
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
5a47ca319df5 Initial revision
akira
parents:
diff changeset
1 \section{レンダリングエンジン}
7
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
2 ここでは例題として用いるレンダリングエンジンCeriumについて説明する。
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
3 Ceriumはシーングラフ、レンダリングエンジン、タスクマネージャから構成され
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
4 る。(図\ref{fig:Cerium})
5
cba427f17200 *** empty log message ***
akira
parents: 4
diff changeset
5 \begin{figure}[htb]
cba427f17200 *** empty log message ***
akira
parents: 4
diff changeset
6 \begin{center}
7
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
7 \includegraphics[scale=.4]{./fig/cerium_detail.pdf}
5
cba427f17200 *** empty log message ***
akira
parents: 4
diff changeset
8 \end{center}
7
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
9 \caption{Ceriumの要素}
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
10 \label{fig:Cerium}
5
cba427f17200 *** empty log message ***
akira
parents: 4
diff changeset
11 \end{figure}
7
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
12
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
13 SceneGraphはBlender3Dモデリングツールから出力されるポリゴン情報やテクス
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
14 チャ情報などが記述されたxmlをパースし、XYZの頂点座標を取得する。図\ref{fig:Cerium}のSceneGraphの入力はXYZの頂点座標となる。XYZの頂点座標をキー入力にあわせて、拡大や縮小、移動などを行うのがTransformとなる。XYZの頂点をポリゴンにまとめるのがGatherとなる。
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
15 ポリゴンとは図\ref{fig:SPAN}の三角形の各頂点の値のことである。
4
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
16 \begin{figure}[htb]
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
17 \begin{center}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
18 \includegraphics[scale=.4]{fig/span.pdf}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
19 \end{center}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
20 \caption{データ構造}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
21 \label{fig:SPAN}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
22 \end{figure}
7
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
23
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
24 レンダリングエンジンはSPANを生成する部分とSPANにRGBをマッピングし描画す
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
25 る部分とに分けることができる。SPANとは図\ref{fig:SPAN}のポリゴンに対するある特定のY座標に関するデータを抜き出した構造体である。
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
26 SPANを生成する部分は図\ref{fig:Cerium}のcreate\_spanの部分に相当する。Create\_SPANではポリゴンからSPANを計算する部分(CreateSPAN)とテクスチャを読み込む部分(TextureImage)のみ行う。
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
27
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
28 SPANにRGBをマッピングし描画する部分は図\ref{fig:Cerium}のDRAWの部分に相当する。
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
29 DRAWではCreate\_SPANで生成されたSPANを受け取り、ZBufferをみながら描画するデータをメモリに書き込んでいく。ZBufferとは画面サイズ分用意されたZのメモリ空間で、XY座標に対する描画されるZの値が代入されている。SPANのZ座標とZBufferのZを比較し、カメラからみてどちらが手前にあるかというのを判断するのがDRAWのZcompareである。
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
30 実際にZBufferと比較して描画するSPANであるならば、XY座標に対してのテクスチャのRGB情報をメモリに書き込む。その役目が図\ref{fig:Cerium}のMapping RGBとなる。RGB情報をマッピングした後、実際に描画するのがWriteFBとなる。
5
cba427f17200 *** empty log message ***
akira
parents: 4
diff changeset
31
0
5a47ca319df5 Initial revision
akira
parents:
diff changeset
32 タスクマネージャはタスクを管理するライブラリで、タスクと呼ばれる分割され
5a47ca319df5 Initial revision
akira
parents:
diff changeset
33 た各プログラムを依存関係を考慮しながらメモリ上にマッピングし、SPU上では
3
4ee5cef03d5f *** empty log message ***
akira
parents: 2
diff changeset
34 そのプログラムをDMAによりロードする。(図\ref{fig:taskmanager})\\
4ee5cef03d5f *** empty log message ***
akira
parents: 2
diff changeset
35 \begin{figure}[htb]
4ee5cef03d5f *** empty log message ***
akira
parents: 2
diff changeset
36 \begin{center}
4ee5cef03d5f *** empty log message ***
akira
parents: 2
diff changeset
37 \includegraphics[scale=.5]{./fig/taskmanager.pdf}
4ee5cef03d5f *** empty log message ***
akira
parents: 2
diff changeset
38 \end{center}
4ee5cef03d5f *** empty log message ***
akira
parents: 2
diff changeset
39 \caption{タスクマネージャ}
4ee5cef03d5f *** empty log message ***
akira
parents: 2
diff changeset
40 \label{fig:taskmanager}
4ee5cef03d5f *** empty log message ***
akira
parents: 2
diff changeset
41 \end{figure}
7
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
42 これはSPUのLSが256Kbしかないため必要になる。
4
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
43 タスクマネージャは次のような関数で実行することができる。
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
44 \begin{table}[htb]
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
45 \begin{center}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
46 \begin{tabular}{|c|c|}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
47 \hline
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
48 set\_symbol & タスクのID登録 \\ \hline
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
49 open & IDの取得 \\ \hline
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
50 create\_task & タスクを作る \\ \hline
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
51 spawn\_task & 実行タスクQueueに追加 \\ \hline
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
52 set\_depend & 依存関係の考慮 \\ \hline
7
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
53 set\_cpu & タスクを行うCPUのセット \\ \hline
4
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
54 run & 実行タスクQueueの実行 \\ \hline
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
55 \end{tabular}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
56 \caption{タスクマネージャの関数}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
57 \label{table:task_func}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
58 \end{center}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
59 \end{table}
00ef3b6ef98a *** empty log message ***
akira
parents: 3
diff changeset
60 \\
7
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
61 タスクマネージャは登録されたタスクをみて、プログラムのロードを行い、
5cfa596eece1 *** empty log message ***
akira
parents: 5
diff changeset
62 入力データの読み込み、計算、出力データの書き出しを行う。またcreate\_taskのときに入力データのサイズやアドレスなどが登録される。またタスクマネージャはPPUで実行するかSPUで実行するかを明示的に書くことができる。またSPUを使う場合はSPUコアを使うことができる。