Wiki Menu

最近の更新 (Recent Changes)

2020-05-31
2015-11-08
2015-11-07
2015-11-05
2015-09-11

Latest File Release

MID2Motion (1.2.1)2015-11-07 15:31
MMDIKSolver (1.2)2015-06-13 19:45
MMDMotion (1.5.1)2015-11-05 17:38

Wikiガイド

MMDMotion

MikuMikuDance (MMD) のモーションを事前計算して、書き戻すためのJava ライブラリーです。

何これ

計算ずくで、MMDモーションを作る人むけです。 VMDConverer で CSV にして、 MS Excell とか Openoffice Calc でやればいいじゃんと思ってる人もいるかもしれませんが、 2D ならまだしも、3D のベクトルや行列の計算を2D の表計算でやりたいと思う人います? 私は無理だと思ったから、これを作りました。

必要なもの

  • Java Development Kit SE 1.6 以降 (Sun でも, Oracle でも, OpenJDKでも可)
  • MikuMikuDance (以後 MMDとよばれる.)
  • MMD用のモデル (PMX, PMD, CSV形式)

特徴

このライブラリーは、

  • VMD か VMDConverer用csv を直接読んで、モデルデータもあるならそれにも適用し、ボーンの全座標を決定します。
  • その後、あなたが意図した計算(あなたがプログラムする部分)を適応してモションを書き換え、書き戻すことができます。基本的な線形幾何計算ができます。
  • 書き換えたモーションをVMD に直接書き戻すことも、また CSV にすることもできます。(要するにVMDとCSVの相互変換もできます。)

ダウンロード

MMD Motion リリースリスト

現在最新リリースは、 Version 1.5.1.

インストール

  • Java Development Kit, Java Runtime Environment があるなら、*.jar がコーヒーカップのアイコンで表示されてます。 なければ、Java Development Kit をインストールしてください。 Version 1.6 以降ならなんでも動くと思います。(IBM製では、swing を別にインストールする必要があります。)
  • 基本はそれだけです。*.jar はどこに置いてあってもかまいません。普通はあなたが書くプログラムと同じディレクトリ(フォルダー)におきます。

実行

VMD2CSV.png

  • 一応サンプルプログラムとして、VMD2CSV という小さなクラスが入ってます。 MMDMotion-1.5.1.jar をダブルクリックなどで実行すると、これが動きます。 単に、VMD ファイルと CSV ファイルの相互変換するだけです。コマンドラインでは、
    1. java -jar MMDMotion-1.5.1.jar
  • このサンプルプログラムは、後ろにファイル名が書いてあると、GUIを開かずにそのファイルを変換します。スクリプトなどから実行するのに便利です。
    1. java -jar MMDMotion-1.5.1.jar kanabass.csv
  • でも、これはライブラリーなので、自分で java のプログラムを書いてリンクしてください。コンパイル例はこうです。
    1. javac -cp MMDMotion-1.5.1.jar;togagem-3.n3.jar (あなたの作ったjavaソース)
  • その後、.java.class に変わったファイルができるので、こうやって実行します。
    1. java -cp MMDMotion-1.5.1.jar;togagem-3.n3.jar;./ (.class を省いたクラス名)
  • 一応Maven で管理しているので、Maven 2以降に対応している IDE (NetBeansEclipse) を使うと楽です。

仕様などの文章

  • Java API Doc: prweb:/mmdmotion/apidocs
  • MMDのモーションやモデルの構造と MMDMotion での扱いはデータ構造
  • MMDMotion は3D画像や動画を表示・作成する機能は持ってません。モデルの読み込みは、 ボーンとモーフなどモーションと関係のある部分しか読み込みません。よってメモリー使用量はとても少ないです。

プログラム例

例1 モーションの読み書き

  • src 以下に全ソースコードがあります。それを読んでもいいですが、まずは jp.sourceforge.mmd.motion.swing.VMD2CSV.java を見て理解してください。
    1. String filename="test.vmd";
    2. Motion m;
    3. FileInputStream fis;
    4. FileOutputStream fos;
    5. try {
    6. fis=new FileInputStream(filename);
    7. m = new Motion().fromVMD(fis); // ファイルからモーションを読む
    8. fis.close();
    9. filename=filename.substring(0,filename.lastIndexOf('.'))+".csv";
    10. m.toCSV(fos=new FileOutputStream(filename)); // CSVで書き出す
    11. fos.close();
    12. } catch (FileNotFoundException ex){
    13. System.err.println("ファイルが見つかりません。"+ex);
    14. } catch (IOException ex) {
    15. System.err.println("IOエラーです。"+ex);
    16. } catch (MmdFormatException ex) { // 違うファイルだった場合
    17. System.err.println("MMD のファイルじゃありません。"+ex);
    18. }

例2 モーションの適応から変更

サンプルソースプログラム: MMDMotionSample.java

  • まずはモデルデーターを用意します。 (参考 Model API Docs)
    1. Model model=null;
    2. try {
    3. FileInputStream fis=new FileInputStream("初音ミク.pmd");
    4. model=Model.fromPMD(fis);
    5. fis.close();
    6. }catch (MmdFormatException ex){
    7. System.err.println(ex.getMessage()); // MMD関連ファイルじゃない
    8. } catch (FileNotFoundException ex) {
    9. System.err.println(ex.getMessage()); // ファイルが見つからない
    10. } catch (IOException ex) {
    11. System.err.println(ex.getMessage()); // IOエラー
    12. }
  • モーションをモデルに適用します。 (参考 Motion API Docs)
    1. Motion motion=null;
    2. try {
    3. FileInputStream fis=new FileInputStream("motion.vmd");
    4. motion=new Motion().fromVMD(fis);
    5. fis.close();
    6. model.setPoses(motion.get(0)); // 0 frame のキーポーズを取得してモデルに適用
    7. model.resetChanged(); // 変更フラグをリセット
    8. } catch (FileNotFoundException ex) {
    9. System.err.println(ex.getMessage()); // ファイルが見つからない
    10. } catch (IOException ex) {
    11. System.err.println(ex.getMessage()); // IOエラー
    12. }catch (MmdFormatException ex) {
    13. System.err.println(ex.getMessage()); // MMDのファイルじゃない
    14. }
  • 何らかの計算をしてボーンを動かします。今回は右手首の真下 (0,-10,0) に右足IKを持ってきます。 (参考 Bone API Docs)
    1. Bone rhand=model.get("右手首");
    2. Bone rfoot=model.get("右足IK");
    3. rfoot.translationToG(
    4. rhand.getPos().add(new Vector3D(0,-10,0))
    5. );
  • モデルから新しいポーズを取得します。
    1. Pose [] ps=model.getChanged();
  • モーションオブジェクトに入れます。
    1. motion.putAll(ps,0);
  • モーションファイルに書き戻します。
    1. try {
    2. FileOutputStream fos;
    3. motion.toVMD(fos=new FileOutputStream("newMotion.vmd"));
    4. fos.close();
    5. } catch (IOException ex) {
    6. System.err.println("IOエラーです。"+ex);
    7. }

著作権・ライセンス(使用許諾)

すべてMIT License です。これは、

  • 著作権表示を保持するかぎり、自由に転載・改変してもいい。 (商用利用も可だが、このライブラリーを使用していることを必ず明記。)
  • 著作者はこのプログラムによって発生する損益に完全に無責任。

ということだけ、覚えて置いてください。

TogaGem-3.n3.jar

Copyright(c) 2010 olyutorskii, nazo. http://mikutoga.osdn.jp/

TogaGem は、3D動画制作ツール、MikuMikuDance(MMD)で用いられる 各種データファイルを読み込むためのJavaライブラリです。 著作者は、olyutorskii です。MIT License で転載・改変が認められております。 nazoが、PMX読み込みとMMD Ver. 9 用の補間関係で書き換えてます。 Ver. 3.n 系列のサポートページは、 http://osdn.jp/users/naz_o/pf/TogaGem/wiki/ です。 MMD Motion は、このライブラリーに強く依存しております。

MMDMotion-1.5.1.jar

Copyright(c) 2015 nazo http://mmdmotion-java.osdn.jp/wiki/MMDMotion

MMD のモーションを計算で生成するために作った Java ライブラリです。(これです。) 著作者は、nazo (ときどき Naz.) です。MIT License で転載・改変が認められております。

注意事項

※ MMD開発者の樋口M氏とは、これらは無関係です。樋口M氏に問い合わせても迷惑なだけなので、やめましょう。

MMD Motion 変更履歴

  • 1.5.1 (2015-10-25)
    • Matrix, Vector3D の定数化. clone する必要が無くなる.
    • 逆行列のバグフィクス.
    • JUnit 単体テスト.
    • Bone.rotationのバグフィクス(ローカル初期軸がある場合に発生するバグ).
  • 1.5 (2015-08-01)
    • IKSolver クラスの統合 (MMDIKSolver は完全にGUIアプリケーションになります)
    • Pose の一般化とそれによる Motion の大幅な簡略化
    • 追加メソッド:
      • Bone.addExternalChild 外部親子接続
      • Motion.remove 関連
  • 1.4 (2015-06-20)
    • 追加メソッド:
      • Bone.TranslationToG
      • Motion.getInterpolation 関連
    • 補間に関するバグフィクス
  • 1.3 (2015-06-12)
    • ボーンモーフ・グループモーフ対応
    • ボーンリンク(連動回転・連動移動)のテストをクリア.
    • FileDropTarget などのGUI 部品の追加
  • 1.2 (2015-05-29)
    • PMX対応
    • 手の自動ローカル座標設定
  • 1.1 (2015-04-04)
    • About Dialog の自動化
  • 1.0 (2015-03-20)
    • sourceforge.jp 公開バージョン.
    • PMX モデルのCSVはリンク関係で若干のバグがまだあるので、リンクは極力使用しない.
  • 1.0pre (2015-02-22)
    • Pre calculated IK Solver から分離。
    • PMDの直接読み込み、VMDの直接読み書き、CSVモーションの読み書きができるようになっている。
  • まだ IK Solver の一部 (2015-01-29)
    • VMD のモーフモーションまでの対応。一応の完成。

謝辞

MMD開発者の樋口M氏

言うまでもないですが、これがないとそもそもこんなライブラリー作る意味がないです。楽しいプログラムです。

PMDEditor, PMXEditor の極北P氏

PMDの解析の先駆者で、PMXモデルの提唱者でもあります。いろんなモデルが製作されるようになったのは、 間違いないなくこの人のおかげです。ありがとうございます。

MikuToga の olyutorskii

TogaGem の作者で、MMD モーションの解析をしていた先人です。補間のところはいまいち分からなかったので、助かりました。