パキッとした画像のはずなのに微妙におかしい
Unityで下記のような画像を表示してみました。
一見特に問題なさそうですが、一番下をよーく見ると1ドット分の行が正しく表示されていないように見えます。
一番下の行を拡大
最初は描画のロジックが間違っているのかと思いましたが、
Texture2Dをそのまま画像保存して確認したところ最下段も正しく赤く塗られていました。
このため、Unity側の表示方法に問題がありそうだったので、ChatGPTに聞いてみたところ問題が特定できました。
大本の原因としてはTexture2Dの設定に問題があったようです。
原因1.FilterModeがBilinearになっている
Bilinearは補間を行うフィルタモードのため、近くのドットの影響を受けた描画がされます。
これを防止するには「FilterMode.Point」というフィルタモードを選択します。
ドット絵のように周囲のピクセルをなじませる必要がない場合には「FilterMode.Point」を選択するのが良いようです。
原因2.TextureWrapModeがRepeatになっている
今回の例でいうとTextureWrapModeがRepeatとなっていたことで、最下段のピクセルが、最上段のピクセルの影響を受けていました。
これを防止するため「TextureWrapMode.Clamp」というWrapModeを選択します。
まとめ
今回の画像では上記原因1と2の条件が揃ったときに、最下段のピクセルが最上段のピクセルの影響を受けていたようでした。
設定を変更したところ正常に表示されました。
コードで書くと下記のような形です。
Texture2D texture;
texture.filterMode = FilterMode.Point;
texture.wrapMode = TextureWrapMode.Clamp;
細かい点ですが、同様の問題にあたっている方は参考にしてみてください。
コメント