スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スキンメッシュアニメーションの解説その3

【リンク】 ◆解説系TOP◆

スキンメッシュアニメーションの解説 第3弾です。

今までの解説はこちら↓
----------------------------------------------
スキンメッシュアニメーションの解説1
スキンメッシュアニメーションの解説2
----------------------------------------------

そして恒例(?)の注意書き。
下記の様に対応します。
-----------------------------
ボーンオフセット行列 = BOf行列
元にもどす行列 = 逆BOf行列
-----------------------------

とりあえず、今まで何をやってきたかと言うと、
・ボーン基準の変換
・親子関係になっているボーン基準の変換

この2つです。

また、ボーンによって動かされる頂点の変換は
親子関係になっていないボーンの場合一番根元の親のボーンの場合
頂点×BOf行列×座標変換行列×逆BOf行列

そして子ボーンの場合は、

頂点×BOf行列×座標変換行列×逆BOf行列×座標変換行列×逆BOf行列
(黒字は子ボーン、 赤字は親ボーンの行列。
            親が居る限りひたすら親ボーンの座標変換行列と逆BOf行列をかける。 )


このようにして、変換後の頂点の座標が求められると説明しました。
で、どちらもひとつの頂点につき、ひとつのボーンが動かすという例だったのですが、

今回は、
ひとつの頂点が複数のボーンから影響を受ける場合の解説をします。


×××××××××××××××××××
STEP4 複数のボーンと影響度
×××××××××××××××××××

複数のボーンから影響を受ける場合は、 影響度というものを設定します。
影響度は、0~1の間で設定し、
また、ひとつの頂点に対する複数のボーンの影響度の合計は通常にならないといけません。

例えば、ボーンAとボーンBに影響を受ける頂点がある場合は
┏━━━┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┓
┃ボーンA┃1.0┃0.9┃0.8┃0.7┃0.6┃0.5┃0.4┃0.3┃0.2┃0.1┃0.0┃
┃ボーンB┃0.0┃0.1┃0.2┃0.3┃0.4┃0.5┃0.6┃0.7┃0.8┃0.9┃1.0┃
┗━━━┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┛
影響度の設定の仕方は上記のようになります。
0.8740950.125905みたいに、もっと細かくする事も出来ます。)



そして、影響度を考えた変換後の頂点の求め方は下記の様になります。
-------------------------------------------------------------------------
親子関係の無いボーン、または、大元の親ボーンの場合↓
頂点×BOf行列×座標変換行列×逆BOf行列×影響度
子ボーンの場合↓
頂点×BOf行列×座標変換行列×逆BOf行列×座標変換行列×逆BOf行列×影響度
-------------------------------------------------------------------------

要するに、最後に影響度をかけるだけです。
そして出てきた座標を全て足せば 影響度を加味した座標が求められます。

百聞は一見にしかず、とも言うので実際にやってみましょう!


まず、 BoneABoneB頂点(2 3 0)があるとします。
【参考画像】
例題

で、BoneA・Bが共に頂点への影響度が0.5 、そしてBoneBでY軸方向に2倍する場合は、
下記の様に求められます。


頂点×BOf行列×Y軸に2倍する行列×逆BOf行列×座標変換行列×逆BOf行列×0.5
                
頂点×BOf行列×座標変換行列×逆BOf行列×0.5
                ||
 影響度を考慮した変換後の頂点座標

(それぞれ青字がBoneA赤字がBoneBの行列などになります)


上記の2つの式の途中計算は下記の様になります。

【参考画像】
例題3
(上の式の途中計算)

例題2
(下の式の途中計算)

それぞれ、1 3 0 0.5) (1 1.5 0 0.5)という結果が出たと思うので、これを足します。
1 3 0 0.5) + (1 1.5 0 0.5) =(2 4.5 0 1)
(重要なのはXYZです。 Wはそのまま無視して下さい。)

はい、これこそが 影響度を含めた変換後の座標です。
図にするとこうなります。↓

【参考画像】
XY座標4

影響度100%(1.0)の場合は、
頂点(2 3 0)をY軸方向に2倍すると(2 6 0)になります。
(Y軸方向に+3)
つまり、上手い具合に50%(0.5)でY軸方向に拡大されている事がわかります。
(Y軸方向に+1.5)

また、 分配法則を使って式を変形する事も出来ます。

----【分配法則】------------------
A×B + A×C
A×(B + C)  ←この式に変形可能

-------------------------------

先ほどは
頂点×BOf行列など・・・ + 頂点×BOf行列など・・・ = 変換結果
でしたが、
頂点× (BOf行列など・・・ + BOf行列など・・・) = 変換結果
↑このように変形出来ます。

影響を与えるボーン全ての行列を全て計算して足したものを、
                      まとめて頂点にかけるという形です。)

これも、実際に答えが出るかを求めてみましょう。
【1】BoneBの行列の計算

分配法則による計算2

【2】BoneAの行列の計算

分配法則による計算

【3】それぞれの計算結果を足して、頂点にかける。

分配法則による計算3


はい、同じ結果になりました。
見事です。

で、実際に計算する場合は分配法則を使った式の方が都合が良いです。
計算する際は、この形式にして計算しましょう。↓
頂点×(BoneAの計算結果 + BoneBの計算結果 + BoneCの ・・・・)

何で都合が良いのか?
影響度を設定すると何か良い事はあるのか?

などはまた次回にしたいとおもいます。

今回のまとめ

・影響度がある場合、通常のボーン基準の変換の式の最後に影響度をかければ良い。
・影響度をかけた結果を全て足すと、最終的な頂点の座標が分かる。
・分配法則を使って、頂点×(BoneAの計算結果 + BoneBの計算結果 + ・・・)という風に変形できる



スキンメッシュアニメーションで詰まっている人は

おそらく原理がよくわからない、把握できないという場合が多い
のではないでしょうか。

しかし、原理さえ分かれば簡単なものです。
この講座が終わる頃には、 全体像が理解できると思います。

それでは また次回! (`・ω・´)ノシ
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。