This Archive : 2010年07月

スポンサーサイト

--.--.-- *--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

MMDのクローン

2010.07.12 *Mon
萌え木の活動の一環として、樋口優氏のMMD用のデータを再生できる環境を製作中。
まだ問題はあるものの、一応踊るところまではできた。ただ、まだわからないところがあり、ここでひと通り情報を整理しておきたい。

1. まず、座標系について。MMDはDirectXでレンダリングされているため、OpenGLとはZ軸の向きが反対になる(OpenGLは右手系)

2. レンダリングは非常に不思議。テクスチャを用いたToon Shading(普通はMMD起動時に読みこまれる)と、通常のライティングモデルを両方用いている。通りすがりさんのページによるとmaterialはmirror color(環境色(ambient))とspecularとdiffuseだけがあるように書かれているが、これをそのままOpenGLのマテリアルとして入力してもうまくいかない。少なくともmirror colorとambientは意味として食い違っているし、そもそもこのmirrorとdiffuseをそのまま加算すると値が1を超えてしまう。Toon textureと、曰くmaterialの値をどう今後すればMMDの色になるのだろうか。
現状では、確かToon textureの値にdiffuseの値をかけてToon texturingで貼りつけ、specularは普通にシェーディングを使うような形だったような気がする(よく覚えていない)。でも微妙に色が違う。

122023682.jpg


3. 各ボーンには、Quaternion用の4つの数と、位置のオフセットの3つの数、それと、ボーンの根元の位置が入っている(他にもあるけど)。Quaternionとオフセットの値は、親ボーンからの相対値になっている。まずQで回転したのちに位置をオフセットする(多分)。一方、ボーンの根元の位置は絶対値であるので注意。

4. IKについて。各ボーンには、そのボーンがIKの影響下にあるかどうかの値が入っている(IK parent bone)。また、表示用じゃなくて、IKの位置の計算のためだけにボーン構造を持っている。それとは別に、IKセクションがあり、モデルの中に含まれているIKをリストしている。この三種類の情報は、必ずしも一貫性があるとは限らない。ここが謎なところ。
例えばデフォルトで入っている初音ミクのデータの場合、ボーンのうち、IK parent boneが「左足IK」を差しているものは左足、左ひざ、左足首、左つま先の4つのボーンなのだが、「左足IK」に対応するIKの情報として、この影響下にあるボーンの中に「左つま先」は含まれていない。左つま先のボーンは、もう一つ他のIK「左つま先IK」の中に入っているのだ。しかも私が持っているアニメーションデータでは、このIKには何の情報も入っていないにもかかわらず、足の関節が伸びたりするのだ。よくわからない。

5. MMDでは、IKの影響下にあり、かつ「ひざ」という名前が入っているボーンは、前方向にしか曲がらないようにできている。この「前方向」とは、モデル全体のセンターボーンの前方向などではなく、IKの最も元にあるボーンのZの向きである(間違っているかもしれないけど)

6. IKのターゲットの位置は、IKの名前に"先"という一文字を足した名前を持つボーンに含まれている。もしくは、IKの位置のボーンの、一つ子供だと解釈されているのかも。他のデータで試してみないとわからない。

7. IKのターゲットの補間は、線形補間。(各フレームを保持するのでなく)キーフレームでアニメーション情報を保持するとするなら、IK計算はリアルタイムに行うしかない。

...とまあ、こんなわけで、MMDのフォーマットが理解できなくて結構苦しんでいたのだが、一応動きはしたのでビデオを以下に。
物理計算と表情の変化はまだ実装していないので髪の毛がかなり変。これは次にやるつもり。



あ、あと、ボーンのweightも使っていない。

追記:極北PさんがIKについて分析された結果を無断転載させて頂きます。すばらしいです。:

●[IK]
IKリスト : IKボーンとして機能するボーンの一覧。

IK(数値) : 対応するボーンIndex
Target(数値) : IKボーンの位置にこのボーンを一致させるようにIK処理が行われる
IK値1(整数) : IK処理での計算再帰回数
IK値2(実数) : 一回のIK計算での制限角度
影響下ボーンリスト : IKの影響下にあるボーン一覧

※各関連値は[ボーン]側で設定されている項目もあるが、IKリストはボーンリストとは独立して必要な模様。

※IK処理においては、特定の制限角度がボーン名に従ってMMD側で調整されるようです。
例:ひざ→縦(X軸方向)にしか稼動しない


○IK値について
IK値によるIKの制御パラメータの関係について、大体以下のようになるようです。

IK値1, IK値2
小, 大 : IKのLink先ボーンに強く依存する=先だけよく曲がる(系列が短い場合はこれで十分)
大, 小 : IK系列全体で曲がるようになる(しなりが強くなり直線形状になりやすい)

大, 大 : 比較的、(小, 大) と同様の傾向を示すと思われる。
小, 小 : 非常に曲がりにくくなり、IKに対する追従も悪くなる

尚、IK値2は1.0でほぼ180度程度(おそらく稼動範囲の限界?)まで可能なようなので、
多くのボーン系列を持つような場合は、非常に小さな値にする必要がある模様。

IK値2による制限はIK影響下ボーンが下位に進むにつれ(ボーン列的には根元に行くになるに従って)、
制限角度が拡がっていく仕様なので、多関節の場合、先端付近より根元の方が比較して大きく曲がるようになる。

※IK値1は最大で256までとなります(MMDの内部動作より)。できるだけ少ない数の方が変形時の負荷が減少します。
スポンサーサイト
COMMENT : 3
TRACKBACK : 1
CATEGRY : 実装

プロフィール

大和田 茂

Author:大和田 茂


元IT系の研究家。現在はゲーム/玩具作家をめざしている。


Stud Hungering for Intense Gratification and Erotic, Rapturous Undulation


Get Your Sexy Name





Twitter Updates



    follow me on Twitter




    最近の記事



    最近のコメント



    最近のトラックバック



    月別アーカイブ



    カテゴリー



    ブロとも申請フォーム

    この人とブロともになる



    ブログ内検索



    RSSフィード



    リンク

    このブログをリンクに追加する



    Copyright © 大和田茂ブログ All Rights Reserved.
    Images from ふるるか Designed by サリイ
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。