2014年7月21日月曜日

MMD動画作成者のためのUnity+dive+ MMD4Mecanimでお手軽アプリ作成入門

MMDで
・モデルを作成されている方
・モーションを作成されている方
・動画を作成されている方
はちょっとの手間で3DAndroidアプリを作ることができます。

たとえば下記のようなアプリが簡単に作れます。
「[dive] WAVEFILE/初音ミク fullver.」
WAVEFILE/初音ミク fullver. をうたいながら踊っている初音ミクさんをさまざまな方向から見ることができるAndroidアプリ
https://play.google.com/store/apps/details?id=com.mypaceengine.mmdtest&hl=ja

このアプリのWindows上での作り方を説明します。
利用するものは下記です。
[Unity]
アプリケーションの基盤として使用させていただきました。
http://japan.unity3d.com/

[durovis dive]
スマートフォン上での立体視用カメラのAssetを利用させていただきました。
https://www.durovis.com/dive.html

[MMD4Mecanim]
Unity上でMMDのデータを読み込むのに使用させていただきました。
nora様
Stereoarts Homepage
http://stereoarts.jp/

この組み合わせですとアプリの作成にかかる追加コストは0円です。(無償で公開くださっている方に感謝!)
[準備]
①JDKのインストール
下記からインストーラをダウンロードして、実行してください。
http://www.oracle.com/technetwork/java/javase/downloads/index.html

下記を参照し、システム環境変数JAVA_HOMEを設定してください。
http://www.javadrive.jp/install/jdk/index4.html

②AndroidSDKのインストール
下記からインストーラをダウンロードして、実行してください。
http://developer.android.com/sdk/index.html
詳細は下記をご参照ください。
http://developer.android.com/sdk/installing/index.html?pkg=tools

③Unityのインストール
下記からインストーラをダウンロードして、実行し、Unityをインストールします。
http://japan.unity3d.com/unity/download/

Unityを起動しておきましょう。

④MMD4Mecanimのインストール
下記からMMD4Mecanim (Beta)をダウンロードして、ダブルクリックしてUnityのプロジェクトにインポートしましょう。
http://stereoarts.jp/

インストール方法は下記を参照。
http://stereoarts.jp/MMD4Mecanim%20%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%88%E5%9F%BA%E6%9C%AC%E7%B7%A8%EF%BC%89.pdf

⑤Durovis diveのインストール
下記からDive Unity Plugin Packageをダウンロードして、ダブルクリックしてUnityのプロジェクトにインポートしましょう。
https://www.durovis.com/sdk.html

既存のカメラをdiveに差し替えてください。

[モデル設置]
①モデル/モーション/背景/音源の用意

MMDで作成したモデル/モーション/背景を用意してください。

②モデル/モーション/背景のインポート
下記をご参照いただき、インポートをしてください。
http://stereoarts.jp/MMD4Mecanim%20%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%88%E5%9F%BA%E6%9C%AC%E7%B7%A8%EF%BC%89.pdf

③背景/モデル/カメラの位置調整

背景/モデルの中心位置をお決めください。
サンプルでは背景/モデルは座標(0,0,0)を中心に設定しました。

④スクリプトの調整
左のボックスで[Dive_Camera]を選択してください。
Open Dive Sensor (Script)のOpen Dive Sensorをダブルクリックして、スクリプト画面を起動し、書き換えてください。
http://mypace-engine.blogspot.jp/2014/07/float-ypfloat0.html

⑤曲の付与
下記をご参照ください。
http://stereoarts.jp/MMD4Mecanim%20%E3%82%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%82%AA%E5%90%8C%E6%9C%9F.pdf

[リリースビルド]
下記をご参照ください。
http://akira-watson.com/android/unity-android-release.html

違うモデルやモーションなどでアプリを作りたい場合は、
①すでに設置されているものを撤去する
②[モデル設置]と[リリースビルド]からやり直す
で出来ます。

実際にやってみると、準備編はUnityやAndroid SDKのダウンロードに時間がかかりますが、 モデル設置は15分もかからないと思います。
MMDをお使いになっている方で、興味がある方はぜひ動画作成のついでにAndroidアプリのリリースもしてみませんか。
雑ですが参考になると幸いです。

Unity+diveで視線の角度に合わせて、特定のオブジェクトにカメラを向け続ける

Unity+diveで「踊っている初音ミクさんを好きな角度から見ることができるAndroidアプリ」を開発しました。
https://play.google.com/store/apps/details?id=com.mypaceengine.mmdtest&hl=ja 
このアプリで使用している「特定の座標を中心に視線の角度に合わせて、カメラを移動するアルゴリズム」は以下をご参照ください。ちなみにこの例ですと座標(0,0.9,0)を中心としています。

適用方法は下記です。
①diveをAssetとしてUnityにImport
②「Open Dive Sensor(Script)」を追加する。
③ScriptのOpenDiveSensorを開き、それぞれ下記のように追記する。

 フィールドへ下記を追記
//カメラの回転角の格納
Quaternion rot;

void Start ()に下記を追記
//カメラの回転角を取得
rot=Quaternion.identity;

void Update ()に下記を追記
//カメラの回転角を反映
transform.rotation = rot;
//カメラのデフォルトの高さを0.9、上下の半径は1.2として、カメラの高さ(Y座標)を演算
float yp=(float)(0.9+(UnityEngine.Mathf.Sin(rot.eulerAngles.x* UnityEngine.Mathf.Deg2Rad)*1.2));
//球の平行の半径は1.6とし、カメラの高さに合わせて、球の平面円の半径を演算
float hankei=(float)(UnityEngine.Mathf.Cos(rot.eulerAngles.x* UnityEngine.Mathf.Deg2Rad)*1.6);
//半径とカメラの角度からX座標を演算
float xp=(float)(UnityEngine.Mathf.Sin(-rot.eulerAngles.y* UnityEngine.Mathf.Deg2Rad)*hankei);
//半径とカメラの角度からZ座標を演算
float zp=-(float)(UnityEngine.Mathf.Cos(-rot.eulerAngles.y* UnityEngine.Mathf.Deg2Rad)*hankei);
//カメラにXYZ座標を設定
transform.position=new UnityEngine.Vector3(xp,yp,zp);

移動しているオブジェクトに追従する場合は、追従したいオブジェクトのXYZ座標を(xp,yp,zp)に足しこめば、実現できます。