トップページ > 過去ログ > 記事閲覧
モーションブレンド
名前:maruo 日時: 2010/01/21 17:41

走るだけのモーションから、走りつつ任意のタイミングで肩から手までを動かすような場合 フレームやメッシュ単位でブレンドできるような関数はありますでしょうか? あと、MV1DrawFrameのサンプルをコピペで何も表示されなませんでした。 2番目のフレームを1番目にすると、 MV1DrawModelと同じように全体が表示されました。 DxLibModelViewerでDxChara.x確認したところ フレームメッシュ一覧があるのは1:Mesh0のみで、 手元にあるモデルデータは全て同じようになりました。 DxLib側も同じように処理されてるのかな? 見当違いなことを言ってたらすいません。

Page: 1 |

Re: モーションブレンド ( No.1 )
名前:maruo 日時:2010/01/23 10:02

>フレームやメッシュ単位でブレンドできるような関数はありますでしょうか? すいません、DxLib.hを見ればよかったですね。 確認しましたところ、それっぽい関数はなかったと思いますので よろしければ、フレーム、メッシュ単位でのアニメーション関数追加要望という形でお願いしますm(_ _)m
Re: モーションブレンド ( No.2 )
名前:管理人 日時:2010/01/28 01:55

フレーム単位でブレンド率を変更するという発想はありませんでした 実装してみたいと思います ただ、実装のご要望が別件でもありますので、ちょっとお時間を頂くことになるかもしれません・・・ > フレームメッシュ一覧があるのは1:Mesh0のみで、 > 手元にあるモデルデータは全て同じようになりました。 恐らくお手元のモデルデータは体全体のポリゴンの集合( メッシュ )は一つで、 各部分をフレーム( ボーン )で変形させるようなモデルなのだと思います 人型モデルでは一般的な形態で、ワンスキンモデルやワンスキンメッシュと言います
Re: モーションブレンド ( No.3 )
名前:maruo 日時:2010/01/31 07:36

見当違いなことをいっていたようで、すいません。 なるほど、そういうことだったのですね。 ということは、やってみたかったことがボーン単位でアニメーションになるのかな? ttp://udn.epicgames.com/Three/AnimationNodesJP.html ここのAnimNodeBlendPerBone項目が近いような気がしないでもないです。 ↓色々ググった先の引用なのですが -------------------------------------------------------------------------------------------------------- > ボーンは行列そのものですが > ボーン(行列)+その他のデータ(ボーンの名前、親や兄第へのポインタなど)を > ひとまとめにしてフレームと呼びます。 > ワンスキンモデルの場合親子付けされたフレーム(ボーンを表す)と一つのメッシュからできています。 -------------------------------------------------------------------------------------------------------- ボーンは行列そのもので、実際はフレームだけど巷ではボーンと称されていて(暗にフレーム指している?) フレーム≒ボーンという解釈でよろしいのでしょうか? 何かもう、色々無知ですいません。 > フレーム単位でブレンド率を変更するという発想はありませんでした > 実装してみたいと思います > ただ、実装のご要望が別件でもありますので、ちょっとお時間を頂くことになるかもしれません・・・ 実装は余裕が有るときにお願いしますm(_ _)m
Re: モーションブレンド ( No.4 )
名前:管理人 日時:2010/01/31 22:43

> ということは、やってみたかったことがボーン単位でアニメーションになるのかな? 恐らくそうだと思います > ボーンは行列そのもので、実際はフレームだけど巷ではボーンと称されていて(暗にフレーム指している?) > フレーム≒ボーンという解釈でよろしいのでしょうか? 問題ないと思います フレームはググられた先の引用がかなり的確な説明です( ボーン( 行列 )+メッシュ( ポリゴン集合+マテリアル等 ) ) メッシュが無いフレームはボーンだけになるので、その場合はフレーム=ボーンですが、 メッシュも含まれる場合もありますので、その場合はフレーム≒ボーンになります
Re: モーションブレンド ( No.5 )
名前:maruo 日時:2010/02/03 20:01

質問に答えていただき、理解が深まった気がします。 ありがとうございました!
Re: モーションブレンド ( No.6 )
名前:管理人 日時:2010/02/07 23:50

変更点が少なく済んだのでフレーム単位のブレンド率の変更の機能を実装してみました http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) 追加した関数は以下の関数です // アタッチしているアニメーションのブレンド率を設定する( フレーム単位 ) int MV1SetAttachAnimBlendRateToFrame( int MHandle, int AttachIndex, int FrameIndex, float Rate, int SetChild ) ; int MHandle : モデルハンドル int AttachIndex : モーションのアタッチ番号 int FrameIndex : ブレンド率を変更するフレーム番号 float Rate : ブレンド率 int SetChild : 指定のフレームの子フレームにも同じ値を設定するかどうかのフラグ( TRUE:設定する FALSE:設定しない ) MV1SetAttachAnimBlendRate 関数のサンプルプログラムは立っているモーションと右腕を前に 出す体勢のモーションを全体的にブレンドするものでしたが、それをちょっと弄って右腕だけ ブレンドするようにすると以下のようになります #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle, AttachIndex1, AttachIndex2 ; float Rate ; ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 画面が切り替わるのをちょっと待つ WaitTimer( 1000 ) ; // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ; // 3Dモデルの立っているアニメーション( 4番目のアニメーション )をアタッチする AttachIndex1 = MV1AttachAnim( ModelHandle, 4, -1, FALSE ) ; // 3Dモデルの手を前に出しているアニメーション( 5番目のアニメーション )をアタッチする AttachIndex2 = MV1AttachAnim( ModelHandle, 5, -1, FALSE ) ; // 立っているアニメーションのブレンド率をセット MV1SetAttachAnimBlendRate( ModelHandle, AttachIndex1, 1.0f ) ; // 手を前に出しているアニメーションのブレンド率をセット MV1SetAttachAnimBlendRate( ModelHandle, AttachIndex2, 0.0f ) ; // 描画先を裏画面に変更 SetDrawScreen( DX_SCREEN_BACK ) ; // 4番目のアニメーションから5番目のアニメーションに徐々に移行する for( Rate = 0.0f ; Rate < 1.0f ; Rate += 0.01f ) { // 画面をクリア ClearDrawScreen() ; // 立っているアニメーションのブレンド率をセット MV1SetAttachAnimBlendRateToFrame( ModelHandle, AttachIndex1, 22, 1.0f - Rate, TRUE ) ; // 手を前に出しているアニメーションのブレンド率をセット MV1SetAttachAnimBlendRateToFrame( ModelHandle, AttachIndex2, 22, Rate, TRUE ) ; // モデルの描画 MV1DrawModel( ModelHandle ) ; // 裏画面の内容を表画面に反映する ScreenFlip() ; } // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } よろしければお使い下さい
Re: モーションブレンド ( No.7 )
名前:maruo 日時:2010/02/09 21:45

お疲れ様ですm(_ _)m まだ試してみただけなのですが 思っていた通りの動作が出来そうです。 実装ありがとうございました!

Page: 1 |