夜風のMixedReality

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

MixedRealityGraphicsTools StandardShaderでZ-fightingを修正する

本日はMRGT枠です。

〇Z-fightingとは?

 UntiyやBlenderなどの3Dソフトでアプリケーションを作成しているとあるオブジェクトの描画がちかちか見えてしまうことがあります。

 これはZ-fightingと呼ばれる問題で、上記の例では赤い板からちらちらと青い板が見えています。

 通常、CGでレンダリングを行う際にはZ値というカメラからの深度情報(奥行)に基づいて描画を行っています。

 つまりカメラから奥にあるものほど先に描画が行われ手前にあるオブジェクトが奥にあるオブジェクトを塗りつぶすように描画されることで現実の物理的なもの同様オクルージョンがかかっています。

 複数のメッシュが重なるor非常に重なっているくらい近い距離にある場合にどちらのオブジェクトを描画するのかコンピュータの計算上でピクセル単位で変わってしまうことがあるためZ-fightingが発生します。  

redhologerbera.hatenablog.com

〇Z-fightingの修正法

 上記の説明通りZ-fightingが発生する原因はメッシュが重なっているためです。 そのため物理的にメッシュの重なりをなくすことで解消はされます。

ステッカーのような張り付いているパーツはZ-Fightingを起しやすいので浮かせたりすることがあります

 しかし実際にどれくらいメッシュを離すべきかはプロジェクトやデバイスに依存しています。

 そこで今回はMixedRealityGrapihcsToolsの機能を使用してメッシュをいじらずに調整していきます。

〇Depth Offset Factor

 Depth Offset Factorを使用することでメッシュを変更することなくZ-fightingの解消を行える場合があります。

  Depth Offset FactorはMixedRealityGraphicsToolsのStandardShaderに搭載されている機能で、マテリアルとして使用するためZ-fightingが解消できる可能性がある場合は、重なっているメッシュのマテリアルが異なる場合になります。

①マテリアルのシェーダーをGraphicstools/Standardシェーダーに切り替えます。

Rendering ModeCustomに切り替えます。

 

これによってマテリアルの詳細設定が表示されます。

Depth Offset Factorの値を変えます。

これによってTransformは変えずにZ値にパラメータ分の値を追加することで重なっているメッシュをずらしてZ-fightingを抑えることができます。

この方法ではメッシュを変えることなく行うことができるため非常に有効な解消法です。

本日は以上です。