Unity++blog.

UnityやC#とかについて学習したことを書いてます

シェーダプログラミング オブジェクトの重なった部分をくり抜く(光学迷彩っぽい!)

今日のシェーダプログラミングはオブジェクトの重なった部分をくり抜く勉強です。下図のような感じです。

f:id:nabesi777:20181022182145j:plain

 

参考サイトはこちらです↓詳細な解説が乗っています!

【Unityシェーダ入門】オブジェクトが重なった部分をくり抜く - おもちゃラボ

 

まずはこのようにステージセットします。

f:id:nabesi777:20181022182346j:plain

 

オブジェクトをくり抜くには、この球体のデプスバッファだけ書き込み、カラーバッファには書き込まないようにします。そうすることにより画面には表示されないが、デプスバッファには書き込まれた状態となるようです。

 

くり抜かれるcubeはなにもせず描画しますが、球体のデプスバッファがすでに描画されているため、重なった部分だけは描画されないことになります。

 

シェーダ・マテルアルを作成して以下コードに書き変え、玉にアタッチします。

f:id:nabesi777:20181022183020j:plain

 

そうすると以下のようになりました。

f:id:nabesi777:20181022183054j:plain

 

簡単にくり抜くことができました。

しかしわかりずらいですが、背後の床の描画もくり抜かれています。これを解消するためには、玉より早く描画する必要があります。

 

床にアタッチするシェーダとマテリアルを作成して、描画部分のところを変更します。以下の部分です。

f:id:nabesi777:20181022183255j:plain

 

こうすることで問題が解決できました。

f:id:nabesi777:20181022183356g:plain

 

 

上から見るとこなにもないですが、

f:id:nabesi777:20181022183747j:plain

 

横から見るとオブジェクトを発見!

f:id:nabesi777:20181022183826j:plain

 

というような使い方ができそうです!