2009年2月9日月曜日

ミクさんリアルだ


今回から、カメラの位置だけでなくマーカの位置の左と右に点光源を置いたのでミクさんは下から照明されているのだが、お陰で怖い程のリアリティがある。画像じゃ伝わらないかもしれないけれど、ちゃんとマーカの動きが追従されている時、どきっとするくらいに本物らしい時がある。これは完全にモデル製作者の力量に拠ってるよなあ。日曜モデリングさまに感謝を。

追記:せっかくの拡張現実なので、現実感と非現実感が同居している感じに照明を調節してみた。

ね、ねむいー

尋常じゃなく眠い。夜までは起きている生活リズムを作りたいからと無理をしすぎかも。でもまあ今日はちょっと面白い事ができた。

ミクさんのコード

一応置いておいたけどまだやっつけなので注意。とりあえず動くとは思う。

ミクさんを表示してみた


もう何番煎じというレベルではないですが。しかしネタとしてはともかく、スケルトンが超整理されていて3D表示がWPFであるためにプログラミングという観点からはとっても可能性が広がっているのです。

さあ、データを気合入れて作って振り付けをアニメーションするのは職人に任せて、WPFを活かしたコードでのお気楽アニメーションをやってみるぞ!

ちなみに、データは日曜モデリングさまものです。というかデータの準備に、工学ナビの中の人のこのエントリを参考にしたというわけなんだけど。

mqoからxamlの3Dデータの準備の仕方のメモ。Identityを使用して、この記事を参考にした。

1.mqoをメタセコイアで読み込む。一度正方形を適当な大きさで作ってミクさんのフットプリントを確認しておく。今回のデータの場合、およそ100x100の正方形に収まるが、そのうち大半は髪の毛のボリュームなので、プログラムでスケール変換する時にmarkerwidth/50.0を係数とする。(markerwidthはARToolkitPlusの初期化時に渡すマーカのマーカ座標系における幅。)
2.Identityが吐くxamlにはエンコーディング指定がないので、日本語の材質名、物体名などは変更しておく。なお、今回のデータの場合、日本語の名前の材質は全て未使用(製作の過程で一時的に割り当てたっぽい)だったのでざっくり削除した。
3.Identityはインストール先のディレクトリのTexturesディレクトリからのみテクスチャファイルを探す。従って一度テクスチャファイルは全てコピーする。
4.Identityでmqoファイルを開く。ファイル-名前を付けて保存メニューを選択し、xamlをファイルの種類として選び、UV座標と法線にチェックを入れて保存する。この時オリジナルのテクスチャがあるディレクトリに出力すると改めてテクスチャファイルを生成しようとしてエラーが出るが別に問題はない。気になるなら別のディレクトリに出力する。
5.xamlファイルをがんばって書き換えて次のようにする。この時x:Nameは全てx:Keyに書き換える。

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<MaterialGroup x:Key="Material_miku_pose1_face" >
...
<Transform3DGroup x:Key="Transform_Character_miku_pose1_Character_0" >
...
<MeshGeometry3D x:Key="Geometry_miku_pose1_head_0" ... />
...
<Model3DGroup x:Key="ここにプログラムから参照する名前を入れる。今回はmiku_pose1とした">
...
</Model3DGroup>
</ResourceDictionary>
6:ソリューションにMIKUフォルダを作り、xamlとテクスチャファイルを全て入れる。プロパティで``ビルドアクション''を「コンテンツ」に、``出力ディレクトリにコピー''を「新しい場合はコピー」にする(注:xamlもコンパイルせずにこのようにした方が、ユーザがデータを入れ替えられて良いと思うのでそうした)。
7:Window1.xamlに
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="MIKU/miku_pose1_resource.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
という記述を追加。これで、コードビハインドのWindow1クラス中で(Model3D)this.Resources["miku_pose1"]としてミクさんのモデルを参照できる。

キャリブレーションの仕方を英語で書いた

http://sites.google.com/site/augmentedrealitytestingsite/#TOC-How-to:-Camera-Calibration
にキャリブレーションの仕方を英語で書いておいた。この情報は探しても全然見つからないのでかなり有用だと思う。頭がパンクしかけたのでかなり端折ったけど、かえってこのエントリに書いたキャリブレーションの仕方の説明よりも簡略になって分かりやすくなった気がする。

mqo to xamlができるソフト

Identityというソフトがあるらしい。これでマーカーの上でミクさんを踊らしたりとかできるのかな。

連番mqo出力ができるアニメーションツール RokDeBone2なんてのもある。

ありゃ、Identityって、ただの変換ツールかと思ったらアニメーションツールなのか。それでxaml出力ができるって、アニメーションするオブジェクトをマーカに表示するだけならプログラム超簡単にならないか?

あと、メタセコイアへのポインタ


追記:Identityを使ってみたが、Viewbox3Dをルート要素としブラウザで開くと単体で動作する手取り足取り状態のxamlが出力される。これはこれで便利だが、プログラムから参照するのには不便。ここの記事にリソースディクショナリへの加工の仕方がある。