強火で進め このページをアンテナに追加 RSSフィード

整理された情報は こちら へどうぞ。

2013年03月20日

[][] Unity でのZファイティング(Z-Fighting)の対処法

3DCGのレンダリング時にはZファイティングと言うものが発生する時が有ります。

これは同じ位置に2つのポリゴンが存在する時にレンダリングされるピクセルが2つのポリゴンが混ざってしまう現象の事です。

例えばUnityで同じ位置にサイズの異なる2つの Plane を配置するとこの様なレンダリング結果になってしまいます。

f:id:nakamura001:20130320203435p:image

これは本来であればこの様にレンダリングして欲しい所です。

f:id:nakamura001:20130320203524p:image

まず、直ぐに思いつくのは青色の Plane をカメラに近い位置に移動させるという方法です。これで問題無い場合にはこれでOKです。

他のアプローチとしてはシェーダに Offset の設定をするという方法です。

※ Offset のリファレンスはこちら

OpenGL に詳しい方には glPolygonOffset() と同様の処理と考えると良いでしょう。

SubShader のブロックの先頭に以下の様に記述して使います。

SubShader {
	Offset -1 , -1

ここで記述する -1 の値などを Inspector などで指定出来ればベストなのですが公式のリファレンスに記載が有る様にここは定数で指定しないとエラーと成りますので注意して下さい。

基本的には内蔵シェーダのソースコードをダウンロードして来て、この記述を追加するだけで対応出来ます。

内蔵シェーダのソースコードのダウンロードについてはこちらを参照して下さい。

参考情報

Z-Fightingと Offset の設定による対策についてはこの本で詳しい解説が記述されています。

Unity iOS ShaderLab - Tutorial 10-1 (Z-Fighting) - YouTube

http://www.youtube.com/watch?feature=player_embedded&v=f7zDKlsyu6s#!

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト

コメントを書くには、なぞなぞ認証に回答する必要があります。

トラックバック - http://d.hatena.ne.jp/nakamura001/20130320/1363780527