ページ 11

MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 07:52
by Priest
キャラクタを、現在の姿勢をそのままに首だけを傾けるという処理をしたいです。
(例えば、体は進行方向を向いて、顔は敵の方を向く。等)

その手法として以下の2つを考えました:
1:"右に90度向いているアニメーションデータ"と"左に90度向いているアニメーションデータ"の2つを用意し、
 そのブレンド率を操作することで、首の傾きを表現する。
2:ある一つのアニメーションに対して、首を実際に傾けたものを別に何十パターンのアニメーションデータを用意して切り替える。
 (一つのアニメーションに対して、首の傾きが、5,10,15,……,170,175,180度のものをすべて用意する。)

この2つの中で実装に現実的な1を選択し、検証してみましたが、結果は添付した動画データのようになってしまいました。
horror.zip
(2.02 MiB) ダウンロード数: 197 回
※なお、この動画のダウンロードはこの問題の検証のためのみに用いられるものとし、
動画を何かしらの素材として、使用、公開などを行うことを禁止します。


私が作りたいのはホラーゲームではないので、もし有効な手段があれば教えていただきたいと思っています。
現在、手法2については試していません。(あまりにもこちらの負荷が大きすぎるので躊躇っています。)

それではお手数ですがよろしくお願いします。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 11:33
by softya(ソフト屋)
検証用のモデルとソースコードが無いと返答が難しいかと思います。
あと、DXLIBでバグの多い方面ですのでバージョンを最新にしてみて下さい。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 12:04
by Priest
softyaさん

返信ありがとうございます。

ライブラリは最新の状態となっています。(Ver3.10a)

やはりこれだけの情報では難しいですよね。
しかし動画で使用したモデルに関しては、権利関係の都合上用意が難しいので、
一度トピックは閉じ、個人で検証を重ねていこうかと思います。

何か分かったらこちらに投稿するように致します。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 12:06
by softya(ソフト屋)
Priest さんが書きました:やはりこれだけの情報では難しいですよね。
しかし動画で使用したモデルに関しては、権利関係の都合上用意が難しいので、
一度トピックは閉じ、個人で検証を重ねていこうかと思います。
ですよね。
なので、検証用のモデルと書いたのですが、それも難しいですか?
問題が再現さえすれば、別のモデルで構わないと思うんですが。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 12:12
by Priest
では、少しお時間はかかりますが検証用モデルを探してきます。
それと同時に添付するソースコードは、動画のような動作を再現するものとなります。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 12:36
by Dixq (管理人)
MMD用に配布されているモデルは比較的緩い利用条件になっているモデルがありますよ。
例えばLat式ミクなんかだと

=== れあどめ.txt 引用 ===
::使用条件::
モデルデータは、版権元のキャラクター利用のガイドラインと同様になります。
その範囲内であればデータの改変・流用を含む利用・再配布等オールOKです。
======================

となっています。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 13:59
by Priest
検証用モデルの調達とソースコードできました。
切り張りしていたらどこかでミスしてエラー吐きまくってました。
遅くなってすみません。

添付ファイルからご覧ください。

とりあえず、再配布可の所から拝借させていただきました。

【追記】
Dixqさん、情報ありがとうございます!
探せばいろいろあるものですね。
私はこのキャラクタが好きなのであえてこれを選びました。(は、嘘です

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 16:09
by softya(ソフト屋)
アニメーション・データで首から上に回転以外のパラメータが見受けられるのですが、右と左に首を回すだけのデータを合成しても同じ事になりますか?

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 16:27
by Priest
顔以外をデフォルト位置にして、顔を90度と-90度に傾けたものを用意しアニメーションさせると、右向きと左向きが交互に出ました。

そして、それぞれを45度,-45度にしてみたところ!
首が回りました!

【追記】
しかし、元のデータでうまくいかなかった原因はなんでしょうか?
回転以外のパラメータが変に影響してしまうのでしょうか。
そういった意味では、この実装は厳しそうですか?

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 16:40
by softya(ソフト屋)
回転以外のマトリクスデータが打ち消し合って変な変形を起こしていた可能性があります。
首を回すだけなら、ボーンの回転だけをいじるほうが良いでしょう。
こうしてはどうでしょう?
1.正面向きの上下動のモーション
2.右向きだけのモーション
3.左向きだけのモーション

1と2あるいは1と3をブレンドする。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 16:49
by Priest
返答ありがとうございます。

こちらでさらに検証したところ、
上下動のモーションは歪みに影響はないことが分かりました。

首の回転について、例えば、
x軸回転: 4.5度
y軸回転: 80度
z軸回転: 7.8度

x軸回転: 5.3度
y軸回転: -80度
z軸回転: 6.2度

のように、y軸回転以外の角度が微妙に違うと変形を起こしてしまうようです。
これを、
x軸回転: 0度
y軸回転: 80度
z軸回転: 0度

x軸回転: 0度
y軸回転: -80度
z軸回転: 0度
とすると、上下移動があってもうまく回ります。

つまり、複数軸の回転が重なるとおかしくなるような気がします。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 16:53
by lriki
DXライブラリってモーション適用後のフレームの行列を操作することはできませんでしたっけ?
首をターゲットに向ける回転行列を作って直接上書きした方が確実だと思うのですが・・・。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 17:11
by softya(ソフト屋)
そうですね。
掛け合わせる順番の問題かもしれませんね。

アニメーションを適用したモデルに、首のフレームからMV1GetFrameLocalWorldMatrixでマトリクス得て、これを回転、再びMV1SetFrameUserLocalMatrixでセットするで行けるかもしれません。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 17:21
by softya(ソフト屋)
softya(ソフト屋) さんが書きました:回転以外のマトリクスデータが打ち消し合って変な変形を起こしていた可能性があります。
首を回すだけなら、ボーンの回転だけをいじるほうが良いでしょう。
こうしてはどうでしょう?
1.正面向きの上下動のモーション
2.右向きだけのモーション
3.左向きだけのモーション

1と2あるいは1と3をブレンドする。
そういえば私の、この方法はどうだったんでしょうか?
2と3さえブレンドしなければ大丈夫だと思ったのですが。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 17:45
by Priest
梨樹さん

ありがとうございます!
実は行列を使った回転、移動、拡大縮小をやったことがないので、少し手間取りそうです。

softyaさん

その件については、まだ検証できていませんが、後ほど検証させていただきます。
結果は失敗した場合のみ動画でアップします。

>アニメーションを適用したモデルに、首のフレームからMV1GetFrameLocalWorldMatrixでマトリクス得て、これを回転、再びMV1SetFrameUserLocalMatrixでセットするで行けるかもしれません。
上記の通り行列になじみはありませんが、余力があれば検証してみます!

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 19:00
by Priest
softyaさん

検証の結果、12,13ブレンドでうまくいくことが確認できました!
長時間の検証にお付き合いいただき本当にありがとうございました。

次は行列ですか。 行列かぁ…。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 19:15
by Priest
すごい細かいことですが…、
先ほどの12,13ブレンドだと、上下動モーションの比率の差が出る影響で、上下動の幅にぶれが生じて変に見えてしまうかもしれません。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 19:24
by softya(ソフト屋)
Priest さんが書きました:すごい細かいことですが…、
先ほどの12,13ブレンドだと、上下動モーションの比率の差が出る影響で、上下動の幅にぶれが生じて変に見えてしまうかもしれません。
ブレンドの特性上仕方ないかもしれませんが、確かにそっちは問題かもしれませんね。
2と3にも上下動を入れれば解決する気もしますが冗長でメンテナンス性の悪い作業ですので、オススメ出来ません。

隠しでMV1SetAttachAnimBlendRateToFrameってのがあるのを発見。
「MV1SetAttachAnimBlendRateToFrame」
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=1586
これを首のフレームにだけ適用すれば解決かもしれません。

Re: MMDを用いたアニメーションにおいて姿勢を変えずに首だけを傾ける手法について(DXライブラリ)

Posted: 2013年2月03日(日) 19:29
by Priest
>冗長でメンテナンス性の悪い
そうですよね。。。

URLについてはあす以降にじっくりと拝見しようと思います。
見つけていただいてありがとうございます!

そういうの、リファレンスにどんどん乗せて欲しいところですが…w