本文へスキップ

メッシュの操作方法: 物理演算を追加する

この入門ガイドでは、以下の内容について説明します。

  • デフォルトのマネージャーでシーンに動的メッシングを追加する
  • メッシング用プレハブを作成する
  • メッシュの物理演算と連動する
  • メッシュを不可視にする
現実世界で球体を発射するガンジー像にオブジェクトが落下している様子

前提条件

ARDKがインストールされたUnityプロジェクトと、セットアップされた基本的なARシーンが必要です。 詳細については、ARDK 3のインストールと 基本的なARシーンの設定を参照してください。

メッシュを作成する

メッシュのプレハブを作成するには、次のように行います。

  1. XROriginにAR Mesh Managerを追加します。

    1. Hierarchyで、 XROriginを右クリックし、 Create Empty を選択して、空の GameObject を追加します。 新しいオブジェクトに MeshManager という名前を付けます。

    2. Hierarchyで、 MeshManagerを選択し、 Inspector ウィンドウで、 Add Component をクリックし、 ARMeshManager Component を追加します。 :::caution カメラを親に持つ ARMeshManager コンポーネントを追加する際はご注意ください。 ARMeshManager を追加すると、アタッチされているGameObjectのスケールが自動的に大きくなります。 これにより、現実世界と仮想世界のスケールにずれが生じ、オクルージョンやオブジェクトの距離感が崩れる可能性があります。 :::

    3. このプロセスを繰り返しますが、代わりに Lightship Meshing Extension Component を追加します。

      追加されたコンポーネントを表示するUnity UI
  2. ARオクルージョンマネージャーを追加する:

    1. Hierarchyで、 XROriginCamera Offsetを展開し、 Main Camera オブジェクトを選択します。 次に、 Inspectorで、 Add Component をクリックし、 AROcclusionManagerを追加します。

    2. Occlusion Preference ModeNo Occlusionに設定する。

      オクルージョンなしを設定したARオクルージョンマネージャー
  3. プレハブに変換するためのメッシュを用意します。

    1. Hierarchyで右クリックし、メインシーンに Empty GameObject を作成します。 MeshChunk という名前を付けます。

    2. Inspector ウィンドウで、3つのコンポーネントを MeshChunkに追加します。 Mesh Filter は地理情報を保持し、 Mesh Renderer はメッシュを表示し、 Mesh Collider は物理を提供します。

    3. Mesh Renderer Componentで、 Materials ドロップダウンを展開し、○ボタンをクリックして Select Material ウィンドウを開き、 Default Material を選択して追加します。

      MeshChunkゲームオブジェクトを作成する方法は次のとおりです。
  4. 次のように、メッシュをプレハブに変換して割り当てます。

    1. MeshChunkHierarchy から Assets ウィンドウにドラッグし、プレハブに変換します。

    2. MeshChunk GameObject をシーンから削除します。

    3. ** Hierarchy から MeshManager を選択し、 MeshChunk プレハブを Mesh Prefab スロットにドラッグします。** **** ****

      MeshChunkプレハブを作成し、ARMeshManagerに追加します。
  5. 試してみましょう。

    1. デバイスにビルドするか、エディターのプレイボタンを押します。 メッシュのオーバーレイが画面に表示されます。
    プレイバック機能付きメッシュオーバーレイ

メッシュの物理演算をテストする

メッシュには Mesh Collider が追加されているため、オブジェクトがある場合は、Unityの標準的な物理衝突が適用されます。 たとえば、メッシュの表面を歩くキャラクターに衝突したり、壁にぶつかったことをゲームエンティティに知らせることができます。 この演習では、プレイヤーが球体をシーンに発射し、それがメッシュに跳ね返る様子を示すデモを行います。

メッシュに物理演算を追加するには、次のように行います。

  1. 次のように、物理プレハブを作成し、剛体衝突を追加します。
    1. Hierarchyで右クリックし、 3D Object にマウスオーバーし、 Sphereを選択する。 LauncherSphere という名前を付けます。
    2. LauncherSphereHierarchyで選択し、 RigidBody Component を Inspectorで追加します。
    3. InspectorTransform コンポーネントでスケールを(0.2, 0.2, 0.2)に設定して、 LauncherSphere を小さくします。
    4. LauncherSphereAssets ウィンドウにドラッグしてプレハブにし、シーンから削除します。
  2. 球体を発射するスクリプトを作成するには、次のように行います。
    1. Assets ウィンドウで右クリックし、 Create にマウスオーバーして、 C# Scriptを選択します。 新しいスクリプトに Launcher という名前をつけます。
    2. Launcher のコードをスクリプトに追加します:
クリックしてランチャーコードを展開

using UnityEngine;

public class Launcher : MonoBehaviour
{
public Rigidbody _prefabWithRigidbody;
void Update()
{
#if UNITY_EDITOR
if(Input.GetMouseButtonDown(0))
#else
if (Input.touchCount > 0)
#endif
{
// カメラの前にスポーン
var pos = Camera.main.transform.position;
var forw = Camera.main.transform.forward;
var thing = Instantiate(_prefabWithRigidbody, pos+(forw*0.4f), Quaternion.identity);

thing.AddForce(forw * 200.0f);
}
}
}

  1. スクリプトを実行するために、 GameObjectを作成:
    1. Hierarchyで、シーン内を右クリックし、 Create Emptyを選択します。 LauncherScriptと名付け、 Launcher スクリプトを Assets ディレクトリからその上にドラッグ&ドロップします。
    2. Hierarchyから LauncherScript を選択し、 InspectorLauncherSpherePrefab 変数として割り当てます。
  2. デバイスにビルドし、テストしてみましょう。 画面上のどこかをタップし、球体を発射して、表面で跳ね返るようにします。
現実世界で球体を発射する

メッシュを不可視にする

メッシュを不可視にするには、メッシュをレンダリングしないようにUnityに指示する方法が最も簡単です。 プレハブから Mesh Renderer を削除すると、Unityで描画できなくなるだけでなく、メッシュでシーンにオクルージョンやシャドーを適用することもできなくなります。 この機能を維持するために、Lightship は InvisibleMeshWithShadows というシェーダーを提供しています。このシェーダーは、メッシュを直接レンダリングすることなく、光を受けて影を描きます。

メッシュに不可視シェーダーを追加するには、次のように行います。

  1. プロジェクトに InvisibleMeshWithShadows シェーダーのコピーがない場合は、 Githubリポジトリ からダウンロードしてプロジェクトに追加してください。
  2. Assets ウィンドウで右クリックし、 Create にマウスオーバーして、 Materialを選択します。 InvisibleShader という名前を付けます。
  3. InvisibleMeshWithShadows シェーダーを InvisibleShaderに追加する:
    1. Assets ウィンドウで、マテリアルを選択します。
    2. Inspector ウィンドウで、 Shader ドロップダウンをクリックし、 InvisibleMeshWithShadowsを検索して選択します。
  4. InvisibleShader をプレハブの Mesh Renderer に追加します:
    1. HierarchyMeshChunk オブジェクトを選択してください。
    2. Inspector ウィンドウで、 Mesh Renderer コンポーネントを見つけ、 Materials メニューをクリックして展開します。
    3. サークルをクリックし、 InvisibleShader を検索するか、 Invisible Shader を要素ボックスにドラッグ&ドロップして、 InvisibleShader をマテリアルとして追加します。
備考

ここでは、シーン内の Directional Light を現実世界に合わせています。 プロジェクトでリアルな照明を設定する方法については、AR Foundationの ARLightEstimation をご覧ください。

不可視のメッシュと動く影

Custom Mesh Texturing

この入門ガイドでは取り上げませんが、AR開発においてメッシュテクスチャを活用する方法は他にもあります。 2つの使用例をご紹介します。

  • メッシュ生成のサンプルシーンで使用されているように)カスタムメッシュレンダラーを使用することで、デバッグ時に法線を表示して、三角形の向きを確認することができます。
  • デフォルトでは、メッシュレンダラーでUV表面のマップを作成することはできませんが、メッシュ生成時にTriPlanar(トライプラナー)投影を使用することで、ワールド空間のUVマップを作成することができます。 メッシュのテクスチャ用のサンプルシェーダーは、 こちら をご覧ください。
ガンジー像を覆う青いメッシュさまざまな法線でメッシュをテクスチャするカスタムのシェーダー

詳細情報

  • この仕組みの詳細については、 メッシングを参照してください。