テクセルとピクセル間の直接マッピング

テクセルとピクセル間の直接マッピング

スクリーン上のピクセルにテクセルを直接マッピングするなど、アプリケーションでは通常、シーン内のジオメトリにテクスチャを適用する必要がある。たとえば、テクスチャ内のテキストをシーン内のオブジェクトに表示する必要があるアプリケーションを考える。テクスチャ内のテキスト情報をはっきりと表示するには、テクスチャを施すジオメトリが、テクスチャ フィルタリングによって崩れていないテクセルを確実に受け取るための何らかの方法が必要である。これが行われないと、ぼんやりした画像になったり、ポイント サンプル テクスチャ フィルタリングの場合にはエッジが粗くなる可能性がある。

Microsoft® Direct3D® では、画像とテクスチャのフィルタリングをサポートする一方で、ピクセルとテクスチャのサンプリングを単一化するように、ピクセルとテクスチャのサンプリング ルールが慎重に定義されている。このため、テクスチャのテクセルをスクリーン上のピクセルに直接マッピングする場合は、難しい作業が必要になる。この作業を行うには、Direct3D によって、頂点に対する浮動小数点テクスチャ座標が、ラスタライザで使う整数ピクセル座標にどのようにマッピングされるかを十分に理解しておく必要がある。

Direct3D では、次の計算を実行して、浮動小数点テクスチャ座標をテクセル アドレスにマッピングする。

計算

これらの公式で、Tx と Ty は水平方向と垂直方向の出力テクセル座標である。uv は、頂点に対して提供される水平方向と垂直方向のテクスチャ座標である。Mx と My は、現在のミップマップ レベルでの水平方向と垂直方向のテクセル数を表す。説明の後半では、テクセルとピクセル間の水平方向マッピングについて解説する。垂直方向マッピングは水平方向にマッピングする場合と同じである。

テクスチャ座標の下限と上限の 0.0 と 1.0 をこれらの公式に代入すると、テクスチャ座標 0.0 は反復テクスチャ マップの最初と最後のテクセル間の中間点にマッピングされる。テクスチャ座標 1.0 は、現在の補間テクスチャ マップの最後のテクセルと次の補間テクスチャ マップ間の中間点にマッピングされる。テクセル幅が 4 の反復テクスチャで、ミップマップ レベルが 0 の場合、座標 0.0 と 1.0 は、次の図に示すようにマッピングされる。

座標のマッピング

マッピングについて理解しておくと、単純なバイアスをスクリーン空間のジオメトリ座標に適用して、各テクセルを対応するピクセルに強制的にマッピングすることができる。たとえば、4 つの辺があるポリゴンで、前のテクスチャの各テクセルをスクリーン上の 1 つだけのピクセルにマッピングする場合、ジオメトリ座標でピクセルを強制的にオーバーラップして、各テクセルの中心を各ピクセルの中心に効果的に配置する必要がある。この結果、アプリケーションで多くの場合必要な 1 対 1 マッピングになる。

テクセル幅が 4 のテクスチャをピクセル座標 0 ~ 3 にマッピングするには、それぞれスクリーン空間座標 –0.5 ~ 3.5 とテクスチャ座標 0.0 ~1.0 を持つ 4 辺から成るポリゴンを、2 つの三角形を基に描画する。たとえば、スクリーン座標 0.0 にあるピクセルを例として考える。0.0 は最初の頂点 (-0.5) から 0.5 ピクセルだけ離れた位置座標にあり、合計幅が 4.0 であることから、補間テクスチャの座標は 0.125 になる。これをテクスチャ サイズ 4 を基にスケーリングすると、座標は 0.5 になる。バイアスを 0.5 だけ減じるとテクスチャ アドレスが 0.0 になる。これは、マップ内の最初のテクセルに完全に対応する。

要約すると、テクスチャ座標はテクスチャ マップを両側で均等にオーバーラップする。次の図は、テクセル幅が 4 のテクスチャのマッピングを示している。

テクスチャ座標

ピクセル座標は、テクセル座標の場合と同様に正規化される。したがって、頂点がレンダリング先のピクセルをオーバーラップし、その頂点でテクスチャ座標 0.0 と 1.0 を使う場合、ピクセルとテクセルが一列に並ぶ。両方のサイズがほぼ同じで適切に整列していれば、次の図に示すように、これらはテクセルとピクセル間で正確に対応する。

テクスチャ座標とスクリーン座標