じゅころぐAR

AR/VRメインのブログ。時々ドローン。

Unreal EngineでARをやってみる

ARの開発環境では、Unityがデファクトスタンダードだと思いますが、Unityに使いにくさを感じることもあり、Unreal Engineも試してみることにしました。

そもそもなんでUnityを使ってたんだっけ?

ARを始めた当初(といっても1年半くらい前ですが)、最新のARデバイスと言えばHoloLensとTangoで、ネイティブ環境を除くとどちらも開発環境がUnity一択でした。

元々はUnityを一度も触ったことがなくて、積極的に選択したという訳ではなかったと思います。

Unityのつらみ

あくまで経験1年ちょっとの素人目線ですが、公式のスクリプトリファレンスが超絶わかりにくいです。
メソッドやプロパティが何をするためのものなのか、説明が1,2行でざっくりとしか書かれていないので、名称と型から雰囲気で察しながら実装しています。
一体、みんなどうやって開発しているのか...

当然、意図通りに動かないことも多く、有益な情報がないかとググる訳ですが、出てくる情報が軒並み古かったりするんですよね。

今までは、TangoやARCoreのドキュメント、サンプルコードを読み漁って対応していましたが、それ以上のことをやろうとすると想像以上に苦戦します。

というわけで、UEも使えるようになりたい。

Unreal EngineのAR対応

UEでARを利用するためのプラグインは、UEにビルトインされているようです。
"設定" > "Plugins" > "Augmented Reality"プラグインが見つかるので、"Enabled"にチェックを入れれば有効になります。

f:id:jyuko49:20180707081534p:plain

ビルトインで楽ではあるんですけど、ARKit/ARCoreのバージョンが上がったら、UEのバージョンも上げないとってことですよね?

この記事を書いている時点で、UEの最新バージョンは4.19、プレビュー版の4.20が出ている状況です。
UEのAR対応についての記事を見ると、ARKit 1.5、ARCore 1.2に対応しているのは4.20以上になっているので、プレビュー版を使わないと最新の機能は使えないみたいです。

Augmented Reality Overview

バージョンの追加は、Epic Games Launcherから簡単にできます。1バージョンで15GBくらいあるけどね…

f:id:jyuko49:20180707082724p:plain

ARKit

UE 4.20であれば、ARKit 1.5だけでなくARKit 2.0にも対応しているようです。

ARKit Prerequisites

ARCore

UE 4.20がARCore 1.2に対応しています。

ARCore Prerequisites

ARCoreに関しては既にv1.3.0が出ているのですが、UEのサイトには記述が見当たりません。
ARCoreのサイトを見てみると、GoogleがforkしたバージョンのUEをGithubからインストールしろと書かれています。

Quickstart for Unreal  |  ARCore  |  Google Developers

f:id:jyuko49:20180707075756p:plain

仕方ないので、リンク先のGithubをクリックしてみると…

f:id:jyuko49:20180707080023p:plain

ちょっと意味がよくわからないですね。

UEでARプロジェクトを作る

プロジェクトテンプレートから作る

UEにはARプロジェクトのブループリントがあり、簡単に開発をスタートすることができます。

f:id:jyuko49:20180707091825p:plain

手順としては、公式のQuick Startをそのままやっていくだけです。

Augmented Reality Quick Start

基本のビューは構成されており、ARKit/ARCoreのプラグインもデフォルトで有効になっているので、プラットフォーム(iOS/Android)の設定をして、デバイスで起動するだけです。
Androidの場合、SDKのセットアップで少し迷いましたが、以下の記事に載っているCodeworksを使ったら問題なく動きました。

Installing CodeWorks for Android 1R6u1

せっかくなので、どんな感じで動いているかも見てみました。

"コンテンツ" > "HandheldARBP" > "Blueprints" > "GameFramework"にある"BP_ARPawn"をダブルクリックします。

f:id:jyuko49:20180707105658p:plain

ブループリントのイベントグラフが表示されて、処理のフローが見れます。

f:id:jyuko49:20180707104220p:plain

メインフローとして、TouchイベントからHitTestが実行され、最終的にHitResultを受け取ったBP_PlaceableがSpawn(生成)されていることがわかります。
まだ全然慣れてないですが、処理のフローが可視化されているのはよいですね。

ちなみに、プルンと出てくる処理の正体は、BP_PlaceableのIntro Animのタイムラインアニメーションでした。

"コンテンツ" > "HandheldARBP" > "Blueprints" > "Placeable" > "BP_Placeable"をダブルクリックでイベントグラフが表示され、さらにIntro Animのノードをダブルクリックでタイムラインエディタが開きます。

f:id:jyuko49:20180707155733p:plain

f:id:jyuko49:20180707161532p:plain

ARCoreのサンプルプロジェクトを使う

UEのテンプレートとは別に、GoogleGithubにARCore SDK for Unrealリポジトリがあります。

github.com

こちらをgit cloneするか、zipファイルをダウンロードして解凍すれば、ARCoreのサンプルプロジェクトをベースに開発ができます。

プロジェクトごとにフォルダが作られており、直下にある.uprojectのファイルを開きます。

f:id:jyuko49:20180707112055p:plain

開くとUEのバージョン選択が表示され、Unreal Editorが起動します。

f:id:jyuko49:20180707112827p:plain

初回起動時にPluginの追加を促すコーションが表示された場合は"Yes"で起動すればOKです。

f:id:jyuko49:20180707113218p:plain

起動した直後は、Androidプラットフォームが有効になっていないので、Quick Startと同様の手順で設定します。
Androidであれば、"設定" > "プロジェクト設定" > "Android"でプラットフォームを有効にします。

f:id:jyuko49:20180707163110p:plain

実機で起動してみると、Unity版と同じようなサンプルアプリが動きました。

これならUEでも開発できるかなと思ったのですが、Cloud Anchorのサンプルに相当する"CloudPin"だけは起動しようとするとエラーになります。

f:id:jyuko49:20180707172929p:plain

UEのバージョンを4.20にしてもダメ。Not FoundになっていたGithubからARCore 1.3に対応したUEをインストールすればできるのかもしれませんが、Not Foundですし。

そもそも、Cloud AnchorはARCore 1.2で動くはずなのですけど、どうにも上手くいきません(諦め)

その他UE関連

ヒストリアさんのブログが半端ない

UEについて色々調べていたら、ヒストリアさんのブログの情報量がすごかったです。
これ読めば、UEかなり詳しくなりそう。

historia.co.jp

ありがとうの気持ちを込めて、Airtoneを宣伝しておく。

www.youtube.com

Unity引っ越しガイド

Unityの用語との対応表がありました。Unityで行なっていた操作がUEでどうやるのかわからないときは、見比べながら進めていけばなんとかなりそうです。

api.unrealengine.com

まとめ

  • ARKit/ARCoreの最新バージョン対応がUnityに比べると遅い
  • ブループリントは慣れれば便利そう

プレビュー版じゃないと最新のAPIに対応していない上、ARCore 1.3とCloud Anchorに至っては、すんなり試せなかったのが致命的です。
ブループリントは使いこなせれば便利だと思いますけど、慣れるまでに時間もかかりそう。面倒な処理はスクリプトをゴリゴリ書いていく派なので、その点もちょっと合わないかもしれません。

地味なところだと、AndroidiOSのプラットフォーム切り替えが要らないので、クロスプラットフォーム開発が楽です。

結論

UEよさそうだけど、ARならまだUnityかな・・・。

実際に試してみて、AR(特にモバイルAR)に関しては、依然としてUnityがファーストチョイスかなぁと思いました。
もしVRをメインでやっていくなら、UEを勉強する気がします。

ARKit/ARCoreやサードパーティ製のプラグインを使ってスクリプトを書いていきたい場合は、Unityで良さそうです。Unity自体の機能は、理解することを諦めた。
逆にUE使う場合は、ARの機能やスクリプトに頼る部分はシンプルにして、アニメーションやエフェクトなどグラフィックにこだわるとか、そういった使い方になると思います。

今後はWebARの利用範囲が徐々に増えていくと思うので、いずれはUnity/UEじゃなくて、Webと同じプラットフォームで開発していくことになるかと。

jyuko49.hatenablog.com