ARを試す際、カメラの映す背景を使いたいけど影も表示したい…そんな場合があります。というか、近々これが必要になりそうな気がするので作りました。
ついでに地面の奥、つまり影を描画している地形の下にあるモデルが見えてしまわないようにしました。
やってる事は単純で、デプスを書く透明オブジェクトの描画キューをジオメトリより前にしてやれば、概ねカリングしてくれます。
影が表示される部分はUnity Communityで紹介されているものです。
シェーダーはこんな感じです。Materialを作成し、マテリアルのシェーダーをCustom/TransparentShadowCollectorとしてやれば、影付き透明が表現できます。
またinspectorのdebugを開き、RenderQueueを1999と明示的に設定しておきます。でないとvuforiaでは上手く表示されません。
もし地形の構造が取れるなら、その形状に沿ってTransparentShadowCollectorを使用した透明なオブジェクトを配置すると、複雑な形状に沿って影がかかる&オブジェクトの後ろにあるモデルはカリングされる…といった事が出来る気がします。
また、CameraのClear ModeがSkyboxの時は(何故か)うまく動作しません。Skyboxを使用したい場合は、カメラをもう一つ用意し、背景は別途書いて下さい。
影が表示されない…は、何でしょう。カメラのfarが遠すぎてzfightingを起こしてる?もしくは影を表示するPlaneが正しい位置に無い?
ちょっと再現出来ないので謎ですね
ちなみにForward Render専用です。
VuforiaとGearVRの組み合わせで動作する事を確認しました(5.3とvuforia5)
追記:20160829
- シェーダーの内容を少し修正
- 幾つか追記