夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Unity 一部のオブジェクトにアンチエイリアシングが効かない問題と対照

 本日はUnityグラフィック調査というより疑問に思っていたので調べてみた枠です。

 Unityで植物などを再現する際は筆者はAlphaClip(CutOut)をよく使用していました。

 Cutoutは不透明でありながらPng画像など透明度を持つテクスチャと併用することでα値を持っている部分を透明にすることができます。

 通常のTransparentやFadeと異なるのは不透明か?透明か?の表現であり、ガラスなどを再現できる半透明な表現はできません。

 

Cutoutを使用しない場合

 今回この植物においてエイリアシングが目立ち、ジャギーが消えない現象が発生しました。(実はずっと前から発生はしていたのですが、いったん無視していました。)

今回この問題に関してCutoutはアンチエイリアシングが使えないのかと調査を指定見ました。

〇結論

 UnityフォーラムによるとCutoutの表現においてアンチエイリアシングは通常機能しないようです。

aliased edges on cutout textures - Unity Forum

 ここからは筆者の推測が含まれています。

 Cutoutの表現ではテクスチャのα値に応じてピクセルを表示するか表示しないかを行っていますが、あくまでピクセル単位で動いている処理です。

 アンチエイリアシングはテクスチャに関して機能せずポリゴン単位で機能するようです。

 これによってテクスチャに依存して描画を行っており、ポリゴン単位で行われるアンチエイリアシングの対象外になっています。

 対処法としてはCutoutではなくFadeのシェーダーを使用することです。

 Cutoutと異なりα値を持つため描画順など気を付ける場面がありますが、これで植物などのジャギーを削減することができます。

 本日は以上です。