2Dスプライトゲームの場合、スプライトはX軸とY軸上を移動することがわかります。ただし、3Dゲームの場合、ゲームエンジンは3D環境をフラット2Dコンピューターモニターにレンダリングする方法をどのように計算しますか?
Math.PI
、たくさん。
2Dスプライトゲームの場合、スプライトはX軸とY軸上を移動することがわかります。ただし、3Dゲームの場合、ゲームエンジンは3D環境をフラット2Dコンピューターモニターにレンダリングする方法をどのように計算しますか?
Math.PI
、たくさん。
回答:
3Dスプライトは、深度、スケーリングサイズ、およびX / Y平面での動きを格納する新しいZ軸を取得します。遠くにあるスプライトはZ値が大きくなります。次に、スプライトのサイズとX / Y軸の動きをZ軸で割ります。他の人が指摘したように、これは3D透視投影です。これが私が見つけた最高のイラストです:
遠くにあるものは小さく見えるので、これは概念的に意味があります。彼らの見かけの動きも小さく見えます。
さらに、近いオブジェクトは遠いオブジェクトの上に描画する必要があります。繰り返しになりますが、これは概念的には理にかなっています。なぜなら、近くのオブジェクトは、後ろにあるオブジェクトのビューを遮るためです。
これらの手法は、スプライトレベルで実装できます。ただし、最もリアルな投影では、各スプライトに3Dモデルがあり、ピクセルレベルでレンダリングされます。
これは、私たちの世界の2D写真をカメラでキャプチャする方法と似ています。3D環境はX、Y、Z座標で説明されていますが、最終的には、X軸とY軸のみを持つ2D画面にマッピングする必要があります。これは投影によって行われ、各3Dポイントが2Dビュー平面に投影されます。
簡単に言えば、ビュー平面を通過することにより、3D空間の仮想カメラから各3D点に向かう投影線を想像できます。投影線が2D平面と交差する点は、3D点の投影です。正投影では、これらの投影線はすべて平行です。オブジェクトとカメラの間の距離は、投影された形状に影響を与えません。このタイプの投影は現実的ではありませんが、3Dエンジン(HUDなど)を使用して2Dグラフィックスを描画する場合など、特定の場合に役立ちます。もう1つのタイプの投影は、これらの線が収束して遠くのオブジェクトが小さく表示され、より現実的な結果が得られる透視投影です。このページには、プロセスを視覚化するのに役立ついくつかの図があります。
投影は、グラフィックスパイプラインで実行されるいくつかの変換オブジェクトの1つであり、通常、投影行列を使用して行われます。投影はZ座標を破棄することを意味しますが、実際には変換されたZ値が画面の奥行きの尺度として使用されているため、どのオブジェクトが表示され、どのオブジェクトが他のオブジェクトによって隠れているかを知ることができます。これはzバッファリングと呼ばれます。
これはすべて、プロジェクション、つまり優れた次元の別のスペースからスペースを定義できる幾何学的操作に関するものです(基本的に、この場合、3D環境からの2Dイメージを記述しています)。
簡単に言えば、これは3Dレンダリングエンジンが画像を生成する方法です(3Dシーンと投影を想定)。
結果の画像の各ピクセル
もちろんこれは単純なモデルです。煙などの特殊効果の反射/屈折/半透明のオブジェクトについては話していません...
マトリックス。むしろ、たくさんの行列計算。
初心者には怖いものです。通常、空間内の3D座標の束を画面上の2D座標に変換することに関連する3つの4x4行列があります(画面への奥行きをZとして含む)。
3D行列は、4x4グリッドに配置された16個の浮動小数点値のセットです。アルゴリズムを使用して必要な値を生成し、行列とベクトルの乗算を使用して、これらの数値が3次元ベクトル(X、Y、Z)を変換します。
[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ 0, 0, 0, 1 ]
これは単位行列です。それは本質的にベクトルの座標に何もしません。
1つ目は、ワールドまたはモデルマトリックスです。この行列は、原点(0、0、0)を中心にモデル化された個々のモデル(クレートなど)の頂点を取り、それらをワールド頂点座標に変換します。これには、オブジェクトのスケーリング、原点を中心とした回転、最終的にはシーン内の位置にオブジェクトを移動することが含まれます。
2番目の行列はビュー行列です。これは、世界の座標を取り、それらをビューのコンテキスト内にあるように変換します。カメラの概念は、通常、この行列を生成するために使用されます。
カメラには通常、位置ベクトル、方向またはターゲットベクトル、およびアップベクトルが含まれています。このアップベクトルは、カメラの「スピン」を表します。
これらのベクトルは、ルックアットマトリックスと呼ばれるものを生成するために使用されます。
これが及ぼす影響は、基本的にカメラの周りの世界を回転および移動してカメラを「配置」するという点で、ワールドマトリックスに似ています。
X軸に沿って10単位のカメラは、世界座標を反対方向に10単位変換します。
パズルの最後のピースは射影行列です。カメラのような透視投影では、マトリックスはほとんど画面の座標を変換して、x度の視野を持つ透視図のような錯覚を与えます。
画面のコーナー(640x480ゲームの場合)の観点から考えると、これは、投影が画面の2D座標内でZ軸に沿って座標を「整列」させる方法です。正射投影の場合、Z軸に沿って画面にスケーリングされません。遠近法の場合、オブジェクトが離れるほど、画面の範囲との関係でオブジェクトは小さくなります。