本文へスキップ

メッシュの作り方:物理学の追加

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

  • デフォルトのマネージャーでシーンに動的メッシングを追加する
  • メッシュ作成用プレハブの作成方法;
  • メッシュ物理学との相互作用;
  • メッシュを見えなくする。
実世界での球体打ち上げガンジー像への落下物

前提条件

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 カメラを親とするGameObjectにARMeshManagerComponentを追加するときは注意すること。 ARMeshManagerは、アタッチされているGameObjectのスケールを自動的に大きくします。 これにより、現実世界と仮想世界のスケールがずれたり、オクルージョンが崩れたり、オブジェクトの距離感が崩れたりする。 :::

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

      追加されたコンポーネントを表示するUnity UI
  2. AR Occlusion Managerを追加する:

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

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

      オクルージョンなしを設定したAR Occlusion Manager
  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. インスペクタでLauncherSphereを小さくするには、Transformコンポーネントでスケールを(0.2, 0.2, 0.2)に設定します。
    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
{
// spawn in front of at the camera
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 をマテリアルとして追加します。
備考

ここでは、シーン内のディレクショナル・ライトを現実世界と一致させました。 調べる ARLightEstimationを参照してください。

影が動く不可視メッシュ

Custom Mesh Texturing

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

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

詳細情報

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