Re: PMD+VMDのモーションブレンドについ ( No.1 ) |
- 名前:いっち 日時:2012/05/31 19:31
事象の発生するモデルをご提供頂けますか?
|
Re: PMD+VMDのモーションブレンドについ ( No.2 ) |
- 名前:ody 日時:2012/05/31 20:14
//www1.axfc.net/uploader/Sc/so/350622.zip
pass:ody
(wwwを全て半角にしてください)
こちらです。MMDにデフォルトでついていたモデルです。
プログラムのソースファイルも同梱致しました。
モーションファイルの内容は以下のようになります。
分かりやすくするため、表情の変化は極端にしてあります。
MEIKO001.vmd : 歩き(口を大きく開ける)
MEIKO004.vmd : 待機(目を開く→閉じるを繰り返す)
それ以外の000,002,003はモーション未設定のダミーデータです。
(連番が途切れると読み込まれなくなるため)
宜しくお願いします。
|
Re: PMD+VMDのモーションブレンドについ ( No.3 ) |
- 名前:いっち 日時:2012/06/02 13:53
ためしに以下のようなコードで4番のアニメーションを再生してみたのですが、
MV1SetAttachAnimBlendRate でブレンド率を 0.0 に設定していても表情のアニメーションがとまりませんでした。
表情はモーションとは別の要素でアニメーションが行われているのではないでしょうか?
私ではそれ以上のことは良く分かりませんので、他の方の回答をお待ち下さい。
//- 以下、テストコード -//
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
ChangeWindowMode( TRUE );
SetWindowText( "DxLib:" DXLIB_VERSION_STR );
if ( DxLib_Init( ) == -1 ) return -1;
int white = GetColor( 255, 255, 255 );
int mh = MV1LoadModel( "meiko\\MEIKO.pmd" );
MV1SetScale( mh, VGet(50.0f, 50.0f, 50.0f) );
MV1SetPosition( mh, VGet( 320.0f, -300.0f, 600.0f ) );
for( int i = 0; i < MV1GetMaterialNum( mh ); i++ ) {
float dotwidth = MV1GetMaterialOutLineDotWidth( mh, i );
MV1SetMaterialOutLineDotWidth( mh, i, dotwidth/50.0f );
}
int a4i = MV1AttachAnim( mh, 4, -1, FALSE );
float a4tt = MV1GetAttachAnimTotalTime( mh, a4i );
float a4tr = a4tt / (1*60);
float a4pt = 0.0;
MV1SetAttachAnimBlendRate( mh, a4i, 0.0 );
SetDrawScreen( DX_SCREEN_BACK );
while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) {
ClearDrawScreen( );
if ( (a4pt += a4tr) > a4tt ) a4pt -= a4tt;
MV1SetAttachAnimTime( mh, a4i, a4pt );
MV1DrawModel( mh );
DrawFormatString( 0, 0, white, "TEST %f / %f", a4pt, a4tt );
ScreenFlip( );
}
DxLib_End( );
return 0;
}
|
Re: PMD+VMDのモーションブレンドについ ( No.4 ) |
- 名前:管理人 日時:2012/06/03 19:10
アップして頂いたモデルといっちさんのテストコードで現象を確認しました
表情のブレンド率だけアニメーションのブレンド率とは別に管理していたのですが、
それが上手く動作していませんでした
アニメーションのブレンド率と同じ管轄に表情のブレンド率を置くことで正常に
動作するようにしましたので、よろしければこちらの修正版をお試しになってみてください m(_ _;m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
// ビューアー
http://homepage2.nifty.com/natupaji/DxLib/DxLibModelViewerTest.zip
|
Re: PMD+VMDのモーションブレンドについ ( No.5 ) |
- 名前:ody(解決) 日時:2012/06/03 22:18
修正ありがとうございます!
正常に動作することを確認しました。
いっちさん、管理人さん、ありがとうございました。
|
Re: PMD+VMDのモーションブレンドについ ( No.6 ) |
- 名前:たこ 日時:2012/06/04 17:56
横やりで申し訳ないのですが確認させてくれませんか?
この問題は、アニメーションに表情を変化させるモーフアニメを追加するとモーフアニメが正常に動作しない、という事でよろしいのでしょうか。
自分もアニメーションの勉強中でして、もしそうなのであれば自分もDXライブラリを更新しておこうと思うのですが。
|
Re: PMD+VMDのモーションブレンドについ ( No.7 ) |
- 名前:いっち 日時:2012/06/04 21:02
私も2点ほどお尋ねしたいことがあります。
> 表情のブレンド率だけアニメーションのブレンド率とは別に管理していたのですが、
・どのような理由で表情とそれ以外のブレンド率を別管理にしていたのでしょうか?
・表情とそれ以外のアニメーションをどのような条件で区別していたのでしょうか?
(もしかすると、モデリングやMMD形式の知識としては常識だったりするのでしょうか?)
たこさん>
ブレンドがうまくいかないというだけで、ブレンドさえしなければアニメーションは動作すると思います。
|
Re: PMD+VMDのモーションブレンドについ ( No.8 ) |
- 名前:管理人 日時:2012/06/10 18:03
> たこさん
全てのモーションにモーフアニメのキーが付いている場合でモーションのブレンドを行わない場合は
以前のバージョンでも問題なく動作すると思います
ただ、モーションのブレンドを行ったり、モーションのブレンドを行わなくてもモーフアニメのキーが
付いているモーションの後にモーフアニメのキーが付いていないモーションを再生すると
一つ前のモーションについていたモーフ( 表情 )のままになるなどの問題が発生すると思います
> いっちさん
> ・どのような理由で表情とそれ以外のブレンド率を別管理にしていたのでしょうか?
実装当時のことをあまり覚えていませんが、恐らく突貫工事だったのだと思います
( 今までの実装の方が今回対応した管理方法よりも簡素なものだったので )
> ・表情とそれ以外のアニメーションをどのような条件で区別していたのでしょうか?
> (もしかすると、モデリングやMMD形式の知識としては常識だったりするのでしょうか?)
VMDファイルの構成的に表情アニメーションデータとボーンアニメーションデータは
明確に分けて格納されているので、そこで判断します
|
Re: PMD+VMDのモーションブレンドについ ( No.9 ) |
- 名前:いっち 日時:2012/06/11 19:59
管理人さん>
回答ありがとうございます。
> VMDファイルの構成的に表情アニメーションデータとボーンアニメーションデータは
> 明確に分けて格納されているので、そこで判断します
なるほど。明確に分ける必要性がよくわからない(管理が楽になる?)ですが、そういうものとして納得しておきます。
|
Re: PMD+VMDのモーションブレンドについ ( No.10 ) |
- 名前:管理人 日時:2012/06/18 00:17
作者の樋口Mさんにお訊ねしないと分からないことですが、
モーフ以外のアニメーションには座標・回転の情報が入っていて、
モーフのアニメーションにはブレンド率だけが入っています
DXライブラリのようにタイプを分けて同じ管轄で扱うと
読み込むときにタイプを見て読み込むデータ構造を変化させる必要がでてくるので、
管理が楽だから( 処理が簡略化できるから )、というのは当たっているかもしれません
|