Platform SDK: DirectX |
ミップマップとは連続したテクスチャで、各テクスチャは同じ画像を徐々に低解像度にしたものである。ミップマップでの各画像の高さと幅、つまりレベルは、直前のレベルよりも 2 の累乗だけ小さい。ミップマップは正方形である必要はない。
視点に近いオブジェクトには、高解像度ミップマップ画像が使用される。オブジェクトが視点から遠ざかるに従って、低解像度のミップマップ画像が使用される。ミップマップ処理により、レンダリングしたテクスチャの品質が向上するが、使用するメモリは増加する。
Direct3D では、ミップマップはアタッチされたサーフェスのチェーンとして表される。このチェーンの先頭には最高解像度のテクスチャがあり、その後には次のミップマップ レベルのテクスチャが続く。このレベルの後には次のレベルのミップマップが続く、という順に最低解像度のミップマップになるまで続いていく。
次の図はこの例を示す。ビットマップ テクスチャ セットは、一人用ゲームの 3D コンテナの側面にある記号を表している。ミップマップとして作成すると、最高解像度のテクスチャがこのセットの先頭に来る。このミップマップ セットの連続する各テクスチャは、高さと幅が 2 の累乗ずつ小さくなっていく。この場合は、最高解像度のミップマップは、256 x 256 ピクセルである。次のテクスチャは 128x128 である。最後のテクスチャは 64x64 である。
この記号は、可視範囲内の最大距離にある。この記号から遠く離れた位置座標からゲームを開始する場合は、ミップマップ チェーンの中で最小の 64x64 テクスチャが表示される。
プレーヤーの視点がこの記号に近づくにつれて、徐々に高解像度のテクスチャが使用される。
最高解像度のテクスチャが使用されるのは、プレーヤーの視点がこの記号に最も近づいたときである。
これは、テクスチャの遠近エフェクトをシミュレートする方法の中ではオーバーヘッドが低い方法である。1 つのテクスチャを多くの解像度でレンダリングするよりも、さまざまな解像度で複数のテクスチャを使用する方が高速である。
Direct3D では、ミップマップ セットの中でどのテクスチャが最も希望出力に近い解像度であるかを評価し、ピクセルをそのテクセル空間にマッピングできる。最終的な画像の解像度がミップマップ セット内のテクスチャ間にある場合、Direct3D では両方のミップマップのテクセルを調べ、そのカラー値をブレンドする。
アプリケーションでミップマップを使用する場合は、ミップマップ セットを作成する必要がある。詳細については、「ミップマップ セットの作成」を参照すること。アプリケーションでは、ミップマップ セットをカレント テクスチャ セットの最初のテクスチャとして選択して、ミップマップを適用する。詳細については、「マルチ テクスチャ ブレンディング」を参照すること。
次に、Direct3D でテクセルのサンプリングに使用するフィルタリング方法を設定しなければならない。最も処理が速いミップマップ フィルタリングは、Direct3D で最も近いテクセルを選択する方法である。これ選択するには、D3DTFP_POINT 列挙値を使用する。Direct3D では、D3DTFP_LINEAR 列挙値を使用すると、より高品質なフィルタリング結果が得られる。このフィルタリングでは、最も近いミップマップが選択され、次に現在のピクセルがマッピングされる、テクスチャ内の位置座標の周辺テクセルの加重平均が計算される。