Log in

metaio SDK で AR してみた - 初音ミクを動かしてみた

目次へ戻る

サンプルをビルドするだけではおもしろくないので、違うモデルを読み込んでみました。と言っても、オリジナルのモデルではなく初音ミクのモデルをお借りしてです。

device-2013-08-13-155413

以前から趣味で Blender(オープンソースの 3DCG 統合ソフト。モデリング、モーション、レンダリング、動画編集が一通り出来る。ゲームエンジンまで内蔵しているなんでもありなソフト)をさわってはいるんですが、すぐにモデルを用意できるほどの腕も無ければ時間もありませんでしたので他の方の作品をお借りすることにしました。AR とかやってたら久しぶりにモデリングとかしたくなってきましたが、なかなか時間が取れないんですよね。
ちなみに、私が初めて Blender に触れたのは 2007年 12月末。3DCG のモデリングなんてそのときがまったくの初体験でしたが、それよりだいぶ以前、1998年頃から Direct3D とか OpenGL はかじっていたので一応基礎的な知識はありました。たぶん初めて 3DCG モデリングに触れた人って、サブディビジョンサーフェスやら法線やらテクスチャーやら UV 座標やらといった、モデリングそのものとは違う部分を理解するのに時間がかかると思うんですが、そういった部分はだいたい理解できていたので Blender 自体の使い方を覚えるだけで使いはじめることができました。Blender は操作が独特でマスターしにくいとよく言われてますが、それは操作方法の根本的なところが Windows の流儀とはまったく違うからじゃないかと思います。なので、特に普段 Windows を使う人にとってはわかりにいくと感じるんじゃないかなぁ、と。デフォルトだとマウス右クリックで選択だったり、マウスカーソルの下にあるコントロールがフォーカスを得る(コントロールをクリックしてフォーカス移動じゃない)だったりってところが特徴的だと思うんですが、確か X Window System の Motif とかがそういう UI じゃありませんでしたっけ?たぶん、そういったいろいろなものに影響を受けて作られてきた UI なんだと思います。そういう独特なところは確かに多いですが、一度それなりに把握してしまえば、効率よく操作できる結構よくできた UI だと思います。少なくとも私はかなり気に入ってます。

と、話がそれました。

「初音ミク@七葉1052式」と呼ばれる MMD 用モデルをお借りすることにしました。もともとは 三次元CG@七葉 という掲示板にアップロードされたモデルです。ちょうどこのモデルがアップロードされた頃は私も七葉をよく見ていました。このオリジナルのモデルはメタセコイヤ形式(mqo)なんですが、Blender にうまくインポートすることができませんでした。そこで、このモデルを元に作られた MMD 用のモデルを mmd tools でインポートしました。使用した Blender は 2.68a です。

metaio SDK でモデルを使う

metaio SDK でのモデルデータの使用についてですが、もともと metaio SDK では obj 形式、md2 形式、fbx 形式がサポートされています。私が以前に metaio SDK を使ったときはまだ fbx がサポートされる前だったので md2 形式を使っていました。今回はテストも兼ねて fbx 形式を使ってみることにしました。

モデルについて特別なことは無いと思いますが Blender 上で見えているものがそのまま metaio SDK でも表示できるわけでは無いのでそのへんは理解しておく必要があると思います。Blender のマテリアルにはスペキュラーやら透明度やらいろいろな情報を設定できますが、ほとんどの内容は metaio SDK に持っていくことはできません(fbx の中にはそれなりに入っていると思いますが無視されます)。単純な色(ディフューズカラー)ですら無視されるかもです。(md2 ではテクスチャーで色を付けてました。fbx ではディフューズカラーくらいは使えるのかもしれませんが調べてません)
そういえば、三角、四角ポリゴンは問題なく使えますが n-gon(五角形以上、Blender では B-Mesh と表現されている)が使えるのかは確認してません。md2 の場合は、エクスポーターが三角ポリゴンに変換してくれるようになっていました。fbx 自体は n-gon もサポートしているはず(そりゃ、3DS Max のデータなんですから)ですが、metaio SDK はサポートしていないでしょうから、どうなるかはわかりません。

アニメーションについてですが、metaio SDK ではアニメーション名を指定してモーションの再生を行います。Blender からエクスポートした fbx の場合は Action 名がアニメーション名になります。また、アニメーションの長さは Blender 上の Start、End は関係なく、Action の最初のキーがあるフレームから最後のキーのあるフレームになるようです。
ちなみに、md2 形式の場合はアニメーション全体の長さを Start と End で指定し、Marker 名でアニメーション名を指定します。すなわち、1つの Action の中に複数の Marker を打ってアニメーションを指定することになります。あと、これは以前にハマった点なのですが、md2 エクスポーターの仕様で Marker 名の末尾が数字になっていると正常に動かなくなります。最初これに気づかず、動かない理由がわからなくて、結局 Python で書かれている md2 エクスポーターの中を調べてやっと末尾が数字だとダメなことに気づきました。

さて、Blender 上のモデル・モーションを metaio SDK に持っていく具体的な手順ですが、まず、Blender 標準の fbx エクスポーターで fbx にします。Blender 2.68a の fbx エクスポーターにはいくつかオプションがありますが

  • Selected Objects をオン(モデルとアーマチュアを選択しておく)
  • Scale 30.0
  • Y Forward、-Z Up
  • Include Default Take をオフ
  • 上記以外はデフォルト

といった感じでうまくいきました。
続いて、この fbx を metaio SDK 付属の FBXMeshConverter.exe でコンバートしてやります。このコンバーターを使うと fbx や使用しているテクスチャーをまとめた zip ができあがります。
この zip を assets にコピーし、

String filepath = AssetsManager.getAssetPath("MyAssets/miku.zip");
IGeometry miku = metaioSDK.createGeometry(filepath);

こんな感じでこの zip 自体をジオメトリーとして読み込んでやれば OK です。

モデルの修正

では、実際に「初音ミク@七葉1052式」を metaio SDK に持っていってみます。
まず、mmd tools で Blender にインポートします。
何ヶ所か面が重複した状態になっているのが気になったので、顔のあたりだけは Remove Doubles で重複頂点を削除しました。もともとこうなっているのか、MMD 版がそうなっているのか、それとも、インポートしたときになってしまったのか、原因はよくわかりません。顔以外の部分は UV も直さないとテクスチャーがおかしくなるのでそのままです。
それから、このモデルって眼のあたりとか独特な作り方してあるんですね。最初、なにがどうなっているのかわからず驚きました。

このモデルではテクスチャーに BMPファイルが使われています。てっきり PNG か JPEG あたりにしてやらないと読み込めないと思っていたのですが、試してみたら Android ではそのままで大丈夫でした。iOS はまだ試してません。今回はお試しなのでこのままで使ってみましたが、本来なら PNG あたりにしておいた方が無難だと思います。
ただ、miku_xx_h3.tga の方はダメでした。このテクスチャーを使っている部分が metaio SDK だと白く抜けてしまいます。miku_xx_h3.tga は miku_xx_head.bmp とほとんど同じ内容のようでしたのでこちらの bmp を使うように変更しました。
また、ファイル名に日本語が含まれている「耳bmp.bmp」「紅潮.tga」は文字化けして正しく読み込めていないようですが、これらはなくてもほとんどわからないのでそのまま放置してます。

モーションの読み込み

続いてモーションです。モーションも借り物です。 ダンスとかでもいいんですが、あまり長いのもテストしにくいので MMDアイマスコミュモーションパック配布所 の「アイマスコミュモーションパック」を使わせて頂きました。「[E01]L4U春香-おじぎ」と「[E05]L4U春香-頭を指さし(はてな)」を mmd tools でインポートして Action Editor で複数の Action を一つにまとめたり、長さなどをちょこちょこと調整したり。また、Action 名が日本語だと問題出そうなのですべて英語に直しています。

metaio SDK で使用する

あとは上で書いた通り fbx で出力して、コンバートして、metaio SDK で読みこむだけです。
モーションは、「おじぎ」モーションをデフォルトで繰り返す、ジオメトリーがタップされたら「頭を指さし(はてな)」を一度だけ再生としてみました。やり方は metaio SDK のサンプルの Tutorial4 ほとんどそのまんまです。

実際に IS04 で動かしたものをキャプチャーしたのが上にある画像です。モーションも付いてます。(動画をキャプチャーするのってどうすればいいだろ?)
今になって気づきましたが、ネクタイとかの色がおかしいですね。テクスチャーがおかしいのかな?

目次へ戻る