Title: MikuMikuDance for XNA利用及び開発に関するメモ
From: Wilfrem

このメモはMikuMikuDance for XNAの利用者及び開発者用に作られたものです。
利用者はこのメモを参考に利用をお願いします。
開発者はこのメモに自由に追記できます。これを利用して利用者に通知をしてください。

・使い方、リファレンス等
SourceForgeさんのMikuMikuDance for XNAに整備する予定ですが
ウィルフレムとしては分からないところは自分でソース読んでね(はあと)という感じでｗ
解り易いソースにしたつもりですので、頑張ってください。

・デモ用のプログラムに関する注意点
デモ用のプログラムではmikuモデルを読み込むコードがついていますが
モデルデータはまささんの著作物で、ミクはクリプトン社の著作物であるため、デモには入れていません
その為、デモはそのままでは動作しません。
各自本家MikuMikuDanceをダウンロードしていただき、付属しているモデルデータをお使いください。
なお、ミクそのものの利用に関してはクリプトン社のキャラクター利用のガイドライン(http://piapro.jp/license/character_guideline)を参考にしてください
ちなみに、デモのソースコードはライブラリと同じくMITライセンスです。
ライセンスに関しては最後を御覧下さい

・現在の実装状況
実装済み
・MMD用のモデルファイルの読み込み
・モーションファイルの読み込み
・アニメーション(補完ルーチン込)
・スフィアマップ(モデルのみ)
・ライト
・アクセサリの読み込み
・アンチエイリアス
・トゥーンレンダリング(エッジ及びトゥーンテクスチャ)
・アクセサリのスフィアマップ
・screen.bmpの置き換え機能
・影・セルフシャドウ
未実装・実装途中
・物理エンジンBulletの移植
・高速化
・Zオーダー問題修正

これから
・物理エンジンやアクセサリ周りは要ると言えば要るし、要らないといえば要らないかな？と思ってます。
・もし、必要な方がいたらライブラリの実装のお手伝いをお願いします
・また、これを使ってXBoxのゲーム作ろうぜって人がいたら、自分に声をかけてみてください。手伝うかも？(まぁ、忙しいので無理かもね)
・ちなみに、自分は1年ちょいでどっかに就職しちゃう可能性が高いので、そうするとインディーズとしては厳しくなるので多分X箱は無理になるでしょう。
・就活と研究忙しいです

ライブラリに文句がある人へ
・提案大歓迎！
・参加していじってみない？(人数が少ないとできることは限られますので……)

・MMD for XNAに関するメモ
一部のモーションファイルの読み込み不具合があるっぽい
ただ、一度MMDに読み込ませた上で、全フレームを改めて出力するとうまく直るっぽい

・Visual C# Express Editionを使用する方へ
ソリューションファイルを開くと「Solution Items」フォルダが開けません。とか出てきますが
無視して結構です。
(ソリューションルートにこのreadme.txtを入れて見れるようにしてあるのですが、Express版では開けないというのが理由で、ぶっちゃけて無害ｗ)

・XNAに関するメモ
ゲームループ中にヒープオブジェクトをnewしないこと
理由はXBox360のGCがマーク・アンド・スウィープ方式であるため。
この方式のGCは一定のメモリ数を消費するごとにGCが発生する。
そのため、ゲームループ中でオブジェクトをnewすると、GCが1フレームあたり1〜数回発生することになり、処理速度の問題が発生する
回避方法はオブジェクトプールを使用するか、structを利用してスタックオブジェクトにするか
unsafeコードのstackallocを利用するといい

・Zオーダー問題
現在、一部半透明モデル/アクセサリーはZオーダーの問題で正しく表示されません
(レア様のお立ち台でフォグが表示されないのを確認しました)

・ライセンスについて
MITライセンスです。
English ver
Copyright (c) 2010 Wilfrem.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

However, MIT License is applied only for source code.
Multimedia files is not provided MIT License
If you use them, please contact creator.

Copyright (c) 2010 ウィルフレム

以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル（以下「ソフトウェア」）の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。
これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。

上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとします。

ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供されます。
ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害についての保証も含みますが、それに限定されるものではありません。 
作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。

なお、このライセンスはソースコードのみに適応されます。
マルチメディアファイルには適応されません。(あにまさ氏より提供して頂いた各種モデルなどが相当します)
もし、マルチメディアファイルを利用したい場合はそのファイルの製作者にお問い合わせください

更新履歴
v1.10a
モデルモーション
-IKのソルブ計算の調整。足回りの動作を改良
-AnimationPlayer設定方法の修正。
-AnimationPlayerクラスをModel-namespaceからMotion-namespaceに移行
-モーションのベイク機能実装。パイプラインベイクとリアルタイムベイクの2種が可能
-モーションの回転の補完を間違えてX軸の補完にしていたのを修正
-モーションのベジェ曲線を用いた補完計算のニュートン法にミスがあったため、安全装置も追加して修正
-ループ再生時のモーションを利用したモデル座標系修正機能追加
-モーションの最大フレーム数を弄れるようにした。
-表情計算の修正。
-GPU表情アニメーション計算ルーチンを追加(CPUが弱い環境(XBox360)等向け)

アクセサリ
-アクセサリのモデル及びアクセサリのWorldマトリックスをいじった際に正しい位置にきていない問題を修正
-VACによるアクセサリの固定に座標変換ミスがあったので修正

ライト、カメラ
-ライティングをMMDに近づけた(スポットライトだけ未実装)
-カメラ、ライトモーションの追加
-カメラにワールド座標系を追加。位置修正を可能に

その他
-処理の高速化(XBoxやWindowsVista-Core2Quad32bit3GBメモリならモデル10体でFPS30-40ぐらい)
-デモにマルチメディアファイル追加
-新たに4つのデモ追加

v1.2a
グラフィック
-トゥーンとエッジを実装
-アンチエイリアスを実装

モデルモーション
-膝IKが90度までしか動かない問題を修正
-IKの動作を改善(IK値2周り)

その他
-アンチエイリアスの追加に伴い、CheckDeviceの引数変更
-マテリアル分割を減らしてGPU命令発行数を削減(高速化)

v1.3a
モデル
-MMDProcessorに通常のModelProcessorにあるパラメータを一部追加
-エッジのアルファ値が0になっていた問題(見た目は変化なし)を修正
-モデルのアルファ値が無効になってた問題を修正
-1マテリアルにテクスチャとスフィアマップが同時指定されている際に読み込めない問題を修正
-.spaスフィアマップに対応していなかった問題を修正
-各モデルの中間ディレクトリ出力先をContent/extから各モデルのフォルダ/extに変更
-中間ディレクトリにおけるスフィアマップの中間ファイル名を修正
-スフィアマップがビットマップにしか対応していなかった問題を修正
-表情無しモデル及びダミーボーンが読み込めなかった問題を修正
-質感を調整して、MMDと同じ質感が出るようにした
-高速化のためにMMDModelとMMDAccessoryをDrawableGameComponentから継承せずにGameComponentから継承するように変更
-高速化のため、MikuMikuDanceXNAをDrawableGameComponentから継承するように変更
-高速化のためにシェーダを修正
-アンビエント色をあわせて1を超えるときに色がおかしくなる問題を修正
-エッジ無しモデルが読み込めない問題を修正

モーション
-一部のモーションのベイクが上手くいかない問題を修正

アクセサリ
-screen.bmp指定でスクリーン表示に対応
-アクセサリのスフィアマップに対応
-アンビエント色をあわせて1を超えるときに色がおかしくなる問題を修正

その他
-モデル、アクセサリの描画設定処理を別関数にして改良。描画設定処理を手動で呼ぶルーチンを作ったため、命令発行数を減らすことが出来るようになった。
-Lat式ミクが読めないバグは上記修正で解決
-カメラ、ライトマネージャのインターフェイスを作成。それに合わせてカメラ、ライト周りを修正
-BoneManagerクラスをList<Bones>から継承しないようにした(高速化のため)
-他、高速化のためにモデルデータ構造を修正
-IKSolverクラスの修正。入力がList<int>からushort[]に変更(高速化のため)
-MMDModelLibrary及びMMDMotionLibraryの座標系名称が変更(左右を逆に名付けていたため。データ値的な変化は無いが、定数名が変化)
-プログラムからボーンを弄るように、MMDModelにイベント追加