ARM GPUセミナー中級編

あとで自分メモとして参照するために まとめておきました。
2
前へ 1 2 ・・ 5 次へ
kinneko @kinneko

#armjp 頂点処理の入力データ。カラー、座標、法線、テクスチャ座標。

2014-04-25 14:13:19
kinneko @kinneko

#armjp 頂点はいまはまとめて配列で渡す。VBO: Vertex Buffer Object。頂点データは、モデリングツールから出力も可能。FBX, COLLADAなどのフォーマットがある。

2014-04-25 14:14:56
kinneko @kinneko

#armjp モデル変換。オブジェクト空間->ワールド空間。対象は頂点と法線。規格によって呼び方が違う。

2014-04-25 14:16:26
kinneko @kinneko

#armjp ビュー変換。カメラを原点に。あとの射影とクリップが楽になる。通常はモデルとビューの変換を配列でまとめて実行。

2014-04-25 14:17:15
kinneko @kinneko

#armjp 射影変換。正射影と透視射影。視点座標を正規化デバイス座標に変換。

2014-04-25 14:19:04
kinneko @kinneko

#armjp ビューポート変換。ウインド座標系に変換。画面表示用。まだレンダリングされておらず、頂点処理までしかしていない。

2014-04-25 14:20:32
kinneko @kinneko

#armjp ライティング。近似的にやっている。局所ライティングモデル。光源が増えるほど処理が増える。それぞれ計算して足し合わせ。何かで遮断されている影は考慮されていない。OpenGLのモデルだと難しい処理。他のテクニックで影をつける。

2014-04-25 14:23:36
kinneko @kinneko

#armjp 光源の強度は、拡散光、鏡面光、環境光。独立に計算して合計。簡単に計算できてリアリティが高い。うまくいっているからこうやっているだけ?

2014-04-25 14:25:45
kinneko @kinneko

#armjp 現在はライティングは自分で定義できる。

2014-04-25 14:26:55
kinneko @kinneko

#armjp ラスタライズ処理。幾何データをフラグメントに変換。トライアングルセットアップ->ラスタ化。塗る。専用ハードで実行しているケースが多い。

2014-04-25 14:28:25
kinneko @kinneko

#armjp トライアングルセットアップ。頂点から三角形へ切り出し。塗りつぶしに必要な差分値を計算。塗りに割り算を使わないようにして高速化。三角形だけだと処理が楽。四角だと場合分けが必要になる。

2014-04-25 14:30:52
kinneko @kinneko

#armjp ラスタライズのルール。プログラマが意識する必要はない。頂点単位のライティング結果を補完。出力はフラグメント。画素毎のXYZテクスチャ座標、RGBA、(Nx, Ny, Nz)。頂点と補完だけ。現在はパーピクセルライティングという方法もある。

2014-04-25 14:33:34
kinneko @kinneko

#armjp 歪みが大きい変換の時は、奥行きを考慮してパースペクティブコレクションなどの補完もおこなっている。

2014-04-25 14:33:57
kinneko @kinneko

#armjp シェーディングの種類。フラット(ポリゴンごとに一色ベタ)、グロー(頂点だけ計算し、あとは補完)、Phoneシェーディング(法線を三角形全体で補完しピクセルごとに計算)。

2014-04-25 14:35:54
kinneko @kinneko

#armjp どのピクセルを塗りつぶすのか? ピクセル中心が領域内にある場合。TOP-LEFTルール。ポリゴンが重なっても、二度塗りがなくなる。二度塗ると境目が薄い色になってしまう。

2014-04-25 14:38:07
kinneko @kinneko

#armjp フラグメント処理。ここからはピクセルごとの処理になる。メモリのRWが爆発的に増える。パプラインの中の機能のEnable/Disableをコマンドで制御。固定機能パイプラインでは順番が決まっていた。今は自由に組み合わせできる。

2014-04-25 14:39:58
kinneko @kinneko

#armjp ラスタライズが終わった色。入力Sourceデータ。すでに書いてある色はDestination。S/D。出力データ。カラーデータ、Z値(Depth)、ステンシル値(St)。フレームバッファに書く。デプスバッファとステンシルバッファは表示には関係ないが後で使うので保持

2014-04-25 14:43:16
kinneko @kinneko

#armjp データフロー。テクスチャデータとフレームバッファを読んで修正して書き直す。

2014-04-25 14:43:54
kinneko @kinneko

#armjp テクスチャマッピング。フラグメントにテクスチャを貼る。テクスチャはUV空間にマッピング。フラグメントのUV座標からテクスチャデータを適用するか決定。テクスチャの個々のデータはテクセルと呼ばれる。

2014-04-25 14:46:15
kinneko @kinneko

#armjp フィルタ。テクスチャとUV空間でのマッチング。最近傍補完、最近傍のテクセルを選択、処理が楽、ジャギーが出る。バイリニア補完、周辺の2x2で線形補間。バイキュービック、周辺の4x4。

2014-04-25 14:49:32
kinneko @kinneko

#armjp フィルタにも限界が。伸ばし過ぎるとおかしくなる。LOD: Level of Detail。サイズにあったテクスチャを使う。1/2, 1/4, 1/8を自動生成して自動で選んでくれるMIPMAP。

2014-04-25 14:50:53
kinneko @kinneko

#armjp マルチテクスチャ。シングルパス・マルチ・テクスチャ。1つのレンダリングパスに2つ以上のテクスチャ。地図と雲のような例。

2014-04-25 14:52:02
kinneko @kinneko

#armjp テクスチャ圧縮。メモリのバス帯域を食うので圧縮してGPUで展開して帯域を確保。オフラインで圧縮しておける。GPUがサポートしている圧縮アルゴリズムを使う必要がある。ETC1,ETC2(ES3から)はフリー。atoha

2014-04-25 14:54:31
kinneko @kinneko

#armjp あとは各社いろいろ。ARMはASTCはロイヤリティーフリー。クロノスグループに提供。ES3の拡張に入った。GPUがサポートしていないと使えない。サポートもバラバラ。結局制約の多いETC1しか使えないという課題。

2014-04-25 14:56:07
kinneko @kinneko

#armjp ASTCはビットレートを選べる。用途によって品質と速度をコントロールできる。

2014-04-25 14:57:10
前へ 1 2 ・・ 5 次へ