【GAMES101】Lecture05,06 ラスタライズ精要

この記事の写真は GAMES101 コースウェアからのものです。

注: このコースのすべての変換は右手系に基づいています。

透視投影で視錐台を表示

ここに画像の説明を挿入

前回の講義で、透視投影が 2 つのステップに分かれていることを知りました。スクッシュ投影と直交投影です。前者は、錐台を、近い平面をベースとして直方体に圧縮します (6 つのパラメーター n 、 f 、 l 、 r 、 bを使用できます) 、tn、f、l、r、b、tn f l r b t は一意に決定されます)、後者は中心を原点として直方体を[ − 1 , 1 ] 3 [-1,1]^3[ 1 1 ]標準キューブ3個。

錐台は、視錐台と、近平面と遠平面の深さf 、 nf、nで構成できます。f nが決定され、錐台は次の 2 つのパラメーターによって決定される必要があります。

  1. ほぼ平面幅wwwそしてハイハイアスペクト比は、 h :aspect : = wh aspect:=\frac{w}{h}によって決定されますある種_ _ _:=h

  2. 垂直視野: fov Y : = 2 arctan ⁡ h / 2 ∣ n ∣ fovY:=2\arctan \frac{h/2}{\vert n \vert}f o v Y:=2アークタンn h / 2。( n < 0 n< 0n<0 )

注: 垂直視野角は水平視野角に置き換えることもできます。この 2 つのステータスは同等です。一方を決定するだけで他方を押すことができます。

錐台パラメータと直方体の頂点座標の変換

ここでは、z 軸が近平面を底面として直方体の中心を垂直に通過すると仮定しています。つまり、− l = r > 0 、− b = t > 0 -l=r\gt0,-b =t\gt0l=r>0 b=t>0
ここに画像の説明を挿入

ラスタライズ

ラスター == ドイツ語で画面
ラスタライズ == 画面上に描画

スクリーンスペース

ここに画像の説明を挿入

Canonical Cube から XY スクリーン (スクリーン) への変換 - ビューポート変換

画面は 2 次元であるため、変換は z 方向とは無関係であり、XY 画面の変換プロセスは[ − 1 , 1 ] 2 [-1,1]^2となります。[ 1 1 ]2[ 0 , 幅 ] × [ 0 , 高さ ] [0,幅]\times[0,高さ][ 0 ,w i d th ] _×[ 0 ,h e i g h t ] の場合、プロセスは最初にズームし、次に左下隅を( 0 , 0 ) (0,0)( 0 ,0 )それにもかかわらず、変換は依然として 3 次元空間変換であるため、変換行列は依然として4 × 4 4\times44×
ここに画像の説明を挿入

この時点では、ポーズを決めてシャッターを押す準備をしているのと同じですが、まだ写真は形成されていないため、次のステップでは、画面に表示される連続した画像を離散的なピクセル (グリッド) に分割します。

三角メッシュ

ここに画像の説明を挿入

三角形には、グラフィックスで広く使用される優れた特性がいくつかあります。

  1. 他のすべての多角形を構成できる、辺が最も少ない多角形。

  2. 三角形は歪みのない平面を形成する必要があります。

  3. 三角形の内部定義は非常に明確で、凸多角形でなければなりません。凹多角形では一連の厄介な問題が発生します。

  4. 三角形内の任意の位置の値は、3 つの頂点の値 (重心座標系) から計算できます。

スクリーンに投影された三角形をピクセル値で近似する - サンプリング(Sampling)

サンプリングの定義: 一般的に言えば、関数の定義領域は (少なくとも私たちの関心の範囲内では) 連続的であり、サンプリング プロセスでは、定義領域内のいくつかの離散値を入力として選択して、一連の離散関数値(出力)。簡単に言えば、サンプリングは連続から離散のプロセスです。

基本フロー: ピクセル( x , y ) (x,y)の場合( x ,y )中心座標( x + 0.5 , y + 0.5 ) (x+0.5,y+0.5)( ×+0.5 y+0.5 ) を使用して三角形の内側かどうかを判断し、三角形の内側にある場合は、対応する値を( x , y ) (x,y)( x ,y )ピクセル。

考慮すべき質問:

  1. ピクセル座標点が三角形の内側にあると判断するにはどうすればよいでしょうか? - 外積;

  2. 上記の手順は画面内のすべてのピクセルに対して実行する必要がありますか? —— いいえ、バウンディング ボックスを使用して、三角形の頂点の各次元の最大値と最小値を取得することで決定できる AABB (Axis-Aligned Bounding Box) などの不必要な計算を減らします。

  3. パフォーマンスのボトルネックはありますか? —— もちろん、たとえば、薄くて斜めの三角形は各行の左右のピクセル範囲を記録できるため、時間とオーバーヘッドを節約できます。現時点では他の方法もあります。

    ここに画像の説明を挿入

  4. 完璧に復元できるでしょうか?—— いいえ、ピクセルにはサイズがあり、ギザギザ(ジャギー)があるため、この現象はエイリアシング(エイリアシング)とも呼ばれ、後で解決することに焦点を当てます。

エイリアスとアンチエイリアス

サンプリングに関するいくつかの問題とその理由:

① 鋸歯状; ② モアレ (アンダーサンプリング); ③ ホイール効果 (高速走行時にホイールが反時計回りに回転する)。

最初の 2 つの問題は空間的な問題であり、3 番目の問題は時間的な問題です。それらの原因は、信号の周波数が高すぎるにもかかわらず、サンプリング周波数が低すぎることです。

ここに画像の説明を挿入
エイリアシングの定義: 特定の一連のサンプリング ポイントには、それに完全に一致するさまざまな周波数の信号が多数あり、通常はアンダーサンプリングが原因で、サンプリング ポイントが低周波信号であるように見えます。
ここに画像の説明を挿入

また、時間・空間領域から周波数領域への変換(フーリエ変換)、逆変換(フーリエ逆変換)、フィルタリング、コンボリューションなどのデジタル画像処理関連の内容についても触れています。 ここでは、知っておくだけで十分です。画像の本体は低周波信号であり、画像の細部(輪郭など)は高周波信号であり、いわゆるぼかしは高周波信号をフィルタリングすることです。

畳み込み定理の結論を理解してください。空間領域の畳み込みは周波数領域の積と等価であり、逆に周波数領域の畳み込みも空間領域の積と等価です。
ここに画像の説明を挿入
ここに画像の説明を挿入
サンプリングとは「繰り返し周波数の内容」に相当します。

ここに画像の説明を挿入

エイリアシングは混合周波数コンテンツ」に相当します。

スパース サンプリングは低いサンプリング周波数に対応するため、コピー中にインターリーブが発生する可能性が高く、その結果エイリアシングが発生します。

ここに画像の説明を挿入

アンチエイリアシング戦略 1: サンプリング レートを上げる

ここに画像の説明を挿入

サンプリング レートを高めることは、周波数領域で繰り返される部分間の距離を増やすことに相当するため、物理デバイスの解像度を高める必要があります。ただし、アンチエイリアシング戦略の場合、同じデバイスにそのような変更を加えるのは不可能であり、置き換えることができたとしてもコストが比較的高いため、ここではあまり議論しません。

アンチエイリアシング戦略 2: 信号をぼかしてからサンプリングする

ここに画像の説明を挿入

ピクセルグリッド内に部分的に現れる三角形については、ピクセルグリッド内の面積比に従ってサンプリングを実行できます。

SSAA (スーパー サンプル アンチエイリアシング)、つまりスーパー サンプリング アンチエイリアシングの原理は、ピクセル グリッド内の複数のサンプリング ポイント (2x2) を細分化し、これらのサンプリング ポイントが三角形内に位置するかどうかを判断し、それらのサンプリング ポイントを加算することです。値と平均化は、サンプリング レートを上げることと同じです。MSAA (Multi-Sample Anti-Aliasing)、つまりマルチサンプル アンチエイリアシングは SSAA とは異なり、パフォーマンスが最適化されていますが、いくつかの問題もあります。

ブロガーが SSAA と MSAA について優れた概要を書いています。ここをクリックして参照してください

さらに、ビジネスで使用される DLSS だけでなく、FXAA と TAA についても理解する時間があります。
ここに画像の説明を挿入

可視性 / オクルージョン

ペインターのアルゴリズムと Z バッファー

Painter's Algorithmでは、Z の深度に応じて三角形を遠いところから近いところに並べ替え(深さがマイナスなので、z 値の小さいほうから大きいほうに並べ替える)、遠いほうから近いほうに三角形を描画(上書き)するのですが、これは解決できないケースがあります。つまり、以下に示すように、複数の三角形が一緒に「メッキ」される可能性があります。

ここに画像の説明を挿入
このようにして、ペインターのアルゴリズムは失敗します。実際、私たちの最終的な目標は、三角形の順序を決定することではなく、各ピクセルが最終的に何を描画するかを決定することです。

Z バッファアルゴリズムは各ピクセルを考慮し、各ピクセルの現在の最新の深度を記録します。これは、各グリッド ピクセルがどの三角形からのものであるかに関係なく、最も近いピクセルを描画する必要があるためです。

アルゴリズムの擬似コード:
ここに画像の説明を挿入

複雑さ: O ( n ) O(n)O ( n )nnnは三角形の数です。

アルゴリズムの説明:

  1. ここでの z は絶対値、つまりすべて正の値を取ることと同じです。

  2. 実際には、演算の単位は必ずしもピクセルである必要はなく、ピクセル内のサンプリング ポイントである場合もあります。

制限(または疑問):

  1. 同じ位置に同じ深さを持つ三角形ピクセルの場合、Z バッファーは解決策を提供しません。また、このコースではこの状況の解決策については説明しません。

  2. Z-Buffer は透明なオブジェクトを処理できません。

  3. ピクセル グリッドの場合、深さが異なる複数の三角形がピクセル グリッド内に表示されることがありますが、この状況に対処するには、深さが最も近い三角形ピクセルのみを描画するのでしょうか。(ボスを知っている場合は、コメント欄にメッセージを残してください)

作者のレベルは限られているので、要約に不適切な点があれば、批判して修正してください〜

おすすめ

転載: blog.csdn.net/weixin_42430021/article/details/127183188