アプリケーションはテクスチャ フィルタリングを使用する必要はありません。 Direct3D は、多くの場合、整数に評価されないテクセル アドレスを計算し、最も近い整数アドレスを持つテクセルの色をコピーするように設定できます。 このプロセスは、最近点サンプリングと呼ばれます。 最も近いポイントサンプリングは、テクスチャのサイズが画面上のプリミティブのイメージのサイズに似ているかのようにすることができます。 そうでない場合は、テクスチャを拡大または縮小する必要があります。 テクスチャ サイズとプリミティブ イメージ サイズの不一致の結果は、チャンク、エイリアス化、またはぼやけたイメージのいずれかになります。
テクスチャが 2 つのテクセル間の境界でサンプリングされるときにグラフィックアーティファクトを引き起こす可能性があるため、最も近いポイントサンプリングを慎重に使用してください。 この境界は、サンプリングされたテクセルがテクセル間で遷移するテクスチャ (u または v) に沿った位置です。 ポイント サンプリングを使用すると、1 つのサンプル テクセルまたはもう 1 つのテクセルが選択され、境界を越えると、結果が 1 つのテクセルから次のテクセルに急激に変化する可能性があります。 この効果は、表示されるテクスチャに望ましくないグラフィック アーティファクトとして表示されることがあります。 線形フィルタリングを使用すると、隣接するテクセルの両方から結果のテクセルが計算され、テクスチャ インデックスが境界を通過するときにそれらのテクセル間がスムーズにブレンドされます。
この効果は、非常に小さなテクスチャを非常に大きな多角形 (拡大と呼ばれる操作) にマッピングする場合に見られます。 たとえば、チェッカーボードのように見えるテクスチャを使用する場合、最も近いポイント サンプリングを実行すると、エッジが明確に表示されるチェッカーボードが大きくなります。 これに対し、線形テクスチャ フィルタリングでは、多角形全体でチェッカーボードの色が滑らかに変化するイメージが生成されます。
ほとんどの場合、アプリケーションは可能な限り最も近い点のサンプルを回避することで、最適な結果を得られます。 現在のハードウェアの大部分は線形フィルタリング用に最適化されているため、アプリケーションのパフォーマンスが低下しないようにします。 テクスチャを使用して読み取り可能なテキスト文字を表示する場合など、必要な効果で最も近いポイント サンプリングを使用する必要がある場合は、テクセル境界でのサンプリングを避けるためにアプリケーションを非常に注意する必要があります。これにより、望ましくない効果が発生する可能性があります。 次の図は、これらの成果物の外観を示しています。
グループの右上にある 2 つの四角形は、隣の正方形とは異なり、対角線状にずれているように見えます。 このようなグラフィックアーティファクトを回避するには、最も近いポイントフィルタリングのための Direct3D テクスチャ サンプリング ルールに精通している必要があります。 Direct3D は、[0.0, 1.0] (0.0 ~ 1.0, 包括) の浮動小数点テクスチャ座標を、[- - 0.5, n - 0.5] の範囲の整数テクセル空間値にマップします。ここで、n はテクスチャ上の特定の次元のテクセルの数です。 結果のテクスチャ インデックスは、最も近い整数に丸められます。 このマッピングでは、テクセル境界でサンプリングの不正確さが発生する可能性があります。
簡単な例として、ラップ テクスチャ アドレッシング モードでポリゴンをレンダリングするアプリケーションを想像してください。 Direct3D で使用されるマッピングを使用して、u テクスチャ インデックスは次の図に示すように、幅が 4 テクセルのテクスチャにマップされます。
この図のテクスチャ座標 0.0 と 1.0 は、テクセル間の境界に正確に存在します。 Direct3D が値をマップする方法を使用すると、テクスチャ座標の範囲は [ - 0.5, 4 - 0.5] です。4 はテクスチャの幅です。 この場合、サンプリングされたテクセルはテクスチャ インデックス 1.0 の 0 テクセルです。 ただし、テクスチャ座標が 1.0 よりわずかに小さい場合、サンプリングされたテクセルは 0 テクセルではなく n テクセルになります。
これは、画面空間に配置された三角形に対して最も近いポイント フィルター処理を行って、正確に 0.0 と 1.0 のテクスチャ座標を使用して小さなテクスチャを拡大すると、テクスチャ マップがテクセル間の境界でサンプリングされるピクセルが生じるという意味です。 テクスチャ座標の計算に誤りがあるが、小さい場合でも、テクスチャ マップのテクセル エッジに対応するレンダリングされたイメージ内の領域に沿ってアーティファクトが発生します。
この浮動小数点テクスチャ座標から整数テクセルへのマッピングを完全な精度で実行することは困難であり、計算に時間がかかり、一般的には必要ありません。 ほとんどのハードウェア実装では、三角形内の各ピクセル位置でテクスチャ座標を計算するために反復的なアプローチを使用します。 反復的なアプローチでは、反復中にエラーが均等に累積されるため、これらの不正確さが隠される傾向があります。
Direct3D 参照ラスタライザーは、各ピクセル位置でテクスチャ インデックスを計算するための直接評価アプローチを使用します。 直接評価は、操作の不正確さがよりランダムなエラー分布を示すという点で反復的なアプローチとは異なります。 その結果、参照ラスタライザーでは完全な精度でこの操作が実行されないため、境界で発生するサンプリング エラーがより顕著になる可能性があります。
最適な方法は、必要な場合にのみ、最も近いポイントのフィルター処理を使用することです。 これを使用する必要がある場合は、テクスチャ座標を境界位置からわずかにオフセットして、アーティファクトを回避することをお勧めします。
関連トピック