SATCHが日本語情報出してくれたので、改めてD’Fusion StudioにチャレンジしてAndroidアプリを作れた!
SATCHが公開されて、AR界隈が盛り上がっている・・・のかは知らんが、
ひとまず俺は乗り遅れた。
しかも、Total ImmersionのD'Fusion StudioというSATCHでも使われている
フリーの製品をいち早く取り込んだら乗り遅れると言う皮肉な事態。
しかもSATCHは12/20からずっとメンテ中で新規登録が出来ない。
しかし嘆くことは無い!
何とSATCHのサイトには、D'Fusion Studioの日本語チュートリアルがあるのだ!
これは便利!!
と言うことで、早速これを参考に、SATCHに頼らないD'Fusionによる
ARアプリ開発をやってみよう。
では、D'Fusion Studioでの開発を始める。
まず、こちらのサイトからD'Fusion Studioをダウンロードする。
また、併せてユーザ登録もする。
ここで登録したIDとメアドはSATCHで使えないので注意。
ダウンロードが終わったら、SATCHの開発ガイド
「SATCH Developers|Step1. ARコンテンツ制作」
を見ながらインストールする。
ただ、このとき使うIDとパスワードはSATCHのではなく、先ほど登録したものを使う。
で、そのままSATCHのチュートリアルを進め、
「SATCH Developers|1.8 ARコンテンツエクスポート」
までくると、あれ?となる筈だ。
そう。
出力するPlatformの追加に「android」なんてない。
あるのはWindowsとかMacだ。
そこで、以下の手順を踏もう。
1.Targetを追加。
まず、「@Home」と書いてある選択リストから「Add Target」を選ぶ。

すると、Target追加ダイアログが出てくる。その中にmobileと言うのがあるので、
選んでOKを押す。

するとTargetにmobileが増えるので、選択する。
2.Platformsを選択
ここまで来るとチュートリアルに近づいている。
mobileをTargetにしておくと、Platformsの方にはandroidがある。
これを選べばよい。無かったら、Add Platformを選べば追加できる。

これで完了。Android用にエクスポートする。
ちなみに、今回はAndroidでアプリを作る時のクラス名を
「org.tarotaro.android.ar.DFusionSampleAndroidActivity」
にすることにする。そのため、アプリケーションIDは
「org.tarotaro.android.ar」
になる。ここだけ注意だ。
次はAndroidでARアプリを作るとしよう。
先ほどのTotal Immersionのサイトにログインした状態で、DOWNLOADから
D'Fusion Studio Suiteを選択すると、色々ダウンロードできるページに飛ぶ。
この中から、D’Fusion Mobile SDK for Android 3.2をダウンロードしよう。
ダウンロードして解凍すると、英語の開発ガイドとライブラリが入っている。
とりあえずざっと読んだ所だと、エクスポートした時に出来る「dfk」ってファイルが
コンテンツキーになっていて、エクスポートした段階ではテスト用のキーがもらえる。
で、D'Fusion PROを使っている人は、テスト用のキーをTI社に送ると、本番用の
キーファイルがもらえるらしい。後、商用利用は本番用限定との事。
商用利用するためにはPRO版必須なのは厳しいかも。
SATCHでもコンテンツ登録とかするみたいだけど、それがこの本番用キーの
入手になるのかな。だとするとSATCHはその辺りが嬉しいとも言えるね。
さて、今回はテスト用のキーのままで行くのだが、次はどうするかと言うと、
「SATCH Developers|Step2. アプリケーション開発」
の、アプリケーション開発 for Androidを見て、開発環境を作る。
で、環境が出来たら、
「SATCH Developers|2.2.2アプリ生成」
を見て、2.2.2.2まで真似る。ここまでは全く一緒だ。
ちなみに
プロジェクト名は「DFusion_Sample_Android」、
パッケージ名は「org.tarotaro.android.ar」、
Activity名は「DFusionSampleAndroidActivity」
にしてみた。
で、次がいよいよ違う。ライブラリが違うからね。
ダウンロードしたD’Fusion Mobile SDK for Android 3.2の中の、
DFusionMobile_Android_0/DFusionMobile_Android/SDK以下にある
dfusionmobilesdk.jarとlibtiAndroidAR2.soを、以下のように配置する。

つまり、SATCHで言う「satch.jar」の代わりに「dfusionmobilesdk.jar」を使い、
libsatchAndroid.soが無い状態だ。
で、解説でsatch.jarにやっているようにdfusionmobilesdk.jarをビルドパスに追加する。
そして次に、AndroidManifest.xmlを開いて編集するのだが、これはSATCHとD'Fusionでかなり違う。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.tarotaro.android.ar"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:debuggable="true">
<activity android:name=".DFusionSampleAndroidActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="orientation|keyboard|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.autofocus"/>
</manifest>
見て分かるとおり、大分少ない。
SATCHは利用者の位置情報やら何やらを収集するが、D'Fusionはしないからだ。
カメラ機能だけをONにしている。
ここも、SATCHとD'Fusionの大きな違いだ。利用規約に位置情報取得について
書かないといけないなど、SATCHは使ってもらうのに気を遣うのだが、元々の
D'Fusionはそうでもないのだ。
SATCHの利用規約に同意するとD'Fusionそのままの機能は使えないのだろうか?
この辺りのライセンスの扱いは気になる。
次に、Javaで書かれたActivityを編集する。以下の様な感じだ。
ちなみにこれはSDKについてる開発ガイドに乗っているコードをつないで作った。
import ti.dfusionmobile.tiComponent;
import android.app.Activity;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.util.Log;
import android.widget.FrameLayout;
public class DFusionSampleAndroidActivity extends Activity {
private FrameLayout _frameLayout;
private tiComponent _tiComponent;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
Log.e(this.getClass().getName(),"onCreate");
super.onCreate(savedInstanceState);
_tiComponent = new tiComponent(this);
}
@Override
public void onStart() {
Log.i(this.getClass().getName(),"onStart");
_frameLayout = new FrameLayout(this);
_tiComponent.initialize(_frameLayout);
_tiComponent.activateAutoFocusOnDownEvent(true);
setContentView(_frameLayout);
super.onStart();
ApplicationInfo appInfo = null;
PackageManager packMgmr = getApplicationContext().getPackageManager();
try {
appInfo = packMgmr.getApplicationInfo(getPackageName(), 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("Unable to locate assets, aborting...",e);
}
String dpdfile = appInfo.sourceDir + "/assets/Scenario/Scenario_a/Sample.dpd";
_tiComponent.loadScenario(dpdfile);
_tiComponent.playScenario();
}
@Override
public void onResume() {
Log.i("MainActivity", "onResume");
super.onResume();
// we re-create the GL Context and reload the scenario
_tiComponent.onResume();
// play the scenario
_tiComponent.playScenario();
}
@Override
public void onPause() {
Log.i("MainActivity", "onPause");
super.onPause();
// we pause the scenario
_tiComponent.pauseScenario();
// we notify the onPause event to the component :
// medias are released but the library is not unloaded.
_tiComponent.onPause();
}
@Override
public void onStop() {
Log.i("MainActivity", "onStop");
super.onStop();
// the component is closed, media are unloaded
// 3d view and videocapture are destroyed.
_tiComponent.terminate();
}
@Override
public void onDestroy() {
Log.i("MainActivity", "onDestroy");
super.onDestroy();
// delete everything.
_frameLayout = null;
_tiComponent = null;
}
}
これも、SATCHとは異なっている。
ただまぁ、コアな部分は似ているというか同じだ。
あと、SATCHはActivityクラスを2つに分けていたが、別に必要ない。
これ1個で動く。
と言うことでビルドして、デバッグ開始。
Xoomをつないでデバッグしてみたんだが、スクリーンショットが取れなかった。
そのため、実記を写真に撮った。少し写りが悪い。
あと、チュートリアルのフライヤーを印刷するのが面倒だったため、
手元にあったnanoblock モノトーンパックの裏の写真を認識用に使った。
まずタブレット全体を写したもの。

なんかカメラの映像が小さい。何処でミスったかな・・・?
何か、ARコンテンツ作る時のAndroid用のカメラ設定が小さかったのか?
まぁいいや。次にアップ。とりあえず、出来ていることがわかる。

こんな感じ。かなりご機嫌にアニメーションしているし、絵の認識も素晴らしい。
さて・・・。
現状、SATCHとD'Fusionは共存できそうに無い状況(D'Fusion Studio2つインストールできなさそう)なので、
選択にはなると思う。でも、SATCHが無くても充分な気がする。
後は、ライセンスだとかの微妙な部分でTotal Immersion社がちゃんと教えてくれるかとか、
お金が幾らかかるかとか、日本語の情報があるかとか、そういうところでの
相談なんじゃないかなーと思う。
あと、SATCHはイベントで散々簡単にするだの日常にするだの開発者以外も
作れるだの言ってたが、D'Fusion Studioから全くハードル下がってない。
手順はほとんど同じ。
3Dデータのエクスポーターも3DS MaxとMayaとか、全然フレンドリーじゃない。
無料のSATCHを楽しむためには超高い3Dオーサリングツールが必要ですとか、
何か「割のいいバイトがあるけど、やるためにまず高い教材が必要」的な
詐欺の匂いすら感じる。
BlenderとかMetasequoiaとか、仕様をオープンにしてコミュニティに貢献して、
各種3Dオーサリングツールでのエクスポータを用意すべき。





