2Dゲームアーティファクト-テクスチャの端

「透明なピクセルにも感情やPNGの透明度のあるアーティファクトがありますという記事に触発されて、2Dゲームの開発時に発生する可能性のあるその他の問題について話すことにしました。

この記事では、テクスチャフィルタリングに関連する2Dゲームを開発する際に直面しなければならない重要な問題について説明します。

これらのアーティファクトはすべて、テクスチャフィルタリングが有効になっている場合に発生します。 テクスチャのスケーリング、回転、または分数座標がある場合。

テクスチャフィルタリングについて少し。


テクスチャは、画面スペースの三角形に重ねられます。 通常、三角形のテクスチャフラグメントのサイズは、画面上の三角形の面のサイズとは異なります。 テクスチャフラグメントが画面上の顔画像よりも小さい場合、テクスチャフラグメントは顔のサイズに拡大されます。 テクスチャが画面上の顔よりも大きい場合、縮小します。 どちらの場合も歪みが発生します。 ろ過は、これらの歪みを減らす技術です。
フィルタリングは非常に便利ですが、判明したように、元の画像が元の画像と同一であることが重要なアプリケーションでいくつかの問題を引き起こす可能性があります。

この画像を表示させてください:


テクスチャのアドレス指定。


テクスチャアドレッシングモードは、三角形の上部のテクスチャ座標が画像を超えた場合のビデオプロセッサの動作を示します。 アドレス指定には、ラッピング(ラップ)、境界線の色(境界線の色)、単一のオーバーレイ(クランプ)、および反射(ミラー)の4つのタイプがあります。

WRAPテクスチャアドレッシングモードが設定されている場合、画像の片側からのピクセルが反対側に落ちます。


解決策:

必要な場合にのみWRAPアドレス指定を使用してください。 テクスチャをレンダリングするだけの場合は、CLAMPモードを使用します。

寸法、幅、または高さが2のべき乗の倍数ではないテクスチャ。


一部のビデオカードでは、サイズ、幅、または高さが2の累乗の倍数ではないテクスチャが補足されます。 そして、この画像を取得します。

もちろん、画像の拡大部分は画面に表示されません。 テクスチャバッファを受け取り、それが予想よりも大きいことを発見することで、その存在を知ることができます。 ただし、この部分はフィルタリングに関係します。 この結果、画像の境界でその一部を見ることができます。


解決策:

この領域の全体または一部を、境界線上にあるピクセルで塗りつぶすことができます。 このように:



一般的な解決策:


一般的な解決策として、画面に当たるテクスチャの領域の周囲に数ピクセルのフレームを残すことができます。


青いフレームは、画面に表示される領域です。

別の解決策は、画像の端に透明なフレームを残すことです。

ただし、この場合、最初に示されている記事から問題が発生する可能性があります。 しかし、それも解決可能です。 たとえば、 PVRTextureToolプログラムを使用できます。

ソース:
1.フランクD.ムーン。 DX9を使用した3Dゲームプログラミングの紹介。 Wordware Publishing、2003。ISBN:1-55622-922-4

Source: https://habr.com/ru/post/J149173/


All Articles