Re: VMD使用時のカメラの挙動 ( No.1 ) |
- 名前:みょも 日時:2012/11/17 09:17
高速で上下が逆になったり、距離が変化してしまう現象はいまだ解決していませんが、
2例目に別の問題として書いた2件は解決しました。
『足下アップが映らない』(あさっての方向を映す)現象は、
注視点とマイナス距離のフレームでは、注視点をいわば「振り返る」形になりますが、
MMDの場合は振り返らないような処理になっていたようです。
これは以下のように注視点をずらす形で解決しました。(C#)
if (Length >= 0) {
var vdiff = DX.VSub(CamLoc, Location);
Location = DX.VAdd(Location, vdiff);
Location = DX.VAdd(Location, vdiff);
}
『カメラのz傾斜が逆』な件は
単純にz回転の符号を逆にして解決しました。
しかし一番派手な方の問題は、対処が見当もつきません(´・ω・`)
ジンバルロックかと思い、クォータニオンを導入したりもしてみたものの
やはり違うのか、使い方が理解できていないのか動作は変わらず・・・。
表示が狂うフレームでも MV1GetAnimKeyDataToLinearFromTime で読み込まれている各データは正常なので、
それ以後の処理の問題なのは間違いなさそうなんですが・・・
|
Re: VMD使用時のカメラの挙動 ( No.2 ) |
- 名前:みょも 日時:2012/11/18 06:56
すいません、前言撤回です。
MV1GetAnimKeyDataToLinearFromTime は問題ないと書きましたが、
まさにそれが原因だったようです。
ViewAngle = MV1GetAnimKeyDataToLinearFromTime( CameraHandle, 3, Time ) ;
これで読み込まれる視野角が、特定の条件で誤っているようです。
具体的には、キーフレーム間で視野角が減少していくと誤った視野角が返るようです。
視野角が増加していく場合には問題は発生しません。
|
Re: VMD使用時のカメラの挙動 ( No.3 ) |
- 名前:みょも 日時:2012/11/18 08:23
カメラがマイナス距離時の動作を修正したコードは距離0ぴったりだと
上手く動かなかったようなので、一応直したものを書いておきます。
if (Length >= 0) {
var CamFixDir = DX.VTransform(DX.VGet(0.0f, 0.0f, 1.0f), MixRotMat);
Location = DX.VAdd(CamLoc, CamFixDir);
}
|
Re: VMD使用時のカメラの挙動 ( No.4 ) |
- 名前:管理人 日時:2012/11/18 16:00
色々調べて頂いてしまってすみません、MV1GetAnimKeyDataToLinearFromTime が返す値自体が
不正なものになってしまう原因はわかりました( 符号無し整数のパラメータ同士の差分を計算する
処理の結果がマイナスになった場合に不正な値になってしまっていました )
修正版をアップしましたので、よろしければお試しください m(_ _;m
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
あと、みょもさんにご指摘いただいたサンプルプログラムの修正箇所は「カメラのvmdについて」スレッドの
該当書き込みに反映させて頂きました m(・・;m
|
Re: VMD使用時のカメラの挙動 ( No.5 ) |
- 名前:みょも 日時:2012/11/19 02:19
修正ありがとうございました。
配布されるモーションでは存外発生しやすかった問題のようで、それらも無事に動作しました。
そしてちょっと別件なのですが・・・・
ttp://bit.ly/T4JF7N
こちらの動画で配布されている、ステージとモーションを試していたところ、
994のキーフレーム〜1033キーフレーム間(動画で0:33〜0:34)において
注視点の座標がオリジナルと大きくずれ、カメラがカウンターに食い込んでしまいます。
994と1034のキーフレーム自体では注視点座標はオリジナルとほぼ一致したので、
恐らく補間曲線にズレがあるのだと思います・・・(線形補間に書き換えたら動きが変わったので、多分対応してますよね?)
が、2つのキーフレームのどちらにも X座標に0.7ほどの差があるのがちょっと気にはなります。(^^;
どこまで再現性を求めてしまっていいのか、心苦しいところなのですがご報告させていただきます。
それから、同モーションの1119〜1126フレーム(動画で0:37〜0:40)のゼロ距離カメラでは、
カメラのマイナス距離問題が再発していました。
小数点誤差か何かで判定が微妙なのか、修正コードの if (Lemgth >= 0) の条件文を外してしまえば解決します。
特に常時修正コードを適用しても問題ないようですし。
|
Re: VMD使用時のカメラの挙動 ( No.6 ) |
- 名前:管理人 日時:2012/11/20 01:59
了解しました、確認と対処に少し時間が掛かると思いますので、
恐らく今週末の対応になると思います
( ただ、この返信をしたことで週末の自分は対応したと思い込んでしまう可能性がありますので、
もし週末にこちらのスレッドへの私の書き込みが無かったら突っ込んでください m(_ _;m )
|
Re: VMD使用時のカメラの挙動 ( No.7 ) |
- 名前:管理人 日時:2012/11/23 22:50
調べてみました
994〜1034間のパラメータに現れる誤差は使用する補間用パラメータが間違っていたのが原因でした
A〜B用の補間用パラメータを B〜Cで使ってしまっていた感じです、というか、カメラモーションに
限らずキャラクターモデルのモーションでも同じだったので、今回でそれが修正できたと思います
こちらに修正版をアップしましたので、よろしければお試しになってみてください m(_ _;m
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
> が、2つのキーフレームのどちらにも X座標に0.7ほどの差があるのがちょっと気にはなります。(^^;
0.7って、結構大きな誤差ですよね・・・?
それほど大きな誤差は今回の修正前でもなかったと思うのですが・・・
因みに修正後のDXライブラリ側で取得できるX座標とMikuMikuDance上で確認できるX座標は以下の通りです
994フレーム DXライブラリ 11.35650f MikuMikuDance 11.356f
1133フレーム DXライブラリ 9.1666603f MikuMikuDance 9.167f
それとも私が確認しているパラメータが違うのでしょうか・・・
|
Re: VMD使用時のカメラの挙動 ( No.8 ) |
- 名前:みょも 日時:2012/11/24 22:42
対応ありがとうございました。正常な挙動を確認しました。
>それほど大きな誤差は今回の修正前でもなかったと思うのですが・・・
調べ直してみたところ、カメラのゼロ距離問題の修正で注視点を微調整した後
座標を確認するという大ポカをしでかしてました。
お騒がせしまして申し訳ありません(__;
|
Re: VMD使用時のカメラの挙動 ( No.9 ) |
- 名前:管理人 日時:2012/11/25 14:30
了解です、問題ではなくてよかったです
あ、申し上げ忘れていましたがカメラの距離問題の修正を再度件のスレッドの書き込みにしました
再度のご情報ありがとうございます
思えばカメラの方向はCamDirとして別途計算しているわけですから、Lengthは「注視点からどれだけ離れているか」ではなく・・・
というか「注視点」ではなく「カメラの基準座標」として考えて、Lengthは「基準座標からカメラの向きの反対方向にどれだけ離れるか」
というパラメータとして考えて、「注視点」はカメラの向きと位置を使って別途計算すれば良かったんですね・・・
|
Re: VMD使用時のカメラの挙動 ( No.10 ) |
- 名前:みょも(解決済み) 日時:2012/11/26 02:25
普通に考えると中心=注視点となりますよね(^^;
意外に0距離やマイナス距離が含まれているデータが多いのをみると、
注視点としないほうがデータを作る側としては勝手はいいのかもしれないですね。
|