図1

AR(拡張現実)で床に埋まる3Dオブジェクトを作ろう

はじめに

AR(拡張現実)で凹みのある3Dオブジェクトを表示する方法を紹介します。『凹み』があることで、より現実に溶け込む3Dオブジェクトになります。
まずは、完成品を紹介します。

3Dオブジェクトが床にめり込んでいるように見えますよね?

参考

こちらのサイトを参考にさせて頂きました。

作成環境

Windows10 (Surface Pro4)
Unity ( Version 2019.3.0a3 )
Vuforia ※拡張現実

作り方

最初に、凹む3Dオブジェクトの作り方を紹介します。

新規プロジェクト作成

Unityで新規プロジェクトを作成します。

サーフェスシェーダー作成

Assets』を右クリックし、Create -> Shader -> Standard Surface Shader をクリックします。

シェーダー作成時に、名称を『CutOut-SurfaceShader』とします

サーフェスシェーダー編集

作成した『CutOut-SurfaceShader』を右クリックし、Create -> Material をクリックします。

名称を『CutOut-SurfaceShaderMaterial』とします。

CutOut-SurfaceShader』を編集するため、『CutOut-SurfaceShader.shader』をテキストエディタで開きます。

CutOut-SurfaceShader.shader』をテキストエディタで開くと以下のようになります。

以下のように編集します。

以下は、コピー用です

Shader "Custom/CutOut-SurfaceShader"
{
   Properties {
       _Color ("Color", Color) = (1,1,1,1)
   }

   SubShader {
       Tags {"Queue" = "Geometry-2"}

       Pass{
           Zwrite On
           ColorMask 0
       }
   }
}

青色のマテリアル作成

凹ませる側の3Dオブジェクトのテクスチャを作成します。『Assets』に新規にマテリアルを作成し、名前を『Blue』にします。

青色に設定します。

これで、オブジェクトを透過させるマテリアルと、青色のマテリアルの準備ができました。

3Dオブジェクト作成

『Hierarchy』で右クリックし、3D Object -> Cube を選択します。

オブジェクトのマテリアルを設定

Element 0』 に、マテリアル『Blue』を設定します。立方体が青色になります。

名前を『Cube-Blue』にします。

透過用のオブジェクト作成

Hierarcky』 で、3D Object -> Sphere をクリックします。

作成したオブジェクトを選択し、『Element 0』 に、『CutOut-SurfaceShaderMaterial』を設定します。

このように、青い立方体と、球体『Sphere』が重なるところが透明になると成功です。

ですが、カメラからの映像だと、球体が黒く表示されます。カメラからの映像も透明になるようにします。

カメラ映像での透過設定

Main Camera』 を右クリックし、Camera をクリックします。

作成した 『Main Camera』 の下の Camera を選択します。

Culling Mask』 を Nothing に、『Depth』 を -2 にします。これで、黒色だった球体が、透明になるはずです。

凹んだオブジェクト作成

凹んだオブジェクトを作成します。

マテリアル追加

以下のように、『Assets』 にマテリアルを追加しました。あと、4色のマテリアルと、画像を表示するマテリアルを作ります。

オブジェクト追加

4つのCubeオブジェクトを作成し、色つきのマテリアルを設定します。5つめのCubeオブジェクトは底に配置して、画像のマテリアル『Img-Bottom』を設定します。それらオブジェクトを囲むように透過のマテリアル『CutOut-SurfaceShaderMaterial』を設定したCubeオブジェクトを4つ作成します。

上の図のように、穴があいたような3Dオブジェクトが完成しました。

AR(拡張現実)を実装する

穴があいたような3DオブジェクトをAR(拡張現実)で表示できるようにします。といっても、ARで表示できるようにする手順は↓に書きましたので、こちらをご覧ください。

完成するとこのようになります。

各オブジェクトの PositionScale は、以下になります。ARカメラ以外のRotetion(X, Y, Z) は、(0, 0, 0) にします。 

動かしてみる

実行のボタンをクリックします。

ARマーカーを認識させてみます。

このように、3Dオブジェクトが表示されたら成功です。
床に埋まっているように見えますか?動画だと、オブジェクトが床に埋まっている感じに見えると思います。

冒頭で紹介した動画をもう一度紹介しておきます。

終わりに

やっと、床に埋まる3Dオブジェクトが作れるようになりました。これを使って、面白いものが作れそうな気がします。

こんな弱小ブログでもサポートしてくれる人がいることに感謝です。