をCg
使用してシェーダーを作成していますUnity3D
。
fmod関数を使用して、軸に沿ってテクスチャを繰り返します(基本的に、でテクスチャスケールを設定することで達成できるのと同じ効果ですMaterial
)TextureWrapMode.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関数に対応するある種のエイリアシング(ストリップパターン)を生成します。これがいくつかのスクリーンショットです:
上の画像は、テクスチャが正しく繰り返される様子を示しています。出現したストリップエイリアシングパターンのズームは次のとおりです。
デバッグしようとしましたが、何が起こっているのか正確に理解できません。誰でも私に何が問題なのか、そして最終的にはそれをどのように解決するのか教えてもらえますか?
編集:ミップマップの生成を無効にすると、この問題が解決することがわかりました。ところで、距離が増加している間、縮小エイリアシングの問題を回避するためにミップマップを使用したいと思います。誰かが何か考えがありますか?