230 likes | 370 Views
8 , 隠面消去法( Hidden Surface Algorithms). インタラクティブCG05S 蔡 東生. 参考文献. CG テキスト 4−2 Angel 5.6,9.10.3 Foley, et al, Chapter 15. はじめに. さきの講義で、z項を落とすことによってどのようにして相対的なサイズを正しく形状変換するか学んだ。 しかし、実際にどの形状をピクセルとして描くか? これは、 隠面消去問題とか、 visible surface determination 問題 と呼ばれている 現在まで数多くの隠面消去アルゴリズムが提案されている
E N D
8,隠面消去法(Hidden Surface Algorithms) インタラクティブCG05S 蔡 東生
参考文献 • CGテキスト 4−2 • Angel 5.6,9.10.3 • Foley, et al, Chapter 15
はじめに • さきの講義で、z項を落とすことによってどのようにして相対的なサイズを正しく形状変換するか学んだ。 • しかし、実際にどの形状をピクセルとして描くか? • これは、隠面消去問題とか、visible surface determination 問題と呼ばれている • 現在まで数多くの隠面消去アルゴリズムが提案されている • これらは3つの方法に特徴化される • Object-precision vs. image-precision (object-space vs. image-space) • -Object order vs. image order • Sort first vs. sort last
Object-precision Algorithm • 基本的考え: • 幾何学的プリミティブそのものを操作(我々は”オブジェクト”と”プリミティブ”を交互に使う) • オブジェクトはお互いに交差する • テストは非常に高い精度で行われる • Visible Obj. の最終リストはどのような解像度でも描かれる • 複雑性 • どのようなObjでもO(n2)オーダの可視判断計算を行う • mxmのディスプレイで、mの2乗の色を埋めないと行けない • 全ての複雑性は、 • 実装 • 困難 • 問題も多い
Sort First vs. sort last • Sort First: • カメラに対するある相対的深さベースのObjの順番を決め、表面に書き込む • 順番を決めるデータ構造をきめて、計算が重複しないようにする • Sort Last: • それぞれのピクセルから観測される深さ(Depth)をきめその最も近いDepthに対応する色を描く • 全てのDepthを考慮に入れられる。”怠けながら”Depth関係をトラックできる
Image-Precision Algorithm • 基本的考え • それぞれのピクセルから最も近い点を見つける • 解像度で計算が決まる • 高精度計算が要求されない • 複雑性 • 全てのピクセルで n Obj全部チェックすれば計算量は • よりよい方法は、それぞれのピクセルから見えるObjだけチェックする。例えば、見えるObjは平均でdコ(これはDepth Complexityとして知られている)。そうすると、 • 実装 • とっても簡単 • 実世界で多く使われている
Object order vs image order • Obj order • それぞれObjは一度だけ考慮し、そのピクセルを描く、次のObjを描く • 一つのピクセルを何度も描くことになるかもしれない • Image order • 各ピクセルは一度だけ考慮する、次に、そのピクセルに一番近いObjをさがす。次のピクセルにうつる • Objの関係を何度も計算し直すことになる
3つの隠面処理アルゴリズム • Z-buffer • Ray casting • Binary space partitioning (BSP)ツリー
Z-buffer • Z-bufferあるいはdepth-bufferアルゴリズム[Catmull, 1974]はもっともシンプルで広く使われている • Q:FARはなににセットされるべきか?
ラスター化(Rasterization) • ポリゴンの中のピクセルを埋めていく作業をラスター化(rasterization)と呼んでいる。 • ラスタ化注:z値とシェード値sは逐次計算できる(高速である!) • おもにハードウエア化されている
Z-buffer • 分類? • 実装簡単? • ハードウエア実装簡単? • 逐次追加描画計算(コヒーレンス)? • オンライン(全てのオブジェクトを最初から必要としない)? • もし、Objが動いたら、普通のフレーム描写より時間がかかる? • 視線が動いたら、普通のフレーム描写より時間がかかる? • ポリゴンベース? • 効果的シェーディング(隠面の色は計算しない) • 透明性を扱える? • 反射を扱える?
Ray casting • アイデア:Pijを中心とするピクセルを考える • 視点(COP)、CからPijを通してシーンに例を送る • 各Objとの交差点を計算 • 最も近い交差点を選択
Ray casting, cont. • 実装: • それぞれのレイをパラメータ化 • それぞれのObjOkはレイとの最初の交差点 を示す を返す • Q: を与えられたときどの点を描く面としてきめるか? • 注意:これらの計算はWorld Coordinate(世界座標系)で行う。投影変換行列は使わない
Ray Casting: 解析 • 分類? • 実装簡単? • ハードウエア実装簡単? • 逐次追加描画計算(コヒーレンス)? • オンライン(全てのオブジェクトを最初から必要としない)? • もし、Objが動いたら、普通のフレーム描写より時間がかかる? • 視線が動いたら、普通のフレーム描写より時間がかかる? • ポリゴンベース? • 効果的シェーディング(隠面の色は計算しない) • 透明性を扱える? • 反射を扱える?
BSP • アイデア: • どの視点からでも速く表示できる余分なpreprocessing(事前処理)を行っておく • 重点:ポリゴンAはもし: • Aの遠いサイドのポリゴンが最初に描かれる • つぎにAが描かれる • Aの前のポリゴンが次に描かれる なら、ポリゴンAは描かれる
BSPツリー続き • 注:少ないポリゴンを分割すれば性能は改善される • 注:world coordinateで計算。Projective行列は使わない
BSPツリー: 解析 • 分類? • 実装簡単? • ハードウエア実装簡単? • 逐次追加描画計算(コヒーレンス)? • オンライン(全てのオブジェクトを最初から必要としない)? • もし、Objが動いたら、普通のフレーム描写より時間がかかる? • 視線が動いたら、普通のフレーム描写より時間がかかる? • ポリゴンベース? • 効果的シェーディング(隠面の色は計算しない) • 透明性を扱える? • 反射を扱える?
Z-bufferのコスト • Z-bufferはハードウエアレンダリングにむいている • Z-bufferアルゴリズムで含まれる手順 • 三角をグラフィックスハードに送る • 三角形の各辺をモデル行列で変換 • それぞれの辺をシェードする • 投影変換行列を用いてい変換する • 逐次ラスタ化計算のセットアップを行う • ラスタ化し、z-bufferに従いフレームバッファーを更新する • Q:Z-bufferの全てのコストはいくらか?
Z-bufferコスト続き • 以下のようにコストを見積もる
Z-bufferの可視トリック • コスト関数が与えられたとして なにがz-bufferを加速させるか?
まとめ • この章で何を学んだか? • 太文字の用語 • 隠面消去アルゴリズムの分類 • Z-buffer, ray casting, BSP tree法の理解 • Z-bufferにおける高速化