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 のプラグイン開発以外にも、モデルデータ一括処理の手段は用意されていると言うことで、どうぞよろしくー。


広告

タグ: ,