7

OpenGL ES 2.0 には、テクスチャ サンプリングに関する深刻な精度の問題があります。同様の問題に関するトピックを見てきましたが、この「歪んだ OpenGL ES 2.0 テクスチャ」の問題に対する実際の解決策はまだ見ていません。

これは、テクスチャのイメージ フォーマットや OpenGL カラー バッファとは関係ありません。精度エラーのようです。精度が失敗する具体的な原因はわかりません。頂点シェーダーに渡された頂点位置をスケーリングするだけでは問題が解決しないため、この歪みを引き起こすのはジオメトリのサイズだけではないようです。


テクスチャの歪みの例を次に示します。

テクスチャの問題は、OpenGL ES 2.0 の小規模なジオメトリに限定されています。それ以外の場合、テクスチャ サンプリングは正常に見えますが、頂点データが XYZ(0,0,0) の原点から離れるほど、粒子の粗い効果が徐々に悪化します。

これらのテクスチャの問題は、デスクトップの OpenGL では発生しません (Windows XP、Windows 7、および Mac OS X では正常に動作します)。

問題が発生するのは Android、iPhone、または WebGL (OpenGL ES 2.0 に似ています) だけです。


すべてのテクスチャは 2 のべき乗ですが、問題は引き続き発生します。

  • 頂点データのスケーリング- 頂点の XYZ 位置の値は、-65536 から +65536 浮動小数点の範囲です。

    • これが大きいことに気付いたので、頂点の位置を 1024 で割ってジオメトリを縮小し、うまくいけばより正確な浮動小数点の精度を得ようとしましたが、これはテクスチャの歪みの問題を修正または軽減しませんでした
  • モデルビューのスケーリングまたは射影行列のスケーリングは役に立ちません

  • テクスチャ フィルタリングオプションを変更しても効果がない

    • ミップマッピングを無効にするか、GL_NEAREST/GL_LINEAR を使用しても何も起こりません
    • 異方性を有効/無効にしても何も起こりません
    • GL_CLAMP を使用してもバンディング効果が発生する
  • 頂点シェーダーに渡されたテクスチャ座標を分割し、それらをフラグメント シェーダーで正しい値に乗算しても機能しません。

  • precision highp sampler2D、highp float、highp int - フラグメントまたは頂点シェーダーでは何も変更されませんでした (lowp/mediump も機能しませんでした)

私は、この問題はある時点で解決されなければならないと考えています.OpenGL ES 2.0ベースのゲームが大規模で非常に詳細なジオメトリをレンダリングできることを見て

4

1 に答える 1

1

これは通常のテクスチャ アトラスの問題です。中間テクスチャの線形補間を制限する設定はありません。それがハードウェアの仕組みです。

この問題を回避するには、フラグメント プログラムで最も近いフィルター テクスチャ ルックアップを使用します。このプログラムは、テクスチャ タイルのサイズと位置を法としてテクスチャ ルックアップを計算し、線形フィルタリングを手動で実行します。

于 2012-07-07T01:05:14.230 に答える