2016/01/27から、凄い凄いと噂だったSONYのARライブラリ、SmartAR SDKが一般利用できるようになった。
Unityでも使えるので簡単なはずなので、取り敢えず試してみることにした。今回は、UnityちゃんのSDモデルと画像を使う。
ARライブラリで重要なのは、画像認識用のファイルだが、SmartARではこの認識用ファイルを「dictool」というコマンドライン式の実行ファイルで作る。こいつはWindows専用なので、SmartARをやるなら、例えiOS向けだろうとWindowsは絶対必要だ。
ちなみに、感想としては「コンテンツ屋には不親切なドキュメントだが、性能はいいのでライセンスを買う価値はありそう」かな。
ダウンロード&解凍
ということで、まずはSDKをダウンロードする。
SmartAR_SDKを解凍すると、中にまたいくつかZIPファイルがあるが、取り敢えずSmartAR_UnityとSmartAR_Toolが必要になるので解凍する。
Unityで試してみる
まず、Unityで3Dのプロジェクトを新規作成し、「Assets->Import Package->Custom Package…」で、SmartAR_Unity/SmartAR/smartar_moving_camera.unitypackageをインポートする。ついでに、Unityちゃんのモデルもインポートしておく。
で、インポートされたAssetsの中から、SmartAR/Prefabs内にあるSmartARCameraとSmartARTargetを、Hierarchyにドラッグ&ドロップする。ついでにUnityChan/SD_unitychan/Prefabs/内にある、SD_unitychan_generic.prefabをHierarchyにドラッグ&ドロップし、さらにSmartARTargetの下にドラッグ&ドロップしておく。
で、Main Cameraは削除する。
次に、それぞれ設定する。
その前に、画像認識用のファイルを作ろう。今回は、「ユニティちゃん画像HDパック vol.1」内の「Sign_Okay.png」を利用する。
dictoolで画像認識用のdicファイルを作る
SmartAR_Toolを解凍したフォルダに、「Sign_Okay.png」を置く。のだが、なんと透過pngを認識してくれないので、適当な画像編集ツールで白背景にしておく。実はこの作業が一番大変かも・・・。
で、白背景になった「Sign_Okay.png」を置いたとして、以下のコマンドを実行する。ちなみに、これは「画像Sign_Okay.pngを、幅19cmの紙に印刷した」を意味している。
- >dictool.exe build -image Sign_Okay.png -physicalWidth 0.19
するとこうなる。結構時間がかかる。
- >dictool.exe build -image Assets\Sign_Okay.png -physicalWidth 0.19
- Copyright 2012,2013,2014,2015,2016 Sony Corporation.
- Build dictionary:
- input : Sign_Okay.png
- physicalWidth : 0.190000 [m]
- serialID : 0
- vendor : 0-0
- dicfile : Sign_Okay.png.v9.dic
- autoresize (1495, 1495) -> (200, 200)
- points: 33 31
- ....................................................................................................
- the score of this target = 89.40 [0.00:bad - 100.00:excellent]
- store the dictionary file to 'Sign_Okay.png.v9.dic'
出来上がったファイル「Sign_Okay.png.v9.dic」を、Assets/StreamingAssetsに格納する。
SmartARCamera
AR用のカメラの設定をする。
Smart AR Controllerというところを開き、Recognizer Settingsを以下にする。。
Recognition Mode:RECOGNITION_MODE_TARGET_TRACKING Scene Mapping Init Mode:SCENE_MAPPING_INIT_MODE_TARGET
で、次に「Targets」の「Size」を1に変える。すると、「File name」「Id」というテキストフィールドが出来る。「File name」に「Sign_Okay.png.v9.dic」と入力し、「Id」に適当なID(今回はt1)と入力する。
SmartARTarget
Target IDと言うのがあるので、そこに先程Idとして入力した「t1」を入力する。
SD_unitychan_generic
SmmartARは、結構モデルをでかくしないと見えないので、Scaleをそれぞれ200に設定する。
ビルド&実行
Nexus 6Pを接続し、実行してみた結果が以下。
さすがのSmartARだけあって、こんなに斜めにしても普通に画像が認識されている。今回は、Unityちゃんの使い方を間違えたので左右に変なメニューが見えているが、実際はカメラと「Smart AR」のウォーターマークだけだ。
総括
見た感じ、結構簡単にいい感じのARコンテンツを作れそうだなと思った。ただ、ドキュメントが「ゴリゴリの開発者が作りました」って感じがする。Overviewという名前の付いたドキュメントにソースコードがガッツリ書いてあって、いわゆる「詳細設計書」っていう感じのドキュメントだった。
ドキュメントは全体的にそんな感じだし、画像認識ファイルを作る手段がdictoolしかないというのが結構大変だな、と思った。俺のような開発者側の人間になら簡単だが、クリエイター側の人には作れないだろうな・・・。
あと、リリースノートやREADMEなどのテキスト系のファイルの改行コードがWindows用のCRLFではなくLFのみなので、メモ帳で開くと1行になってしまうという、もう本当に、Windows嫌いの開発者が作りました感があふれている。
それともアレかな。ワザと不親切な解説にして、AR作成サービスも併せて売ろうとしてるのかな。