1

シームレスにタイル化できるテクスチャがあります。

fragmentshader で、ある時点で 1.0 から 0.0 にジャンプする関数を使用して、手続き的にテクスチャ座標 UVproc を計算します (ここでは、テクスチャがうまく繰り返されるはずです)。

問題は、この継ぎ目で、ルックアップが最小のミップマップ レベルからピクセル値を返すように見えることです。

出力をデバッグする場合

out = vec4(dFdx(UVproc.x), dFdy(UVproc.y),0,1);

次に、これらのピクセルでこれらのテクスチャ座標の有限差が非常に高く、したがって小さなミップマップ レベルがアクセスされることがわかります (これらのピクセルで 1 から 0 へのジャンプがあるため、有限差が大きくなります)。

textureLod() を使用して手動で mipmaplevel 0 にアクセスすると、この問題は発生しませんが、ミップマッピングも失われ、すべてが粗くなります。

質問は次のとおりです。

テクスチャ座標 (0 ~ 1 の範囲) がフラグメント シェーダーで手続き的に計算される場合、目に見えるミップマップ関連の継ぎ目を回避するにはどうすればよいですか?

4

1 に答える 1

1

導関数を手動で設定して、グラデーション テクスチャ サンプリングを使用する必要があります。そのための関数は次のとおりです。

gvec textureGrad(gsampler sampler, vec texCoord, gradvec dTdx, gradvec dTdy);
于 2012-05-12T14:47:02.170 に答える