本記事は Unreal Engine 4 (UE4) Advent Calendar 2020 20日目の記事 です。
はじめに
本記事では UE4 でARコンテンツを作る手順や各種機能についての記事になります。
公式で対応しているARプラットフォームとしては ARCore と ARKit がメインですが、本記事では ARKit 寄りの内容が多めです。
また、内容によって異なりますが、UE4.24~UE4.26 の範囲のバージョンの内容になります。
クイックスタート
一から作る場合はテンプレートから作成するだけで実機で動作確認できます。
既存のプロジェクトでAR機能を使う場合は以下の手順でセットアップを行います。
1.プラグインの有効化
ARCore もしくは ARKit のプラグインを有効化します。
2.ARSessionConfig の作成
"コンテンツブラウザを右クリック → Miscellaneous → Data Asset → ARSessionConfig" からアセットを作成します。
3.パラメータ設定
ARSessionConfig のパラメータを設定します。
ここのパラメータによって AR 機能全般の挙動が変わります。基本的には "AR Settings" の項目を主に設定していきます。
4.AR機能の開始
StartARSession ノードに2,3で作成した ARSessionConfig アセットを指定して、実行するとAR機能が有効になります。
トラッキング済みジオメトリの取得、表示
以下のノードでトラッキング済みのジオメトリ、特徴点を取得できます。
ジオメトリにはいくつか種類があり、特定の種類のジオメトリだけ取得できるノードもあります。
※ UE4.25 以前では種類ごとにノードが分かれていました。
マーカー読み込み
ARCore, ARKit はマーカーレスのARプラットフォームですが、画像検出機能でマーカーを利用することも可能です。
1.マーカー画像の用意
通常の画像と同じようにエディタ内にテクスチャアセットとしてインポートします。
2.ARCandinateImage の作成
"コンテンツブラウザを右クリック → Miscellaneous → Data Asset → ARCandinateImage" からアセットを作成します。
3.テクスチャ情報の登録
ARCandinateImage のパラメータを設定します。
1でインポートしたテクスチャを指定し、Friendly Name(任意の名前)と現実の縦幅・横幅(cm)を設定します。
Orientation(縦長か横長か)は自動的に設定されます。
4.ARSessionConfig に登録
Candidate Images のリストに2で作成した ARCandidateImageアセットを登録します。
※ UE4.26 では "Image Tracking" の項目から設定します。
5.トラッキングしたマーカー情報の取得
以下のような形でトラッキングしたマーカーの位置・角度、元のテクスチャ情報などを取得できます。
実際に動かしてみたものです。
5の情報を使ってトラッキングしたマーカーの位置にグレーマンをスポーンして Friendly Name でアニメーションを変更しています。
動的にマーカー情報の追加
"AddRuntimeCandidateImage" ノードで動的にマーカー情報を ARSessionConfig に登録できます。
カメラ映像をテクスチャとして取り込む
端末のカメラ映像をテクスチャとして取り込むことが可能です。
メッシュに貼り付けてオクルージョンとして使ったり、テクスチャの色情報から現実に合わせたパーティクルを発生させたりと様々な表現に使えそうです。
1.マテリアルを用意する
取り込んだテクスチャを貼り付けるだけの簡易的な内容のマテリアルです。
現実に合うようにマッピングしてくれる "Map AR Passthrough Camera UVs" というノードが用意されているのでテクスチャノードに繋ぎます。
2.テクスチャを取得
メッシュに貼り付ける想定でノードを組みました。
"GetCameraImage"ノードを使うだけでテクスチャを取得できます。1で用意した "CameraImage" パラメータに設定してます。
People Occlusion
基本的に現代の AR では端末のカメラから取り込んでいる現実映像の上に仮想コンテンツを乗せるのが一般的ですが、
ARKit 3 から追加された People Occlusion を使うと、人体の形を認識して仮想コンテンツを人体部分だけ遮蔽することができます。
Github から落とした UE4.23 で ARKit3 の People Occlusion 動いた😳
— Tonkotsu (@tonkotsu3656) 2019年10月24日
ただ @ruyo_h さんも呟いていたのですがメッシュが若干半透明で残る。。 pic.twitter.com/LMfedsHhZZ
実装はとても簡単で ARSessionConfig を以下のように設定するだけです。
Use Person Segmentation for Occlusion:有効
Enable Session Tracking Feature:Person Segmentation with Depth