物理演算キターーー!

MMDXにBullet物理エンジンの搭載、やっと終わりました!
XBox360に演算入りました〜

ゆるアマクリエイターの日記 Bullet移植完了!!(MMDX v1.50a公開)

わーい!! ありがとうございます。

D

お待たせしました!
これでいろんな物を揺らすことが出来るようになります(何を

ゆるアマクリエイターの日記 Bullet移植完了!!(MMDX v1.50a公開)

わぁい……
とり急ぎ動作確認。

今まで

では読み込みとビルドの時に大量にエラー/ワーニングが出ていたのですがそれが一切出ずに正常終了したので身構えていたのを肩透かし。これは期待できるかも……と。

MikuMikuDanceXNADemo2, MikuMikuDanceXNADemo4, MikuMikuDanceXNADemo5, MikuMikuDanceXNADemo6

今まで初音ミクの表示が止まっていた*1所で

  • MikuMikuDance.XNA.Model.ModelData.QuatTransform:
    • InvalidOperationException はハンドルされませんでした。
      • 一意のスケール(X,Y,Zが同じスケール値)ではありません

という表示が出てデバッグモードに入るようになりました。

呼び出し履歴: MikuMikuDanceXNADemo2

> MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.ModelData.QuatTransform.FromMatrix(Microsoft.Xna.Framework.Matrix matrix = { {M11:NaN (非数値) M12:NaN (非数値) M13:NaN (非数値) M14:NaN (非数値)} {M21:NaN (非数値) M22:NaN (非数値) M23:NaN (非数値) M24:NaN (非数値)} {M31:NaN (非数値) M32:NaN (非数値) M33:NaN (非数値) M34:NaN (非数値)} {M41:NaN (非数値) M42:NaN (非数値) M43:NaN (非数値) M44:NaN (非数値)} }) 行 67 C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDMotionState.Flush(bool reset = false) 行 99 + 0xb7 バイト C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDPhysicsManager.Update() 行 54 + 0x20 バイト C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDModel.Update(Microsoft.Xna.Framework.GameTime gameTime = {Microsoft.Xna.Framework.GameTime}) 行 345 + 0x15 バイト C#
[外部コード]
MikuMikuDanceXNADemo2.exe!MikuMikuDanceXNADemo2.Game1.Update(Microsoft.Xna.Framework.GameTime gameTime = {Microsoft.Xna.Framework.GameTime}) 行 144 + 0xc バイト C#
[外部コード]
MikuMikuDanceXNADemo2.exe!MikuMikuDanceXNADemo2.Program.Main(string[] args = {string[0]}) 行 14 + 0xb バイト C#

呼び出し履歴: MikuMikuDanceXNADemo4

> MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.ModelData.QuatTransform.FromMatrix(Microsoft.Xna.Framework.Matrix matrix = { {M11:NaN (非数値) M12:NaN (非数値) M13:NaN (非数値) M14:NaN (非数値)} {M21:NaN (非数値) M22:NaN (非数値) M23:NaN (非数値) M24:NaN (非数値)} {M31:NaN (非数値) M32:NaN (非数値) M33:NaN (非数値) M34:NaN (非数値)} {M41:NaN (非数値) M42:NaN (非数値) M43:NaN (非数値) M44:NaN (非数値)} }) 行 67 C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDMotionState.Flush(bool reset = false) 行 99 + 0xb7 バイト C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDPhysicsManager.Update() 行 54 + 0x20 バイト C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDModel.Update(Microsoft.Xna.Framework.GameTime gameTime = {Microsoft.Xna.Framework.GameTime}) 行 345 + 0x15 バイト C#
[外部コード]
MikuMikuDanceXNADemo4.exe!MikuMikuDanceXNADemo4.Game1.Update(Microsoft.Xna.Framework.GameTime gameTime = {Microsoft.Xna.Framework.GameTime}) 行 128 + 0xc バイト C#
[外部コード]
MikuMikuDanceXNADemo4.exe!MikuMikuDanceXNADemo4.Program.Main(string[] args = {string[0]}) 行 14 + 0xb バイト C#

呼び出し履歴: MikuMikuDanceXNADemo5

> MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.ModelData.QuatTransform.FromMatrix(Microsoft.Xna.Framework.Matrix matrix = { {M11:NaN (非数値) M12:NaN (非数値) M13:NaN (非数値) M14:NaN (非数値)} {M21:NaN (非数値) M22:NaN (非数値) M23:NaN (非数値) M24:NaN (非数値)} {M31:NaN (非数値) M32:NaN (非数値) M33:NaN (非数値) M34:NaN (非数値)} {M41:NaN (非数値) M42:NaN (非数値) M43:NaN (非数値) M44:NaN (非数値)} }) 行 67 C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDMotionState.Flush(bool reset = false) 行 99 + 0xb7 バイト C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDPhysicsManager.Update() 行 54 + 0x20 バイト C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDModel.Update(Microsoft.Xna.Framework.GameTime gameTime = {Microsoft.Xna.Framework.GameTime}) 行 345 + 0x15 バイト C#
[外部コード]
MikuMikuDanceXNADemo5.exe!MikuMikuDanceXNADemo5.Game1.Update(Microsoft.Xna.Framework.GameTime gameTime = {Microsoft.Xna.Framework.GameTime}) 行 128 + 0xc バイト C#
[外部コード]
MikuMikuDanceXNADemo5.exe!MikuMikuDanceXNADemo5.Program.Main(string[] args = {string[0]}) 行 14 + 0xb バイト C#

呼び出し履歴: MikuMikuDanceXNADemo6

> MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.ModelData.QuatTransform.FromMatrix(Microsoft.Xna.Framework.Matrix matrix = { {M11:NaN (非数値) M12:NaN (非数値) M13:NaN (非数値) M14:NaN (非数値)} {M21:NaN (非数値) M22:NaN (非数値) M23:NaN (非数値) M24:NaN (非数値)} {M31:NaN (非数値) M32:NaN (非数値) M33:NaN (非数値) M34:NaN (非数値)} {M41:NaN (非数値) M42:NaN (非数値) M43:NaN (非数値) M44:NaN (非数値)} }) 行 67 C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDMotionState.Flush(bool reset = false) 行 99 + 0xb7 バイト C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDPhysicsManager.Update() 行 54 + 0x20 バイト C#
MikuMikuDanceXNA.dll!MikuMikuDance.XNA.Model.MMDModel.Update(Microsoft.Xna.Framework.GameTime gameTime = {Microsoft.Xna.Framework.GameTime}) 行 345 + 0x15 バイト C#
[外部コード]
MikuMikuDanceXNADemo6.exe!MikuMikuDanceXNADemo6.Game1.Update(Microsoft.Xna.Framework.GameTime gameTime = {Microsoft.Xna.Framework.GameTime}) 行 139 + 0xc バイト C#
[外部コード]
MikuMikuDanceXNADemo6.exe!MikuMikuDanceXNADemo6.Program.Main(string[] args = {string[0]}) 行 14 + 0xb バイト C#

MikuMikuDanceXNADemo7

モデルの再読込はできるようになりましたが、一部モデルで読み込み不能に。

呼び出し履歴:

> MMDImporter.dll!MikuMikuDance.XNA.Model.ToonTextureManager.Process(Microsoft.Xna.Framework.Content.Pipeline.Graphics.EffectMaterialContent material = {Microsoft.Xna.Framework.Content.Pipeline.Graphics.EffectMaterialContent}, string[] toonTextures = {string[10]}, string mmdPath = "I:\\MMD\\MikuMikuDance\\MikuMikuDance_v706みょん\\UserFile\\Model\\魂魄妖夢 妖々夢版Ver.1.11\\魂魄妖夢 妖々夢版(半霊物理有 鞘有 刀背中).pmd") 行 76 C#
MMDImporter.dll!MikuMikuDance.XNA.Model.MMDMeshBuilder.BuildMesh(MikuMikuDance.XNA.Model.MMDMeshData model = {MikuMikuDance.XNA.Model.MMDMeshData}, string filename = "I:\\MMD\\MikuMikuDance\\MikuMikuDance_v706みょん\\UserFile\\Model\\魂魄妖夢 妖々夢版Ver.1.11\\魂魄妖夢 妖々夢版(半霊物理有 鞘有 刀背中).pmd", Microsoft.Xna.Framework.Content.Pipeline.ContentIdentity Identity = {Microsoft.Xna.Framework.Content.Pipeline.ContentIdentity}, System.Collections.Generic.Dictionary VertToFaceVert = Count = 8480) 行 131 + 0x1d バイト C#
MMDImporter.dll!MikuMikuDance.XNA.Model.MMDBuilder.Build(string filename = "I:\\MMD\\MikuMikuDance\\MikuMikuDance_v706みょん\\UserFile\\Model\\魂魄妖夢 妖々夢版Ver.1.11\\魂魄妖夢 妖々夢版(半霊物理有 鞘有 刀背中).pmd", MikuMikuDance.Model.Ver1.MMDModel1 model = {MikuMikuDance.Model.Ver1.MMDModel1}) 行 92 + 0x11 バイト C#
MMDImporter.dll!MikuMikuDance.XNA.Model.MMDProcessor.Process(MikuMikuDance.XNA.Model.MMDImporterOutput input = {MikuMikuDance.XNA.Model.MMDImporterOutput}, Microsoft.Xna.Framework.Content.Pipeline.ContentProcessorContext context = {Microsoft.Xna.Framework.Content.Pipeline.ContentProcessorContext}) 行 106 + 0x22 バイト C#
[外部コード]
MMDBuilder.dll!MikuMikuDance.XNA.Builder.Build.MMDBuilder.Build() 行 175 + 0xd バイト C#
MikuMikuDanceXNADemo7.exe!MikuMikuDanceXNADemo7.FrmMain.LoadModel(string filename = "I:\\MMD\\MikuMikuDance\\MikuMikuDance_v706みょん\\UserFile\\Model\\魂魄妖夢 妖々夢版Ver.1.11\\魂魄妖夢 妖々夢版(半霊物理有 鞘有 刀背中).pmd") 行 109 + 0x10 バイト C#
MikuMikuDanceXNADemo7.exe!MikuMikuDanceXNADemo7.FrmMain.MILoadModel_Click(object sender = {モデルの読み込み(&O)}, System.EventArgs e = {System.EventArgs}) 行 92 + 0x24 バイト C#
[外部コード]
MikuMikuDanceXNADemo7.exe!MikuMikuDanceXNADemo7.Program.Main() 行 16 + 0x1d バイト C#
[外部コード]

モデルは

作るのに使った

のもの。当然 MikuMikuDance 上では読み込める状態のものですし、同じ Model フォルダに入れた標準付属モデル群は読み込みできています。

あと……

レア様スカート軽すぎ!
あ、いやそれはバグじゃないだろうけれどもそれはともかく*2。物理演算で動いている髪、袖、スカートといった部分に激しく黒い部分が混ざってしまっています。

MikuMikuDanceXNADemo8

正常動作するが、"Time Ruler" が断続的に縦幅変わり、それに従い "Time Ruler Log" が上下にがたがたする。

(ちなみに http://toshibadirect.jp/pc/p/p/PAPW55KLG10W/index.html では FPS:45 くらいのスピード)



以上、何か参考になればよろしいのですが。

*1:そしてプログラムの方は何事も無かったかのように続行していた

*2:いやある意味大問題かも