トップページ > 記事閲覧
MMDモデルの足が動かない
名前:やきりんご 日時: 2022/08/09 22:23

初めまして。お世話になります。 MMDモデル(.pmx)にモーション(.vmd)を付けて動かしたいのですが、足(下半身?)だけが全然動かないという状況に陥っています。 腕と足を外旋するという簡単なモーションでも試しましたが、やはり足だけが動きませんでした。 下半身以外は正常のように見えます。 また、MMDで表示したときのモーションは全身が問題なく動いています。 モデル自体の問題なのかモーションの問題なのか、初心者の私にはお手上げ状態です。 この現象の解決方法などがあればご教示いただけると幸いです。 【使用したMMDモデル】 Sour式初音ミクVer1.02のBlack.pmx ダウンロードリンク:httpエス://bowlroll.net/file/146103 【コード】 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int ModelHandle, AttachIndex, PlayAnim; float TotalTime, PlayTime; // DXライブラリの初期化 if (DxLib_Init() < 0) { // エラーが発生したら直ちに終了 return -1; } //物理演算オフ MV1SetLoadModelUsePhysicsMode(DX_LOADMODEL_PHYSICS_DISABLE); // 3Dモデルの読み込み ModelHandle = MV1LoadModel("3D/Black.pmx"); MV1SetScale(ModelHandle, VGet(20.0f, 20.0f, 20.0f)); // 描画先を裏画面に変更 SetDrawScreen(DX_SCREEN_BACK); // 画面に映る位置に3Dモデルを移動 MV1SetPosition(ModelHandle, VGet(320.0f, -300.0f, 600.0f)); //マテリアルの数を取得 int MaterialNum = MV1GetMaterialNum(ModelHandle); //輪郭線設定 for (int i = 0; i < MaterialNum; i++) { FLOAT DotWidth; DotWidth = MV1GetMaterialOutLineDotWidth(ModelHandle, i); MV1SetMaterialOutLineDotWidth(ModelHandle, i, 0.01f); } // 3Dモデルの0番目のアニメーションをアタッチする AttachIndex = MV1AttachAnim(ModelHandle, 0, -1, FALSE); // アタッチしたアニメーションの総再生時間を取得する TotalTime = MV1GetAttachAnimTotalTime(ModelHandle, AttachIndex); // 再生時間の初期化 PlayTime = 0.0f; // 再生しているアニメーションを0番にする PlayAnim = 0; // アニメーション0の再生が終わるか、何かキーが押されるかウインドウが閉じられるまでループ while (ProcessMessage() == 0 && CheckHitKeyAll() == 0) { // 画面をクリア ClearDrawScreen(); // 再生時間を進める PlayTime += 1.0f; // 再生時間がアニメーションの総再生時間に達したら次のアニメーションにする if (PlayTime >= TotalTime) { // 再生しているアニメーションを、今までが0番だったら1番に、1番だったら0番にする if (PlayAnim == 0) { PlayAnim = 1; } else { PlayAnim = 0; } // 今までアタッチしていたアニメーションのデタッチ MV1DetachAnim(ModelHandle, AttachIndex); // 3Dモデルの PlayAnim 番目のアニメーションをアタッチする AttachIndex = MV1AttachAnim(ModelHandle, PlayAnim, -1, FALSE); // アタッチしたアニメーションの総再生時間を取得する TotalTime = MV1GetAttachAnimTotalTime(ModelHandle, AttachIndex); // 再生時間の初期化 PlayTime = 0.0f; } // 再生時間をセットする MV1SetAttachAnimTime(ModelHandle, AttachIndex, PlayTime); // 3Dモデルの描画 MV1DrawModel(ModelHandle); // 裏画面の内容を表画面に反映 ScreenFlip(); WaitTimer(50); } // モデルハンドルの削除 MV1DeleteModel(ModelHandle); // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }
メンテ

Page: 1 |

Re: MMDモデルの足が動かない ( No.1 )
名前:管理人 日時:2022/08/10 02:25

初めまして、DXライブラリの管理人です MikuMikuDance のサンプルデータである『サンプル(きしめん).pmm』の初音ミクの モーション部分のみを vmdファイルで保存してご紹介のMMDモデル( Black.pmx )に適用してみましたが、 問題なく足も動きました( 載せていただいたコードでも正常に再生されました ) DXライブラリは MikuMikuDance の全機能に対応できていませんので、やきりんごさんが 作成された足のモーションがDXライブラリが対応していない付け方となっているのかもしれません お手数で申し訳ありませんが、よろしければやきりんごさんの足のモーションの付け方と 『サンプル(きしめん).pmm』の初音ミクの足のモーションの付け方で違いがないか確認してみてください m(_ _)m あと、足のモーションが再生されない vmdファイルを頂ければ私の方でも再生されない原因を 調べてみたいと思いますので、もし不都合がなければこちらのメールアドレス BQE00322(あっとまーく)nifty.com ( (あっとまーく)は@に置き換えてください ) に足のモーションが再生されない vmdファイルをzip圧縮して送ってください m(_ _)m
メンテ
Re: MMDモデルの足が動かない ( No.2 )
名前:やきりんご 日時:2022/08/10 07:55

管理者様 ご対応ありがとうございます。 足の再生に異常がみられるvmdファイルを2点送付いたしました。 よろしくお願いします。
メンテ
Re: MMDモデルの足が動かない ( No.3 )
名前:管理人 日時:2022/08/11 06:33

メールありがとうございます、送っていただいたvmdファイルを拝見したところ、原因が分かりました すみません、やきりんごさんのvmdファイルでは右足を上げる動作に 『右足親IK』や『右足IK』などのIKボーンではなく 『右足D』等のボーンを操作することで実現していると思うのですが、 DXライブラリではIKが設定されているボーンについては元のボーンの角度等は無視され、 完全にIKのボーンに追従するようになっています なので、申し訳ありませんが『右足D』などのボーンを操作して足の角度を変更する代わりに 『右足親IK』などのボーンを操作して足の角度を変更するようにしてください m(_ _;m やきりんごさんの vmd のスクリーンショット、矢印が示すIKボーンは初期状態のままです https://dxlib.xsrv.jp/temp/BlackMikuShot00.png IKボーンを動かして右足を上げた状態です、IKボーンも一緒に移動しています https://dxlib.xsrv.jp/temp/BlackMikuShot01.png IKボーンを動かした場合はDXライブラリでも足が動きます https://dxlib.xsrv.jp/temp/BlackMikuShot02.png
メンテ
Re: MMDモデルの足が動かない ( No.4 )
名前:やきりんご 日時:2022/08/11 09:09

管理者様 お忙しい中、本当にありがとうございます。 IKボーンを変更するようにしたら、きちんと動いてくれました! 行き詰っていたので大変感謝ですm(__)m
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存