Tag Archive | MikuMikuDance

Vmd2XML 2.101.4 リリース

Vmd2XML の 2.101.4 版がリリースされました。

Vmd2XML は、MikuMikuDance(MMD)のモーションデータ(VMDファイル)をほぼ無劣化でXML形式と交換するためのアプリケーションです。

→ リリース情報

MikuMikuDance Ver7.40から採用された、新仕様VMDモーションファイルの読み書きに対応しています。

VMDの仕様追加に伴い、XMLファイルでも新たなスキーマが追加されました。
→ 新XMLスキーマ

TogaGem 3.101.4 リリース

TogaGem の 3.101.4 版がリリースされました。

TogaGem は MMDで用いられる各種データファイル(PMD,VMD)の読み込みをJavaで行うためのライブラリです。

リリース情報

MikuMikuDance 7.39×64 でわずかに変更のあったVMDモーションファイルのベジェ補間パラメータ冗長部や、Ver7.40から採用された新仕様VMDモーションファイルの読み込みに対応しています。

クォータニオンからオイラー角に変換する際の精度が向上しています。

VMDモーションファイルの仕様変更について

x64版の MikuMikuDance.exe、「Ver7.39.x64」のリリースと同時に、VMD モーションファイルの出力フォーマットに変更があったようなので、いまさらですが現時点での調査結果をさくっと報告。

→(2013-06-01追記) MikuMikuDance Ver7.39m もx64版と同様、出力するVMDモーションファイル仕様に変更があることを確認しました。
→(2013-06-09追記) MikuMikuDance Ver7.40 のリリースと共に、モデル表示とIK追従のオンオフを記録する仕様が新たにVMDに追加されました。(参考URL: 「とある工房」http://kkhk22.seesaa.net/article/365566628.html)

調査対象:

MMD配布元:VPVP http://www.geocities.jp/higuchuu4/

  • MikuMikuDance Ver7.39dot (配布ZIPのサイズ:5,367,048)
  • MikuMikuDance Ver7.39.x64 (配布ZIPのサイズ:5,423,541)

過去に配布されていたx64版バイナリ(2012年11月頃)

  • MikuMikuDance Ver7.39.x64 (配布ZIPのサイズ:5,443,071)

旧仕様

Ver7.39dot までの MikuMikuDance.exe では、VMD モーションファイルの出力に際して、ボーンモーションのベジェ補間パラメータ16byte が格納された後、先頭数バイトが欠損したベジェ補間パラメータのコピーが3回繰り返され(16×3byte)、欠損した箇所と反対側末尾には 0x01, 0x0100, 0x010000 が詰めパッドとして埋められていました。

参考資料:

新仕様

Ver7.39.×64 では、各所に埋められる詰めパッドの先頭が 0x01 でなく 0x00 になった模様です。

サンプル

Ver7.39.×64を 用いて、ダミーボーンモデル読み込み直後にボーン01を初期状態のままフレーム10でフレーム登録したデータをモーション保存。

アドレス 0x00000065 の 0x14 で始まる 64byte が、ベジェ補間パラメータ格納部です。Ver7.39dot までは赤字の箇所が 0x01 でした。

(↓クリックで拡大)

mmdbin

提言:

VMD モーションファイルを読み込むツールは、ボーンモーションの補間パラメータ 64byte を読む際、先頭 16Byte だけ読み込み、後の 48Byte は無条件に読み飛ばしてしまっていいんじゃないでしょうか。

Vmd2XML 1.101.2 はまだ対応できていませんね、はい、神経質な実装ですみません。

VMD モーションファイルを書き出すツールは、もうしばらくの間、旧仕様通りに欠損パラメータのコピーと 0x01 で始まる詰めパッドを出力しておいたほうがよいのではと思います。が、どうなんでしょう、各モーションツールでの読み込み時の対応具合は。


XSLTで学ぶ初音ミクの改造作業

はじめに

Pmd2XML を使ってMMDモデルをXML化したのはいいけど、「それのどこが便利なの?」と思われるモデラーさんもいると思います。

今回は、XML化したMMDモデルのデータ活用の可能性の一つとして、XSLTによるモデル改造をしてみたいと思います。

XSLTとは?

XSLTプロセッサにXMLデータと変換ルールを入力すると、ルールに従い変換されたXMLやテキストデータが出力されます。

XMLを読み書き変換する仕事の多くは、専用プログラムをその都度毎回開発するよりも、XSLTを使った方がひょっとして効率よいんじゃないの、と期待されています。
XSLTは、XMLで渡された帳票データをHTML化する時などにも使われており、既に活用しているWebプログラマも多いと思います。

手順

今回は、MikuMikuDanceの配布物に同梱されている「初音ミクver1.3」モデル(あにまさ氏モデリング)を、XSLTを用いて少しふくよかな体型に改造してみたいと思います。

vanillamiku
まずはPmd2XMLで「初音ミク.pmd」をXML化します。

java -jar pmd2xml-1.201.2.jar -i 初音ミク.pmd -o miku.xml

XML化したモデルファイル、miku.xmlが生成されました。

次に、XMLファイル中のpositionタグのx属性値のみ1.2倍に書き換えるよう指示するXSLTファイルを用意します。

[ fat.xslt ]

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:pmd="http://mikutoga.sourceforge.jp/xml/ns/pmdxml/130128"
  version="1.0"
>

  <xsl:template match="pmd:position">
    <xsl:element
      name="position"
      namespace="http://mikutoga.sourceforge.jp/xml/ns/pmdxml/130128"
    >
      <xsl:attribute name="x">
        <xsl:value-of select="@x * 1.2" />
      </xsl:attribute>
      <xsl:attribute name="y">
        <xsl:value-of select="@y" />
      </xsl:attribute>
      <xsl:attribute name="z">
        <xsl:value-of select="@z" />
      </xsl:attribute>
    </xsl:element>
  </xsl:template>

  <xsl:template match="*">
    <xsl:copy>
      <xsl:for-each select="@*">
        <xsl:copy />
      </xsl:for-each>
      <xsl:apply-templates />
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

それでは変換定義 fat.xslt に従って miku.xml を XSLT プロセッサに変換させてみましょう。私はJavaプログラマなので、今回は Apache Xalan-J を使ってみます。みなさん各自好みのXSLTプロセッサを使ってください。

java org.apache.xalan.xslt.Process -in miku.xml -xsl fat.xslt -out fat.xml

ミクさんが横に1.2倍太ったモデルファイル、fat.xmlが生成されました。
MikuMikuDance.exe で読めるよう、Pmd2XMLを使ってPMDファイルにします。

java -jar pmd2xml-1.201.2.jar -i fat.xml -o fat.pmd

PMDファイル「fat.pmd」ができましたのでMikuMikuDance.exeに読み込ませてみましょう。

fatmiku

頂点座標とボーン座標はちゃんとふくよかになっているようですね。本当はモーフや剛体を変換するためのタグと属性もきちんと指定しないといけないのですが、今回は割愛。

XSLTでは、ループや条件分岐、各種演算子などを伴う複雑な変換ルールを記述することが可能ですので、MMDモデルの一括処理に適用可能な事例はまだまだいろいろあるのではと考えています。

.NET Framework による PMDEditor のプラグイン開発以外にも、モデルデータ一括処理の手段は用意されていると言うことで、どうぞよろしくー。


Pmd2XML 1.201.2 リリース

Pmd2XML の 1.201.2 版をリリースしました。

Pmd2XMLは、MikuMikuDance(MMD)のモデルデータ(PMDファイル)をほぼ無劣化でXML形式と交換するためのアプリケーションです。

リリース

130128版のXMLスキーマに対応しました。旧101009版XMLスキーマとの変換も当面サポートするよ。

モーフ0件のモデルを正しく読み書きできない不具合を1年以上放置していたのは本当に申し訳ないのです。

TogaGem 2.102.2 リリース

TogaGem の 2.102.2 版がリリースされました。

TogaGem は MMDで用いられる各種データファイル(PMD,VMD)の読み込みをJavaで行うためのライブラリです。

リリース情報

ずいぶん中途半端な形で出してしまいましたが、TogaGem依存アプリPmd2XMLの次版リリースのためにとりあえずこの状態でリリースしました。近いうちにかなり変わるはずなので、2.101.2版からの移行はしばらく見送った方がよいかもしれません。

Pmd2XMLとVmd2XMLで共通資産をライブラリで共有するのもうやめようかな面倒くさい…

PMDモデル テスト用データセット配布

Pmd2XMLの開発過程で、色々とテスト用のPMDモデルデータを作ることになったので、いったん配布します。

一連のテスト用PMDファイルが、PMDの入出力を行うソフトのテストで面倒を抱えている開発者のお役に立てれば幸いです。

※近日中に新版XMLスキーマが出るのでテスト用XMLファイルは多少変わると思います。

TestData_Pmd2XML_20130314.zip (45KB)

Pmd2XML開発元

PMXファイル構造のUML化(改訂2稿)

MMD(MikuMikuDance)で用いられる3Dモデルデータ、PMXファイルの構造をUML図に起こしてみた作業の改訂版です。

PMXファイルはPMDファイルの後継フォーマットで、UML図を見比べると特にスキニング構造とモーフ構造がより複雑になったことが解ります。


PMXモデル(ボーン)


PMXモデル(ポリゴン)


PMXモデル(モーフ)


PMXモデル(物理)


→ MMD各種データフォーマットに関する情報(VPVP wiki)

PMDファイル構造のUML化(改訂2稿)

MMD(MikuMikuDance)で用いられる3Dモデルデータ、PMDファイルの構造をUML図に起こしてみた作業の改訂版です。

PMXファイル構造と同様、やっぱり4枚に分かれることに。横線の無い箱は別図で解説済みということでよろしく。


PMDモデル(ボーン)


PMDモデル(ポリゴン)


PMDモデル(モーフ)


PMDモデル(物理)


→ MMD各種データフォーマットに関する情報(VPVP wiki)

PMXファイルのUML化

前回のPMDファイル構造図示化に引き続き、今回はMikuMikuDance(MMD)で用いられるモデルデータ、PMXファイルの構造をUMLに起こしてみた。PMXはPMDの後継フォーマットですん。

(2012-06-27追記) 改訂入りましたー

さらに図がでかくなったので四枚に分割だー。「モデル」「ボーン」「頂点」とか「材質」は共通。

PMDと異なり、PMXは極北氏作のファイルフォーマットのドキュメントがあるので、なるべく用語を合わせる努力は試みました。


PMXモデル(ボーン)


PMXモデル(ポリゴン)


PMXモデル(モーフ)


PMXモデル(物理)

物理周りはPMDとあまり差はないかな…


要望があればastah* community (UMLエディタ)用のデータファイルも配布するけど需要はあるだろうか…。

→ MMD各種データフォーマットに関する情報(VPVP wiki)