1

Cg使用してシェーダーを作成していますUnity3D

fmod関数を使用して、軸に沿ってテクスチャを繰り返します(基本的に、でテクスチャスケールを設定することで達成できるのと同じ効果ですMaterialTextureWrapMode.Repeat

これはfragment shader、エラーを再現できるコードです。

half4 frag (v2f i) : COLOR
{

  float u_sample_coord = fmod(i.uv.x ,period) /period;
  half4 col =tex2D(myTexture,float2(u_sample_coord, i.uv.y));  
  return col;
}

基本的には機能しているように見えますが、0のfmod関数に対応するある種のエイリアシング(ストリップパターン)を生成します。これがいくつかのスクリーンショットです:

ここに画像の説明を入力してください

上の画像は、テクスチャが正しく繰り返される様子を示しています。出現したストリップエイリアシングパターンのズームは次のとおりです。

ここに画像の説明を入力してください

デバッグしようとしましたが、何が起こっているのか正確に理解できません。誰でも私に何が問題なのか、そして最終的にはそれをどのように解決するのか教えてもらえますか?


編集:ミップマップの生成を無効にすると、この問題が解決することがわかりました。ところで、距離が増加している間、縮小エイリアシングの問題を回避するためにミップマップを使用したいと思います。誰かが何か考えがありますか?

4

1 に答える 1

2

tex2D()関数でuおよびv導関数を明示的に設定する必要があります。しかし:なぜfmodを使用しているのですか?サンプラーのリピートモードがラップに設定されている場合は、UV座標を0-1の範囲をはるかに超えてローミングさせることができます。それはそれ自体でラップします。

于 2013-02-12T01:09:33.883 に答える