メッシュの作り方:物理学の追加
この入門ガイドでは、以下の内容について説明します。
- デフォルトのマネージャーでシー ンに動的メッシングを追加する
- メッシュ作成用プレハブの作成方法;
- メッシュ物理学との相互作用;
- メッシュを見えなくする。
前提条件
ARDKがインストールされたUnityプロジェクトと、セットアップされた基本的なARシーンが必要です。 詳細については、 ARDK 3のインストール および ARシーンの設定を参照してください。
メッシュを作成する
メッシュのプレハブを作成するには、次のように行います。
-
XROriginにAR Mesh Managerを追加します。
-
Hierarchyで、
XROrigin
を右クリックし、 Create Empty を選択して、空のGameObject
を追加します。 新しいオブジェクトの名前は MeshManagerとします。 -
Hierarchyで、 MeshManagerを選択し、 Inspector ウィンドウで、 Add Component をクリックし、 ARMeshManager Component を追加します。 :::caution カメラを親とするGameObjectに
ARMeshManager
Componentを追加するときは注意すること。ARMeshManagerは
、アタッチされているGameObjectのスケールを自動的に大きくします。 これにより、現実世界と仮想世界のスケールがずれたり、オクルージョンが崩れたり、オブジェクトの距離感が崩れたりする。 ::: -
このプロセスを繰り返しますが、代わりに Lightship Meshing Extension Component を追加します。
-
-
AR Occlusion Managerを追加する:
-
Hierarchyで、
XROrigin
と Camera Offsetを展開し、 Main Camera オブジェクトを選択します。 次に、 Inspectorで、 Add Component をクリックし、AROcclusionManager
を追加します。 -
Occlusion Preference Mode を No Occlusionに設定する。
-
-
プレハブに変換するためのメッシュを用意します。
-
Hierarchyで右クリックし、メインシーンに Empty
GameObject
を作成します。 名前は MeshChunkとします。 -
Inspector ウィンドウで、3つのコンポーネントを MeshChunkに追加します。 Mesh Filter は地理情報を保持し、 Mesh Renderer はメッシュを表示し、 Mesh Collider は物理を提供します。
-
Mesh Renderer Componentで、 Materials ドロップダウンを展開し、○ボタンをクリックして Select Material ウィンドウを開き、 Default Material を選択して追加します。
-
-
次のように、メッシュをプレハブに変換して割り当てます。
-
MeshChunk を Hierarchy から Assets ウィンドウにドラッグし、プレハブに変換します。
-
MeshChunk
GameObject
をシーンから削除します。 -
** Hierarchy から MeshManager を選択し、 MeshChunk プレハブを Mesh Prefab スロットにドラッグします。** **** ****
-
-
試してみましょう。
- デバイスにビルドするか、エディターのプレイボタンを押します。 メッシュのオーバーレイが画面に表示されます。
メッシュ物理のテスト
メッシュには Mesh Collider が追加されているため、オブジェクトがある場合は、Unityの標準的な物理衝突が適用されます。 たとえば、メッシュの表面を歩くキャラクターに衝突したり、壁にぶつかったことをゲームエンティティに知らせることができます。 この演習では、プレイヤーが球体をシーンに発射し、それがメッシュに跳ね返る様子を示すデモを行います。
メッシュに物理演算を追加するには、次のように行います。
- 次のように、物理プレハブを作成し、剛体衝突を追加します。
- Hierarchyで右クリックし、 3D Object にマウスオーバーし、 Sphereを選択する。 LauncherSphereと名前をつけます。
- LauncherSphere を Hierarchyで選択し、 RigidBody Component を Inspectorで追加します。
- インスペクタで、LauncherSphereを小さくするには、Transformコンポーネントでスケールを(0.2, 0.2, 0.2)に設定します。
- LauncherSphere を Assets ウィンドウにドラッグしてプレハブにし、シーンから削除します。
- 球体を発射するスクリプトを作成するには、次のように行います。
- Assets ウィンドウで右クリックし、 Create にマウスオーバーして、 C# Scriptを選択します。 新しいスクリプトの名前は Launcherとします。
- 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);
}.
}
}
- スクリプトを実行するために、
GameObject
を作成:- Hierarchyで、シーン内を右クリックし、 Create Emptyを選択します。 LauncherScriptと名付け、 Launcher スクリプトを Assets ディレクトリからその上にドラッグ&ドロップします。
- Hierarchyから LauncherScript を選択し、 Inspectorで LauncherSphere を Prefab 変数として割り当てます。
- デバイスにビルドし、テストしてみましょう。 画面上のどこかをタップし、球体を発射して、表面で跳ね返るようにします。
メッシュを不可視にする
メッシュを不可視にするには、メッシュをレンダリングしないようにUnityに指示する方法が最も簡単です。 プレハブから Mesh Renderer を削除すると、Unityで描画できなくなるだけでなく、メッシュでシーンにオクルージョンやシャドーを適用することもできなくなります。 この機能を維持するために、Lightship は InvisibleMeshWithShadows
というシェーダーを提供しています。このシェーダーは、メッシュを直接レンダリングすることなく、光を受けて影を描きます。
メッシュに不可視シェーダーを追加するには、次のように行います。
- プロジェクトに
InvisibleMeshWithShadows
シェーダーのコピーがない場合は、こちらのGithubリポジトリからダウンロードしてプロジェクトに追加してください。 - Assets ウィンドウで右クリックし、 Create にマウスオーバーして、 Materialを選択します。 名前は InvisibleShader。
InvisibleMeshWithShadows
シェーダーを InvisibleShaderに追加する:- Assets ウィンドウで、マテリアルを選択します。
- Inspector ウィンドウで、 Shader ドロップダウンをクリックし、
InvisibleMeshWithShadows
を検索して選択します。
- InvisibleShader をプレハブの Mesh Renderer に追加します:
- Hierarchyで MeshChunk オブジェクトを選択してください。
- Inspector ウィンドウで、 Mesh Renderer コンポーネントを見つけ、 Materials メニューをクリックして展開します。
- サークルをクリックし、 InvisibleShader を検索するか、 Invisible Shader を要素ボックスにドラッグ&ドロップして、 InvisibleShader をマテリアルとして追加します。
ここでは、シーン内のディレクショナル・ライトを
現実世界と一致させました。 調べる ARLightEstimation
を参照してください。
Custom Mesh Texturing
この入門ガイドでは取り上げませんが、AR開発においてメッシュテクスチャを活用する方法は他にもあります。 2つの使用例をご紹介します。
- カスタムメッシュレンダラー(Meshingサンプルシーンで使用されているもの)は、デバッグ中に三角形の向きを確認するために法線を表示することができます。
- デフォルトでは、メッシュレンダラーでUV表面のマップを作成することはできませんが、メッシュ生成時にTriPlanar(トライプラナー)投影を使用することで、ワールド空間のUVマップを作成することができます。 メッシュのテクスチャリングのためのシェーダーのサンプルはここにあります。
詳細情報
- この仕組みの詳細については、 メッシングを参照してください。