重要なお知らせ

 ・10/14をもってMMDD(Miku Miku Dance Drawer library)はMMF(MikuMikuFlex)に名称が変更されました。

  一部ドキュメントの修正が終わっていない可能性がありますがMMDDとMMFは同じものです。

 

MMFって何?

紹介動画

プロジェクト紹介動画

http://www.nicovideo.jp/watch/sm21718962

作業進捗報告動画

http://www.nicovideo.jp/watch/sm21806767

(New!)
http://www.nicovideo.jp/watch/sm22078209

概略

MMFはMiku Miku Flex libraryの略です。MMD、MMEの仕様を満たすモデル、エフェクトの表示などをするオープンでフリーなライブラリです。MMD関連のソフトウェア、ゲームなどの開発に利用することが可能です。
このライブラリを利用することにより、MMD(MikuMikuDance)のアイデアに富んだ様々な作品を手軽にプログラマーが扱えるようになります。

DirectWirteやDirect2Dも使えるようになっているため、ゲーム開発ライブラリとしてもそのまま利用しやすい。

プロジェクトのきっかけ

MMDは2008年2月に公開され、その5年以上も経っている今でさえもその勢いは留まることを知りません。

MMDが出始めた当初、モデルファイルの形式はpmdファイルでした。MMDの開発者である樋口PはMMDのソースコードを公開しませんでしたが、第三者の多大な努力によりpmd形式は解析され、MMDXなどのライブラリを用いて開発できるようになりました。

その後、pmdからpmx形式に移り変わりMMDXは開発を終了してしまい、MMDの互換ソフトであるMMMが出てもその開発はクローズドで行われることは変わりません。pmx形式は公式にそのフォーマットが明らかにされていますが、誰かがそのフォーマットを表示できるライブラリを公開することをしなければMMDを取り巻くソフトウェアに参入するには多大な努力が必要であり、かつてpmdを取り巻いた環境とさほど変化はありません。

そこで、MMFはMMDがよりオープンで、ネットを介して自由にプログラマーが参入できる場として発展することを願い開発を開始しました。MMFは従来のMMDに関係するソフトウェアが採用していた形式などを最大限尊重するとともに、新たに登場するべきソフトウェア全てに対してMMDの形式を手軽に利用できる可能性を提供します。

 MMDXと何が違うの?

MMDのモデルを表示するライブラリとしてMMDXが有名です。
MMFは以下の点でMMDXと異なります。

  1. サポートするフォーマットがpmd形式ではなくpmx形式がメインです。
  2. MME形式のエフェクトもライブラリの機能として持ちます。
  3. DirectX11上で動作します

プロジェクトの目標

  • MMFによりMMDのフォーマットがより広く普及すること。
  • MMD関連のソフトウェア開発の敷居を下げること。
  • PMXの仕様を拡張することなく実装すること。
  • いままでのエフェクトをできる限り改変せず動くように実装すること。
  • DirectX11上での実装により、長期的にも大きな改変をすることの必要のないライブラリとすること。
  • Oculus RiftとかKinnectにもライブラリで対応したいなぁ・・・とか。

 メンバーの募集

このプロジェクトは、プロジェクトの作業に協力できる人を募集しています。詳しくは、メンバーの募集を御覧ください

 宣伝動画のコメントへの返信など

【MMD】MMD描画ライブラリ作成プロジェクト【プログラミング】sm21718962

コメントへの返信

【MMD技術部】MMD描画ライブラリ経過報告1sm21806767

コメントへの返信(準備中)

 作業進捗表

最近の更新内容

2014/1/1 WPFをサポートしました。透明のウィンドウなどにも描画可能です。詳しくはSampleをご覧ください。

進捗状況の見方

 Implemented 概ね完了  In progress 未解決バグあり Planning 仕様策定中 - 手つかず

分野の見方

MMD/MMMの仕様互換機能 MMEの仕様互換機能 MMF独自実装/全般的に必要なもの

進捗率はあくまで目安です。Implementedなのに100%になっていない場合は、動くが内部的に不安のある所で編集する必要が有ることを表しています。現在、CodePlexのページエディタの不具合によりセルの背景色が変更できないため、一部色の変わっていない部分があります。

分野 内容 担当者 進捗状況 進捗率 備考
基幹 Direct3Dデバイスの管理/作成 LimeStreem Implemented 100%  
  DirectWriteの管理 LimeStreem Implemented 100%  
  Direct2Dの管理 LimeStreem Implemented 100%  
  スプライト表示(DirectWrite) LimeStreem Implemented 100%   
  スプライト表示
(GDI)
LimeStreem/
wasiyosi
Implemented 100%  
  TGAファイルの読み込み LimeStreem Implemented   100%  
  DirectX10.1互換 LimeStreem  Implemented  100%   
 PMX読み込み 頂点情報読み込み LimeStreem Implemented 100%  
  マテリアル情報読み込み LimeStreem Implemented 100%  
  表示枠情報読み込み LimeStreem Implemented 100%  
  物理演算読み込み LimeStreem Implemented 100%  
PMX書き込み PMX書き込み Tweety In progress 60%  
VMD読み込み モーション読み込み LimeStreem Implemented 100%  
レンダラー 頂点の読み込み/表示 LimeStreem Implemented 100%  
  材質色の反映 LimeStreem Implemented 100%  
  テクスチャの反映 LimeStreem Implemented 100%  
  トゥーンテクスチャの反映 LimeStreem Implemented 100%  
  エッジ - -    
  スフィアマップの反映 LimeStreem Implemented 100%  
  セルフシャドウ ビームマンP -    
  地面影 ビームマンP -    
  ワイヤフレーム描画 LimeStreem Implemented 100%  
スキニング ボーンによる頂点変形 LimeStreem In progress 70% SDEF,QDEF変形が未実装。ただしSDEFはBDEF2として一時的に実装。
  ローカル軸 - -    
  付与 LimeStreem Implemented  100%  
  FKによるボーン位置の指定 LimeStreem Implemented 95%  
  IKによるボーンの位置の指定 LimeStreem Implemented 100%  
  回転量制限 LimeStreem Implemented 100%  
モーション モデルモーションの実装 LimeStreem Implemented 100%  
  カメラモーションの実装 LimeStreem Implemented 100%   
 モーフ 頂点モーフ実装 LimeStreem Implemented 100%   
  材質モーフ実装 LimeStreem Implemented 100%   
  ボーンモーフ実装 LimeStreem Implemented 100%   
  グループモーフ実装 LimeStreem Implemented 100%   
  UVモーフ実装 LimeStreem Implemented  100%  
  追加UVモーフ実装1~4 LimeStreem Implemented 100%  
  フリップモーフ実装 - -   PMX2.1 の仕様
  インパルスモーフ実装 mはげ -   PMX2.1の仕様 
物理演算 モデルの剛体の反映 mはげ Implemented 100%  
  モデルのジョイントの反映 mはげ Implemented 100%  
  SoftBody実装 mはげ In Progress  70% 基幹部分は完了
エフェクト エフェクトの読み込み LimeStreem  Implemented 100%  
  コンパイル済み
エフェクトのキャッシュ
 LimeStreem Implemented 100%  
  #defineの定数  LimeStreem Implemented 100%  #defineの詳細を参照のこと。
  テクニック LimeStreem Implemented 100%  テクニック仕様
  MME仕様 スクリプト LimeStreem In progress 80% Draw=Buffer,ScriptExternal以外実装
  MMEの仕様2.1
「ジオメトリ変換」
LimeStreem In progress 50% ObjectアノテーションがCameraの時のみ。
  MMEの仕様2.2
「ライトとマテリアル」
LimeStreem In progress 70% ライトを除く
  MMEの仕様2.3
「スクリーン情報」
wasiyosi Implemented 100%  
  MMEの仕様2.4
「時間」
LimeStreem Implemented 100%  
  MMEの仕様2.5
「マウス」
LimeStreem Implemented 100%  
  MMEの仕様2.6
「コントロールオブジェクト」
wasiyosi/LimeStreem In Progress  95%

ほとんどOK.(OffscreenOwner)の指定のみ未対応 

  MMEの仕様2.7
「テクスチャ関連」
LimeStreem/
wasiyosi
In progress  60% テクスチャ仕様
  MMEの仕様2.8
「エフェクトファイル」
LimeStreem Implemented 100%   
  MMEの仕様2.9
「特殊パラメーター」
LimeStreem Implemented  100%  
  MMEの仕様2.10
「頂点シェーダーセマンティクス」
- Implemented?  100%?  SV_VertexIDで代用? 
  MMFエフェクト仕様拡張1
「ジオメトリシェーダー」
- Implemented? 100%?  SM4の機能だけで拡張が可能、MMFで新たな仕様を定義する必要なし? 
  MMFエフェクト仕様拡張2
「テセレーション」
- Implemented? 100%?  〃 
  MMFエフェクト仕様拡張3
「cbuffer/tbuffer」
LimeStreem Implemented 100% 

マテリアル用のcbuffer拡張を仕様として実装。

  MMFエフェクト仕様拡張4
「StreamOutput」
  Planning ???% 仕様策定中「Stream Output
  MMFエフェクト仕様拡張5
「その他」
- Planning    fxgruopの仕様を策定。
  FPSカウンタ LimeStreem Implemented  100%  
Oculus Riftの対応 LimeStreem In progress  90% 完成してはいるが、ライブラリ側にマージしていない。 
  KinnectによるFKの対応 LimeStreem In progress 95%   

MMFのシェーダーに関する新仕様に関しては、「MMFエフェクト仕様新規拡張部分」を御覧ください。


詳しい仕様

Direct3D11上で動作するライブラリです。

おおくのMMD関連のソフトウェアはDirectX9で実装されていますが、MMFはDirectX11で実装されています。
これにより、MME形式のエフェクトがより大きな可能性を持つことができます。例えば、以下の様なエフェクトが作成可能になることを期待できます。

テセレーションによる、よりリアルな表現。コレにより、例えば以下のようなことが可能になります。

テセレーションによるリアルな水面の表現(youtube動画)
テセレーションによるリアルな髪の表現(youtube動画) 

もちろん、大半の場合MMDはリアルであることはさほど重要視しないため、従来通りの表示をすることも可能です。

定数バッファ、テクスチャバッファを使用することも可能です。

これにより、多くのテクスチャ、多くの定数を利用するシェーダーを組んでもDirectX9と比べCPUとGPU間のデータ通信が軽くなります。従来より多くのテクスチャを張ってもリアルタイムレンダリングが可能となります。

Windows XP以前のOSでは動作しません。

DirectX11で得られる恩恵は多いものの、Windows XP以前のOSでは動作しません。これは、Windowsのグラフィックアーキテクチャに大きな変更が加えられたことと、Windows Display Driver Modelが導入されたことによります。

これは大きな欠点とも言えますが、2014年4月にXPのサポート期限を終了することを考慮すれば仕方がないとも言えます。

必要最低限の3DCGの知識で利用できます

MMDXと同様に、モーションの再生やモデルの表示を僅か数行で扱うことが可能です。

例えば、モデルを表示してモーションを再生するのには、フォームにMMF.RenderPanelを貼り付け以下のように記述するだけで動作します。

 

MMDModel model = MMDModel.OpenLoad("res\\miku.pmx");
model.Load(panel.RenderContext);//panelはRenderPanelの変数名
panel.RenderContext.AddResource(model);
IMotionProvider provider = model.MotionManager.AddMotionFromFile("res\\harehare.vmd");
model.MotionManager.ApplyMotion(provider);

Last edited Tue at 3:43 PM by Mhage, version 187