2012年3月30日金曜日

Windows7 64bit 版で mio-0.1 動かしてみる(2012年3月公開)

(追記) Windows 8.1 64bit 版でも稼働確認しました。
http://snumaw.blogspot.jp/2013/11/windows-81-64bit-mio-01.html

mio-0.1 を使った VMD モーションファイルを BVH モーションファイルに変換するための設定手順を扱った 2 年前の投稿がいまだにヒット数/参照数が高いのは、やはり、この設定手順が結構複雑という理由でしょうね。

前回の上半身2を利用したモーション変換の投稿で改めて mio を使ってのモーション変換環境を作ろうとしたのですが、、、あの記事を書いた私でさえ1回で動かなかった >< という事実もあり、再度まとめてみようと思います。

ただ、今回は 64bit 版の Windows で mio を動かします。最近の PC は Windows7 64bit版が多いと思います。セカンドライフや 3D 関連を趣味でやろうとしたら、搭載メモリーのことを考えると必然的に 64 bit 版の Windows を選択することになりますよね~(後述しますが、手順と必要なソフト、ファイル、モジュール自体は Windows 32bit 版でも同じです。SysWOW64 か system32 だけ気を付けてください。)

今回はまったく「素」の Windows7 64bit の環境で mio-0.1 が動くように実際にセットアップした手順になります。途中でエラーがでないように考慮しているので、VPVP Wiki などに書かれている手順、さらに2年前に私が書いた手順とは若干違います。(たぶん、この手順の違いが、一般的に難しかった原因じゃないかな?と思っています。以下の「おまじない」の部分になります。)また、2012年の3月時点で入手可能なバージョンを使っていますので、しばらくはこのままいけるんじゃないかな?とも思います~。

Windows7 64bit 版に mio-0.1 その他必要なモジュールをインストールする(2012年3月公開)

注1)これは Windows7 64bit 版で mio-0.1 を使うための手順です。
注2) 無用なトラブルを避けるため、ネットからダウンロードしたファイル(zipファイルなど)は、ダウンロード直後に右クリックメニューから「プロパティ」を選び、[ブロックの解除] を押してください。ボタンがなければそのまま使って大丈夫です。

1) MSVCR71.DLL のダウンロードとインストール
おまじないです。Vectorからダウンロードします。
http://www.vector.co.jp/soft/dl/win95/util/se435079.html
vcpvcr71.zip を解凍し、vcpvcr71\dll にある msvcp71.dll と msvcr71.dll を Windows\SysWOW64 にコピーします。

2) C++ VS2008 SP1 再頒布パッケージ(x86) のインストール
これもおまじないです。
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=a5c84275-3b97-4ab7-a40d-3802b2af5fc2
(Windows7 64bit版を使っていても x86 のパッケージをダウンロード&インストールしてください。)

3) mio-0.1 のダウンロードと解凍
http://www.mediafire.com/download.php?mdyzlml2waw
mio-0.1.zip ファイルを解凍し、C:\Tools\mio などに mio-0.1 フォルダーごと展開します。

4) DevIL.dll, ILU.dll, ILUT.dll のシステムへのコピー 
解凍した mio-0.1 の lib\unicode にある DevIL.dll、ILU.dll、ILUT.dll をWindows\SysWOW64にコピーします。
「対象のフォルダーへのアクセスは拒否されました」と出ますが、[続行] をクリックしてください。

5) GLUT32.DLL のダウンロードとインストール
http://user.xmission.com/~nate/glut.html から glut-3.7.6-bin.zip をダウンロードします。
解凍して glut32.dll を上記3)同様 Windows\SysWOW64 にコピーします。

6) Python2.6.x のダウンロードとインストール
http://www.python.jp/Zope/download/pythoncore
2012年3月でダウンロード可能な 2.6 系は 2.6.6 と 2.6.7。作者様が使っていたバージョンに近い 2.6.6 をインストールします。(2.6.7 でもいいかもしれませんが試していません)
Windows用インストーラにある「python-2.6.6.msi」をダウンロードしてください。Windows7 64bit版を使っていても、32bit 版の python-2.6.6 を選び、python-2.6.6.amd64.msi は使わないでください

[追記] 2.7.x では mio は動かないようです。2.6.6 が 2.6.x の最終バイナリになるので、必ず 2.6.6 をインストールしてくださいね。
http://www.python.org/download/releases/2.6.6/

7) PyOpenGL 3.0 のダウンロードとインストール
http://pypi.python.org/pypi/PyOpenGL
いくつかのバージョンがありますが PyOpenGL 3.0.1 をダウンロードします。(作者様が作成したバージョンに近いからです)
PyOpenGL 3.0.1 のリンクををクリックすると PyOpenGL 3.0.1 のページにいくので、PyOpenGL-3.0.1.win32.exe (md5) のリンクをクリックしてダウンロードします。
ダウンロードした PyOpenGL-3.0.1.win32 を右クリックして「管理者として実行」を選び、インストールします。

8) PyQt のダウンロードとインストール
http://www.riverbankcomputing.co.uk/software/pyqt/download
2012年3月でダウンロード可能なのは PyQt-Py2.6x86-gpl-4.9.1-1.exe になります。いろいろなバージョンがあるので難しいですね。Python2.6用で、x86(何度もいいますが、Windows7 64bitでもx86版です)用を選んでください。

これで vmdviewer を mio のフォルダーの script サブフォルダ―にある vmdviewer をダブルクリックします。

vmdviewer
Windows7 64 ビット オペレーティング システム上で mio の vmdviewer が立ち上がりました。

この手順は Windows の 32bit 版でも有効だと思います。ただし、Windows\SysWOW64 の部分を Windows\system32 に置き換えてくださいね。

変換のときの注意点

1) 日本語は使わない。フォルダー名にもファイル名にも、PMDモデルも VMDモーション ファイル名も!

2) 日本語の VMDファイルを「名前の変更」で英語表記にしても「Shift JIS codec can’t decode...」のエラーダイアログが出る場合は MMD を使って一度 VMD を読込んで、そのモーションを英語名で保存してみてください。過去のご紹介はこちら

3) vmdviewer の [PMD File] – [Load] で PMD を読み込んでも、モデルが表示されない場合があります。エラーメッセージが出ていないのであれば、そのままの状態で VMD ファイルを読み込んで変換してみてください。VMD ファイルを [Load] で読み込んだ時にメッセージで 「Computing IK..」が出ていれば、ほぼだいじょうぶです。[Play] による確認はできませんが、[Export BVH] ボタンで BVH ファイルとして保存して、他の BVH モーション確認ツールでみてみましょう。

4) 上記 3) の状態が気持ちわるい、、、という方にはコマンドラインでの変換をお勧めします。コマンドラインってなに?の方はやらないほうがいいかもですが。。。。

a) コマンドプロンプトを開きます。(これがわからない人はパスしてください)
b) mio\script フォルダをカレントディレクトリにして以下のようにタイプします。
vmd2bvh.py ..\model\aaa.pmd ..\motion\bbb.vmd ..\motion\bbb.bvh
(mio のフォルダに model と motion フォルダを自分で作成し、そこに load する pmd および vmd ファイルがあって、motion フォルダに同じ名前の bvh ファイルを保存する場合の指定の仕方です)
vmdviewer2

フレームでの進行を確認でき、最後に Saving BVH data...というメッセージが表示されます。

5) 上半身2 ボーン(upper_body2)入りの BVH ファイルを作りたい場合は、上半身2 ボーンを持っている PMD ファイルを Load してください。上半身2ボーンを upper_body2 という名前に変換したい場合は過去のこちらの記事を参照してください。なお、dictionary の変更をしなくても、bvh ファイルを開き、upper_body の次のレベルの \u4e0a\u534a\u8eab2 (UNICODE で “上半身2”)を upper_body2 にしても有効です。

ご参考になれば幸いです~。

2012年3月29日木曜日

マーケットプレース「Direct Delivery」対応しました

かばちお姉様のブログをみて「はっ!」と思い、やってみた。

ところが、、、ビューワーは普段から英語なので問題なーい、とやってみたら MERCHANT OUTBOX にアイテムのドロップできないし、、、、。

これ、、、MERCHANT OUTBOX を開いたとき、なんか通信してません?

magicbox5

ドロップできない場合は、いったんビューワーを落として、再起動してみるのがいいかも。
できなかった時は、なんか Initializing とかあまり見えなかったような気がします。

で、Magicbox を使っていた商品たち。

magicbox2

なんとか Direct に変りました。

magicbox3

リンデン公式の情報はこちらで。

マーケットプレースダイレクトデリバリー移行ガイド(日本語)

2012年3月26日月曜日

Secondlife Avatar ボーン構造 と PMD のボーン構造

MikuMikuDance (MMD) のモーションファイルである VMD から Secondlife (SL) 用に BVH 変換 (mio –> mmdbvh2slbvh) して SL の中で楽しむのはもう何度かご紹介してきましたが、もともとこの仕組みは MMD 標準ボーンを前提としたモーションファイルの変換をしています。
MMD に同梱されているあにまさ式ミクさんや他のモデルのボーン構造は以下のようになっています。これは mio で VMD ファイルを BVH ファイルに変換して、BVHacker でみた構造です。ただし、指のボーンや髪のボーンは割愛して、SL で関係するものだけをリストしています。

ルート(VMDではセンター)
   下半身
      左足
         左ひざ
            左足首
      右足
         右ひざ
            右足首
   上半身
      左肩
         左腕
            左ひじ
               左手首
      右肩
         右腕
            右ひじ
               右手首
      首
         頭

最近のモデルは、特に上半身を親ボーンとする「上半身2」、腕の「捩りボーン」などを追加して、いわゆる「多段ボーン化」したものが増えてきています。多段ボーン化されたモデルを前提とした VMD モーションファイルの公開も多くなってきました。多段ボーン化することにより、より滑らかなアニメーション、ダンスが可能になります。(ただし、その分モーション作成の手間が増えます)
mio や mmdbvh2slbvh では、上述のような後発の多段ボーンには基本は対応していないので、たとえば、上半身2 前提のモーションファイルを SL 用に変換すると、上半身2 の情報(上半身を親とした X, Y, Zの回転情報)は mio を使った時点で欠落します。(追記:必ず欠落するのではなく mio で読み込んだ PMD モデルに依存しているようです。後述の dictionary に記述がない場合は、日本語ボーン名が英語に変換されず吐き出されます。)
一方、Secondlife のアバターの標準ボーン構造をみると以下のようになっています。

hip
   abdomen
      chest
         neck
            head
         lCollar
            lShldr
               lForeArm
                  lHand
         rCollar
            rShldr
               rForeArm
                  rHand
   lThigh
      lShin
         lFoot
   rThigh
      rShin
         rFoot

QAvimator などで Secondlife 用のポーズやアニメーションを作ったことがある人なら、この構造は見慣れたものでしょう。
この Secondlife の Avatar のボーン構造を、MMD の PMD/PMX の最近のボーン構造と照らし合わせてみると、以下のように考えることもできます。

hip (センター+下半身)
   abdomen (上半身 ただし、hip に含まれる下半身の向き・回転要素を削除)
      chest (上半身2  だだし、hip に含まれる下半身の向き・回転要素を削除) 削除の必要ないかも。ただいま検証中。理論的には相殺する必要はないはずです。。。。
         neck (首) *1 
            head (頭) *1 
      lCollar (左肩)
         lShldr (左腕)
            lForeArm (左ひじ)
               lHand (左手首)
      rCollar (右肩)
         rShldr (右腕)
            rForeArm (右ひじ)
               rHand (右手首) 
   lThigh (左足) 
      lShin (左ひざ) 
         lFoot (左足首) 
   rThigh (右足) 
      rShin (右ひざ) 
         rFoot (右足首)
*1 たぶん、調整が必要。なぜなら親ボーン(hip)に VMD で本来ないはずの下半身要素が入っているから。 これも調整の必要ないかも。検証中><

優れものツールである mmdbvh2slbvh は作者様のご好意によりソースコードも公開されていますが、その中をみると、hip の部分はセンターと下半身の位置・回転を合成そして微調整をし、adbomen は hip の子ボーンとなるため、VMD 上半身の回転から hip に含まれてしまった VMD 下半身の回転を割り引いたものとしてモーションを生成しています。上記の chest の部分は当時は上半身2 ボーンがそれほど普及していなかった、さらに mio が吐き出す bvh のボーン構造も標準以外の上半身2ボーンを無視していたため(正確に書くとmioでの使用ボーンに依存し、dictionary に上半身2対応の英語表記が登録されていないため、後の工程で処理可能になっていなかった)、chest の部分は基本的にはなにもしない(=abdomen の直線延長ボーン)扱いとなっています。

もし、mio が上半身2ボーンを含めた BVH ファイルを生成し、さらに、mmdbvh2slbvh が chest 部分のデータを上半身2から生成することができれば、そもそも SL Avatar のボーン構造からすると上半身2を前提としたアニメーションのほうがなめらかになるのでは?というのが今回考えたことでした。

ここでいえることは「多段化されていない標準モデル」用のモーションはきれいに変換できるが、多段化されたボーンを前提としたモーションはちょっと違和感が出る、その理由は特に上半身2ボーンにツールたちが対応していないから、ということでしょう。
VMD モーション変換をするときは、この点に注意してモーションを選ぶといいですね。



さて、、、、
以下は、まだおすすめできる十分な情報と経験が私にないので、質問やご要望をうけても対応できませんので、、、、その点をご了承いただける方はご参考までに。。。。
これは、試行錯誤で見つけた方法であり、そのプログラム的な根拠はありません。ですので、なんら保証もありません。本当に参考程度に見てください。

----------------------------------------------------

[追記:2012/9] 以下の情報のアップデートになります。以下の投稿では mio でのカスタマイズが不要な MMDBVHToSLBVH.EXE をご紹介しています。

http://snumaw.blogspot.jp/2012/09/chest.html

----------------------------------------------------

mio で上半身2 を BVH ファイルに組み込む方法

1) mio のサブフォルダ data を開く
2) mmd サブフォルダを開き、dictionary テキストファイルをメモ帳などで開く
3) 標準ミクのボーン構造が書かれているので、上半身,upper_body の下に 上半身2,upper_body2 を追記し、上書き保存する。(バックアップはあらかじめとっておくこと)
4) mio を起動して、上半身2 ボーンを持っているモデルを読み込む。(このとき、たぶん、頂点数などが多かったり(?)すると、モデルが表示されれない場合もあります。が、気にしない) 5) VMD を読み込み、Export する。

(たぶん、vmdviewer を使わずにコマンドラインでの convert がもっともスマートかも。上半身2モデルを読み込む必要があるかどうかは、私も実は疑問です。)(追記:これがビンゴでした。。。mio で指定する pmd/pmx は対応するボーンを持ったモデルじゃないとだめだったんです)

これで吐き出された BVH をメモ帳(は、正直つらいので、他のテキスト編集エディタがお勧めです)で開き、ボーン構造に upper_body2 が含まれていれば成功、フレームの upper_body2 に該当する要素にデータが入っていれば大成功です。
しかし、これだけでは SL に持っていくことはまだできません。
以下は Visual Studio という Microsoft のプログラム作成ツールを使います。(無料版もあります)なので、正直一般的には難しいと思います。


mmdbvh2slbvh で上半身2ボーンと chest を関連付ける

mmdbvh2slbvh のソースコードをダウンロードして、ソリューションを開き、BVHConverter.cs の abdomen 変換処理の下に chest 変更処理を abdomen を参考に追記して、ボーン対応構造にも chest と upper_body2 を追記して、ビルドする。
上を読んで「なるほどね」と思った人はトライしてみる価値はあるかもです (^^;
まだ、首と頭の調整をいれていませんが、上記 改造 mio と改造 mmdbvh2slbvh を使ってコンバートした 上半身2 前提モーションが以下になります。


なんか、まだまだやること(楽しめること)いっぱいありますね。

[追記]
mio は読み込んだ PMD モデルの構造を参照して BVH ファイルを吐き出すようです。ですから、上半身2のモーションを変換するには上半身2ボーンをもったモデルを使わなければいけません。dictionary ファイルでは日本語ボーンを英語に変換する対応を提供しているようです。

mmdbvh2slbvh では、シンプルに上半身2(upper_body2)を処理し、それが chest であることの関連づけだけで OK でした。

検証のために比較した動画が以下になります~。

2012年3月17日土曜日

[MLDU] 同一ダンスアニメーションのリピート

元ネタは Dance Queens の以下のブログ記事です。

http://sldancequeens.blogspot.jp/2012/03/repeating-dance-in-huddles.html

Nottoさんからのアドバイスは
・ 他のダンスを 0.1 秒みたいな感じで間にいれる

質問をされた方はループじゃないダンスアニメーションを最後まで再生し、もう一度同じダンスを始めから再生、そして finish の pose をさせたかったわけです。

ダンス スクリプトを書いた経験のある人は比較的早くこの問題に気が付くと思います。
現時点での Secondlife のアニメーション管理では同じアニメーションをかぶせてダンスさせることができません。

え?かぶせて?

そうなんです。おおよそダンスの「つなぎ」を重視するダンス スクリプトはノートカードで以下のように記述した場合(以下は MLDU の記述方法)、

DanceA, 8.0
DanceB, 4.0

DanceA を開始し、8秒後に DanceB を開始し、4秒後に終わる、という流れですが、スクリプト的には

・DanceA を開始
・8秒後に Dance B を開始(これを DanceB を DanceA にかぶせる、といいます)
・直後に DanceA を停止(止めるまでのインターバルはいろいろあります)
・DanceB 開始後4秒後に DanceB 停止

とします。十分にキャッシュされているとかぶせる必要はないのですが、かぶせることによってスムーズなアニメーションのつなぎが可能になります。ただし、アニメーションの優先順位には注意してください。優先順位の低いアニメーションだとかぶせても優先度の高いアニメーションが再生されたままになります。

この仕組みを採用しているダンス HUD だと、同じアニメーションの繰り返しができません。
なぜなら、DanceB を DanceA と置き換えると

・DanceA を開始
・8秒後に DanceA を開始
(同じアニメ―ションなのでDanceA は再スタートされない)
・直後に DanceA を停止
(DanceA は一個しか動いていないので、最初に開始した DanceA が停止)
・再スタートされなかったところから4秒後に DanceA 停止
(アニメーションリストチェックしていればスルー、していなければ DanceA がないためスクリプトエラー)

実は MLDU ではこのリピートの扱いについて MLDU4 と MLDU5 では変えています。

MLDU4 では忠実にユーザーの指定通りにアニメーションを再生しようとしていました。DanceA の次に DanceA をユーザーが指定したときには

・DanceA を開始
・数秒後に DanceA を開始
・もし、今踊っているダンスと開始するダンスが同じならば現在のダンスを停止
・DanceA を開始

というシーケンスにしています。よって、一瞬ダンスがとまります。もしくは立ち位置がかわります。

しかし、MLDU5 にてシーケンスダンスもしくは組みダンスを構成している場合は、同じダンスを踊り続けながらポジションや向きを変えたい、という要望があったため、この仕様を撤廃しました。MLDU5 を選んでくれたユーザーさんは「同じダンスを繰り返したい」というニーズより「同じダンスを踊り続けながら位置・向きを変えたい」というニーズのほうが重要とみなしたからです。

ですので、以下のようなノートカードの場合、DanceA のアニメーションが24秒とした場合、

DanceA, 8.0, 位置A, 向きA
DanceA, 8.0, 位置B, 向きB
DanceA, 8.0, 位置C, 向きC

DanceA は24秒間踊り続けますが、8秒ごとに位置と向きが A –> B –> C と変化します。

MLDU4 は同一アニメーションへの再開始対応をしていますが、MLDU5 は上述の理由で再開始対応をしていません。次のダンスを開始し、前のダンスを止めるまでのインターバルはスクリプト内で固定値 (0.5秒) としていますが、これは前のダンスと今のダンスが「違う」場合のみ、アニメーションをかぶせてインターバル後に停止しています。そのため、0.1 秒の短い「違う」ダンスをいれると、インターバル(0.5秒)分は長く「違うダンス」を踊ってしまいます。

0.5 を短くすればいいのですが、0.5 によるダンスを踊らない「棒立ち時間」を回避できるのです。とくにキャッシュが十分にされているはずでも、SIM のアバタ―数などが多くなってくると、SIMおよびビューワー側のキャッシュが足りなくなり一度おどったはずなのに一瞬止まることが発生します。私はそちらのほうを優先して解決しようとしたわけです。

ま、、、インターバルは直せるのでご希望の方はインワールドでノートくださいね。(でも、おすすめはしません~)

TBS