テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】影だけ映る地面を用意し、かつ地面の下が見えないようにする

ARを試す際、カメラの映す背景を使いたいけど影も表示したい…そんな場合があります。というか、近々これが必要になりそうな気がするので作りました。

f:id:tsubaki_t1:20151003000011p:plain

ついでに地面の奥、つまり影を描画している地形の下にあるモデルが見えてしまわないようにしました。

やってる事は単純で、デプスを書く透明オブジェクトの描画キューをジオメトリより前にしてやれば、概ねカリングしてくれます。

f:id:tsubaki_t1:20151003000418p:plain

f:id:tsubaki_t1:20151003000428p:plain

影が表示される部分はUnity Communityで紹介されているものです。

forum.unity3d.com

シェーダーはこんな感じです。Materialを作成し、マテリアルのシェーダーをCustom/TransparentShadowCollectorとしてやれば、影付き透明が表現できます。

gist.github.com

またinspectorのdebugを開き、RenderQueueを1999と明示的に設定しておきます。でないとvuforiaでは上手く表示されません。

f:id:tsubaki_t1:20160829031801j:plain

もし地形の構造が取れるなら、その形状に沿ってTransparentShadowCollectorを使用した透明なオブジェクトを配置すると、複雑な形状に沿って影がかかる&オブジェクトの後ろにあるモデルはカリングされる…といった事が出来る気がします。

 

また、CameraのClear ModeがSkyboxの時は(何故か)うまく動作しません。Skyboxを使用したい場合は、カメラをもう一つ用意し、背景は別途書いて下さい。

f:id:tsubaki_t1:20160829034511j:plain

 

f:id:tsubaki_t1:20160829034613j:plain

影が表示されない…は、何でしょう。カメラのfarが遠すぎてzfightingを起こしてる?もしくは影を表示するPlaneが正しい位置に無い?
ちょっと再現出来ないので謎ですね

 

ちなみにForward Render専用です。

VuforiaとGearVRの組み合わせで動作する事を確認しました(5.3とvuforia5)

 

追記:20160829

  • シェーダーの内容を少し修正
  • 幾つか追記