トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

Tangoで現実の床に仮想物体の影を落とす

現実世界の床に仮想物体の影が落ちるARをTangoで実装します。

MeshBuilderサンプルを使う

TangoSDKの中にあるExperimentalMeshBuilderWithPhysicsを改造します。これは部屋の面を認識してメッシュを構成するサンプルです。

f:id:bibinbaleo:20170712200936p:plain

こんな感じになります。タッチするとボールが発射されて、メッシュの上で転がります。

このメッシュのマテリアルを影のみ表示するシェーダーをつけたマテリアルに変えます。

元のサンプルシーンはコピーを取っておいたほうがいいかもしれませんね。

マテリアルを作る

このシェーダーをコピーして、Create>Shaderで作ったshaderに貼り付けます。

gist.github.com

次に新しいMaterialを作って、Shaderをさっきのにします。FX/mmatにあります。

f:id:bibinbaleo:20170712200842p:plain

そしてそれをDynamicMeshというゲームオブジェクトにつけます。

この状態でビルドするとしたみたいな感じ。

f:id:bibinbaleo:20170712200950p:plain

カメラ画像を読み込んでなかったし、メッシュ自体の影が落ちてしまってすごいことになっています。

細かな設定

DynamicMeshのMeshRendererのCast ShadowsをOffにしてメッシュ自身の影を落とさないようにします。

Receive Shadowにはチェックが入っているのでボールの影は落ちます。

f:id:bibinbaleo:20170712200850p:plain

次にTango CameraのTango AR Screenにチェックを入れます。これでカメラ画像が表示される。

f:id:bibinbaleo:20170712200838p:plain

Tango ManagerのEnable Video Overrayにもチェックを入れる。

f:id:bibinbaleo:20170712203332p:plain

その状態でビルドするとこんな感じ・・・だったかな?

f:id:bibinbaleo:20170712200958p:plain

とりあえずできたはできた。

ライトの調整

影が濃いのでDirectional LightのIntensityを0.18、Strengthを0.9ぐらいにする。あとLightingのAmbient Intensityを1.54にして、skyboxは自分の部屋のやつにした。 

bibinbaleo.hatenablog.com

 あと右下に表示されるObserver Cameraが影を落として邪魔だったのでそれ関係のを消したら・・・

結果

最初の動画みたいなやつができました。

f:id:bibinbaleo:20170712201020p:plain

ちゃんと壁を認識して当たってくれるし、影も落ちるし楽しーーー!

まあMesh構成がされているのかが表示されないので右下のはあった方がいいのかもしれませんね。