Ja/Skeleton motion mapping: Difference between revisions

From Valve Developer Community
< Ja
Jump to navigation Jump to search
No edit summary
 
m (fix)
Line 4: Line 4:
モーションマッパー
モーションマッパー


=基本的?使?方=


モーションマッパー�?�元�?��?�る.SMDスケルトン�?�ら目標�?��?�る.SMDスケルトン�?��?モーションを�?マッピング�?�る�?��?�?�デザイン�?�れ�?�コマンドラインツール�?��?�。ターゲット�?��?�るスケルトン�?�ボーン長�?�や�?置�?�元�?�も�?��?��?��?��?��?�る�?��?��?��?�。デフォルト状態�?�使用�?�る�?��?モーションマッパー�?�元�?�アニメーション�?�感�?�を�?��??る�?��?��?�?�よ�?��?�努力�?��?��?�ら�?手足�?�先端�?置�?��?�を�?置解決�?�よ�?��?��?��?��?�。(�?��?�り�?足�?�地�?��?��?手�?�武器を�?�?��?��?��?��?��?��?�状態�?��?�)
=基本的な使い方=
モーションマッパーは元となる.SMDスケルトンから目標となる.SMDスケルトンに、モーションを再マッピングするためにデザインされたコマンドラインツールです。ターゲットとなるスケルトンのボーン長さや位置は元のものと違っているとします。デフォルト状態で使用すると、モーションマッパーは元のアニメーションの感じをできるだけ保つように努力しながら、手足の先端位置などを位置解決しようとします。(つまり、足は地面に、手は武器を持ったままという状態です)




Line 12: Line 12:
motionmapper.exe sourceAnimation.smd targetSkeleton.smd mappedMotion.smd
motionmapper.exe sourceAnimation.smd targetSkeleton.smd mappedMotion.smd
</pre>
</pre>
上のようにコマンドラインで実行すると、<code >"sourceAnimation.smd"</code >のアニメーションを<code >"targetSkeleton.smd"</code >の最初のフレームで定義されたスケルトンに再マップを行い、結果を<code >"mappedMotion.smd"</code >ファイルに出力します.


上�?�よ�?��?�コマンドライン�?�実行�?�る�?��?<code>"sourceAnimation.smd"</code>�?�アニメーションを<code>"targetSkeleton.smd"</code>�?�最�?�?�フレーム�?�定義�?�れ�?�スケルトン�?��?マップを行�?��?�?果を<code>"mappedMotion.smd"</code>ファイル�?�出力�?��?��?�.
使用する.SMDファイルについての注意:


* モーションマッパーは元のスケルトンとターゲットのスケルトンを比較してどのようにマッピングを行うかを決めます。.SMDファイルには初期ポーズがないため、モーションマッパーは元ファイルとと目標となる.SMDファイルでのアニメーションの最初のフレームを使います。そのため:
** 元となるファイルもターゲットとなるファイルも両方最低1フレームのアニメーションを持つ必要があります。
** ターゲットは1フレーム以上のアニメーションを持つ必要はありません、というのも結局上書きされることになるからです。


使用�?�る.SMDファイル�?��?��?��?��?�注�?:
* モーションマッパーは元スケルトンもターゲットスケルトンもどちらも'''まったく'''同じ階層構造を持っていて、ボーン長さと位置関係だけが違っていると仮定します。そのため:
** 元スケルトンもターゲットスケルトンもどちらもボーン数が同じでしかも同じ階層構造の順番を持つ必要があります。
** 階層構造における位置が同じであれば、ボーン名が元スケルトンとターゲットスケルトンで異なっていても構いません。
** テンプレートファイルオプションを使用する場合、そこでのボーン名は元の.SMDファイルで使われている名前を常に指します。


* モーションマッパー�?�元�?�スケルトン�?�ターゲット�?�スケルトンを比較�?��?��?��?�よ�?��?�マッピングを行�?��?�を決�?�?��?�。.SMDファイル�?��?��?期�?ーズ�?��?��?��?��?�?モーションマッパー�?�元ファイル�?��?�目標�?��?�る.SMDファイル�?��?�アニメーション�?�最�?�?�フレームを使�?��?��?�。�??�?��?��?:
* モーションマッパーはスケルトンがValveの標準の座標軸の枠組みに当てはまり以下の基準を満たして構築されたと仮定します:
** 元�?��?�るファイルもターゲット�?��?�るファイルも両方最低1フレーム�?�アニメーションを�?�?�必�?�?��?�り�?��?�。
** ルートに関しては、Z軸は上下方向である。
** ターゲット�?�1フレーム以上�?�アニメーションを�?�?�必�?�?��?�り�?��?�ん�?�?��?��?��?�も�?局上書�??�?�れる�?��?��?��?�る�?�ら�?��?�。
** ルートのみが平行移動と回転移動両方のアニメーションを持ち、すべての他のボーンは回転移動のみである。
* モーションマッパー�?�元スケルトンもターゲットスケルトンも�?��?�らも'''�?��?��?��??'''�?��?�階層構造を�?�?��?��?��?��?ボーン長�?��?��?置関係�?��?��?��?��?��?��?�る�?�仮定�?��?��?�。�??�?��?��?:
** ボーンの長さ方向は基本的にX軸方向であり、そうでない場合は、Z軸にそって回転するようにユニバーサルジョイントで繋がっている。
** 元スケルトンもターゲットスケルトンも�?��?�らもボーン数�?��?��?��?��?��?�も�?��?�階層構造�?�順番を�?�?�必�?�?��?�り�?��?�。
** 階層構造�?��?��?�る�?置�?��?��?��?��?�れ�?��?ボーン�??�?�元スケルトン�?�ターゲットスケルトン�?�異�?��?��?��?��?�も構�?��?��?�ん。
** テンプレートファイルオプションを使用�?�る場�?��?�??�?��?��?�ボーン�??�?�元�?�.SMDファイル�?�使�?れ�?��?�る�??�?を常�?�指�?��?��?�。
* モーションマッパー�?�スケルトン�?�Valve�?�標準�?�座標軸�?�枠組�?��?�当�?��?��?�り以下�?�基準を満�?��?��?�構築�?�れ�?��?�仮定�?��?��?�:
** ルート�?�関�?��?��?��?Z軸�?�上下方�?��?��?�る。
** ルート�?��?��?�平行移動�?�回転移動両方�?�アニメーションを�?�?��?�?��?��?��?�他�?�ボーン�?�回転移動�?��?��?��?�る。
** ボーン�?�長�?�方�?��?�基本的�?�X軸方�?��?��?�り�?�??�?��?��?��?�場�?��?��?Z軸�?��??�?��?�回転�?�るよ�?��?�ユニ�?ーサルジョイント�?�繋�?��?��?��?�る。




=SDK?サンプル=


モーションマップ?使?方を示????サンプルスケルトン?SDK???れ????。テストを行???:


* �?��?�コマンドをコマンドライン�?�実行�?��?��??�?��?��?� (ブラウザ表示�?�複数行�?��?��?��?��?��?��?��?��?�?�れら全�?�をコピー�?��?�コマンドプロンプト�?�貼り付�?�る�?��?��?��?��??�?��?�。).  
=SDKのサンプル=
モーションマップの使い方を示すためにサンプルスケルトンがSDKに含まれています。テストを行うには:
 
* このコマンドをコマンドラインで実行してください (ブラウザ表示で複数行になっていますが、これら全てをコピーしたコマンドプロンプトに貼り付けることができます。).  
 
<pre>"%sourcesdk%\bin\MotionMapper.exe" "%sourcesdk%\..\sourcesdk_content\hl2mp\modelsrc\combine_soldier_xsi\reload_standing.smd" "%sourcesdk%\..\sourcesdk_content\generic\modelsrc\heavy_walk.smd" "%sourcesdk%\..\sourcesdk_content\generic\modelsrc\MOTIONMAPPED_reload_standing.smd"</pre>
<pre>"%sourcesdk%\bin\MotionMapper.exe" "%sourcesdk%\..\sourcesdk_content\hl2mp\modelsrc\combine_soldier_xsi\reload_standing.smd" "%sourcesdk%\..\sourcesdk_content\generic\modelsrc\heavy_walk.smd" "%sourcesdk%\..\sourcesdk_content\generic\modelsrc\MOTIONMAPPED_reload_standing.smd"</pre>
: このコマンドラインは長いので、分割してみます。ここには3つのパラメータがあります。:


: �?��?�コマンドライン�?�長�?��?��?��?分割�?��?��?��?��?�。�?��?��?��?�3�?��?�パラメータ�?��?�り�?��?�。:
# <code >"%sourcesdk%\..\sourcesdk_content\hl2mp\modelsrc\combine_soldier_xsi\reload_standing.smd"</code > - これは元となるアニメーションを指しています。これはHL2MPで使われているリロードアニメーションです。マッピングした結果のアニメーションもこれと同じように見えるはずですが、スケルトンは2つ目のパラメータの体格にあわせたものになっているでしょう。
# <code >"%sourcesdk%\..\sourcesdk_content\generic\modelsrc\heavy_walk.smd"</code > - これは通常のHL2MPキャラクタと体格が違っているスケルトンを持った1フレームのアニメーションファイルを指しています。
# <code >"%sourcesdk%\..\sourcesdk_content\generic\modelsrc\MOTIONMAPPED_reload_standing.smd"</code > - これはモーションマッパーに結果のアニメーションファイル(最初のパラメータのSMDファイルの全てのフレームを2つ目のパラメータのSMDのスケルトンにマッピングしたもの)をどこに保存すべきか指定します。


# <code>"%sourcesdk%\..\sourcesdk_content\hl2mp\modelsrc\combine_soldier_xsi\reload_standing.smd"</code> - �?�れ�?�元�?��?�るアニメーションを指�?��?��?��?��?�。�?�れ�?�HL2MP�?�使�?れ�?��?�るリロードアニメーション�?��?�。マッピング�?��?��?果�?�アニメーションも�?�れ�?��?��?�よ�?��?�見�?�る�?��?��?��?��?��?スケルトン�?�2�?�目�?�パラメータ�?�体格�?��?��?�?��?�も�?��?��?��?��?��?�る�?��?�ょ�?�。
* これでアニメーションファイル(MOTIONMAPPED_reload_standing.smd)が作成され、これをHL2MPキャラクタに適用できますが体格は変になっているはずです。以下の行を<code >sourcesdk_content\hl2mp\modelsrc\player\player_anims.qci</code >ファイルの最後に追加してみてください:  
# <code>"%sourcesdk%\..\sourcesdk_content\generic\modelsrc\heavy_walk.smd"</code> - �?�れ�?�通常�?�HL2MPキャラクタ�?�体格�?��?��?��?��?�るスケルトンを�?�?��?�1フレーム�?�アニメーションファイルを指�?��?��?��?��?�。
# <code>"%sourcesdk%\..\sourcesdk_content\generic\modelsrc\MOTIONMAPPED_reload_standing.smd"</code> - �?�れ�?�モーションマッパー�?��?果�?�アニメーションファイル(最�?�?�パラメータ�?�SMDファイル�?�全�?��?�フレームを2�?�目�?�パラメータ�?�SMD�?�スケルトン�?�マッピング�?��?�も�?�)を�?��?��?��?存�?��?��??�?�指定�?��?��?�。
 
* Now we have an animation file �?�れ�?�アニメーションファイル(MOTIONMAPPED_reload_standing.smd)�?�作�?�?�れ�?�?�れをHL2MPキャラクタ�?��?�用�?��??�?��?��?�体格�?�変�?��?��?��?��?�る�?��?��?��?�。以下�?�行を<code>sourcesdk_content\hl2mp\modelsrc\player\player_anims.qci</code>ファイル�?�最後�?�追加�?��?��?��?��??�?��?��?�:  


<pre>$makereload TEST_reload_shotgun "..\..\..\generic\modelsrc\motionmapped_reload_standing" ACT_HL2MP_GESTURE_RELOAD_SHOTGUN 1</pre>
<pre>$makereload TEST_reload_shotgun "..\..\..\generic\modelsrc\motionmapped_reload_standing" ACT_HL2MP_GESTURE_RELOAD_SHOTGUN 1</pre>
 
* HL2MPのプレイヤーアニメーションを再コンパイルします:  
* HL2MP�?�プレイヤーアニメーションを�?コンパイル�?��?��?�:  


<pre>"%sourcesdk%\bin\studiomdl" -game "%sourcesdk%\..\half-life 2 deathmatch\hl2mp" "%sourcesdk%\..\sourcesdk_content\hl2mp\modelsrc\player\player_male_anims.qc"</pre>
<pre>"%sourcesdk%\bin\studiomdl" -game "%sourcesdk%\..\half-life 2 deathmatch\hl2mp" "%sourcesdk%\..\sourcesdk_content\hl2mp\modelsrc\player\player_male_anims.qc"</pre>
* それではSource SDKウィンドウからModel Viewerを実行します(ゲームリストからHalf-Life 2: Deathmatchを選択していることを確かめてください)。男性モデルをどれでもいいので選んでください。(先ほどのステップでは男性モデルアニメーションのみを再コンパイルしました。女性のアニメーションを再コンパイルするなら最後のパラメータをplayer_female_anims.qcに変えてください) 例えば'''Humans\Group02\male_04'''を選択します。それから'''TEST_reload_shotgun'''シークエンスを選択し、キャラクタの体格の変更を見てください。


* �??れ�?��?�Source SDKウィンドウ�?�らModel Viewerを実行�?��?��?�(ゲームリスト�?�らHalf-Life 2: Deathmatchを�?�択�?��?��?�る�?��?�を確�?��?�?��??�?��?��?�)。男性モデルを�?�れ�?�も�?��?��?��?��?�ん�?��??�?��?��?�。(先�?��?��?�ステップ�?��?�男性モデルアニメーション�?��?�を�?コンパイル�?��?��?��?�。女性�?�アニメーションを�?コンパイル�?�る�?�ら最後�?�パラメータをplayer_female_anims.qc�?�変�?��?��??�?��?��?�) 例�?��?�'''Humans\Group02\male_04'''を�?�択�?��?��?�。�??れ�?�ら'''TEST_reload_shotgun'''シークエンスを�?�択�?��?キャラクタ�?�体格�?�変更を見�?��??�?��?��?�。
* '''注意:''' 今作った<code >Half-Life 2 Deathmatch\hl2mp\models\player\male_anims.mdl</code >を削除しないと、ゲーム内でこの変なモーションマップされたアニメーションが使われて表示されることになるかもしれません。


* '''注?:''' 今作??<code>Half-Life 2 Deathmatch\hl2mp\models\player\male_anims.mdl</code>を削除?????ゲーム内???変?モーションマップ?れ?アニメーション?使?れ?表示?れる????る?も?れ??ん。




=テンプレートファイル�?�使用=
=テンプレートファイルの使用=
 
モーションマッパーが<code >-templateFile</code >引数なしで使用された場合、元スケルトンからターゲットスケルトンまでデフォルトのマッピングを行おうとします。様々なマッピングのパラメータを変更することで様々なモーションエフェクトを起こすこともできます。そうしたパラメータはテキストファイルに保存して、<code >-templateFile</code >引数で指定する必要があります。
モーションマッパー�?�<code>-templateFile</code>引数�?��?��?�使用�?�れ�?�場�?��?元スケルトン�?�らターゲットスケルトン�?��?�デフォルト�?�マッピングを行�?��?��?��?��?��?�。様々�?�マッピング�?�パラメータを変更�?�る�?��?��?�様々�?�モーションエフェクトを起�?��?��?��?�も�?��??�?��?�。�??�?��?��?�パラメータ�?�テキストファイル�?��?存�?��?��?<code>-templateFile</code>引数�?�指定�?�る必�?�?��?�り�?��?�。
 


汎用テンプレートファイル
汎用テンプレートファイル
 
モーションマッパーにはほとんどの要求を満たせるような汎用テンプレートファイルセットが付属しています:
モーションマッパー�?��?��?��?�ん�?��?��?求を満�?��?�るよ�?��?�汎用テンプレートファイルセット�?�付属�?��?��?��?��?�:
 
 
{|
{|
| <code>walk.mmt</code>
| <code >walk.mmt</code >
|-
|-
| 歩行/走行サイクル�?��?両手使�?��?��?��?��?�武器モーション�?��?��?�?�基本テンプレート
| 歩行/走行サイクルと、両手使いではない武器モーションのための基本テンプレート
|-
|-
| <code>twoHandedWeapon.mmt</code>
| <code >twoHandedWeapon.mmt</code >
|-
|-
| 肩�?�担�?��?�発射�?�る�?�?��?��?��?��?�両手�?�?�武器モーション�?��?��?�?�基本テンプレート。左手�?��?�手�?��?�相対関係を�??�?��?��?��?�?��?��?��?�?�手�?�新�?��?�スケルトン�?�モーションマッピング�?�れ�?��?�
| 肩に担いで発射するわけでばない両手持ち武器モーションのための基本テンプレート。左手は右手との相対関係をそのまま保ちつつ、右手は新しいスケルトンにモーションマッピングされます
|-
|-
| <code>twoHandedShoulderWeapon.mmt</code>
| <code >twoHandedShoulderWeapon.mmt</code >
|-
|-
| 肩�?�担�?��?�発射�?�る両手�?�?�武器モーション�?�基本テンプレート。左手�?��?�手�?��?�相対関係を�?�?��?�?�手�?�肩(Spine2)�?��?�相対関係を�?�?��?��?�。<br>�?��?�ら�?�両手�?�?�武器�?�"twoHandedWeapon"テンプレート�?��?"relativeLock"を使�?��?��?�る�?��?��?�注�?�?��?��??�?��?��?�。�?�れ�?�マッピング�?�れ�?�関節�?�"relativeLock"(相対�?離固定)�?��?離�?�ターゲット�?�スケルトン�?�も変�?�?��?��?��?��?��?��?�を仮定�?��?��?��?��?�。も�?��??�?��?離�?�変更�?��?�る�?��?�ら�?コマンド末尾�?�scalar引数�?�値を帰る�?��?��?�"locked"(ロック�?�れ�?�)ジョイントをスケーリング�?�る�?��?�も�?�能�?��?�。
| 肩に担いで発射する両手持ち武器モーションの基本テンプレート。左手は右手への相対関係を保ち、右手は肩(Spine2)との相対関係を保ちます。どちらの両手持ち武器の"twoHandedWeapon"テンプレートは、"relativeLock"を使っていることに注意してください。これはマッピングされた関節と"relativeLock"(相対距離固定)の距離がターゲットのスケルトンでも変わっていないことを仮定しています。もしその距離が変更してるのなら、コマンド末尾のscalar引数の値を帰ることで"locked"(ロックされた)ジョイントをスケーリングすることも可能です。
|-
|-
| <code>rootLock.mmt</code>
| <code >rootLock.mmt</code >
|-
|-
| �?��?�テンプレート�?�キャラクタ�?�環境�?��?�るオブジェクトをインタラクションを行�?�モーション�?��?��?�?�も�?��?��?�。足�?�手�?��?置�?��?��?��?�実際�?�「マッピング�?�?�行�?れ�?��?�ん。�?��?��?��?新�?��?�関節�?離�?�計算�?�れ�?��?�。<br>手�?�足�?��?置�?�元アニメーション�?��?�ROOT�?�ら�?�相対�?置を�?�?��?��?��?��?��?�。も�?�ボーン�?�長�?��?��?��?�り短�??�?��?��?��?�る�?��?�れ�?��?�?�能�?��?自然�?��?果�?��?�る�?�も�?�れ�?��?�ん。
| このテンプレートはキャラクタが環境にあるオブジェクトをインタラクションを行うモーションのためのものです。足と手の位置について実際の「マッピング」は行われません。しかし、新しい関節距離は計算されます。手と足の位置は元アニメーションでのROOTからの相対位置を保とうとします。もしボーンの長さがかなり短くなっているとこれは不可能で不自然な結果になるかもしれません。
|}
|}
=代替テンプレートファイル=
=代替テンプレートファイル=
注意してください: テンプレートファイルを使用するとき、モーションマッパーは内部の初期設定を全て放棄し、全体的にテンプレートに依存してマッピングをおこないます。そのため:


注�?�?��?��??�?��?��?�: テンプレートファイルを使用�?�る�?��??�?モーションマッパー�?�内部�?��?期設定を全�?�放棄�?��?全体的�?�テンプレート�?��?存�?��?�マッピングを�?��?��?��?��?��?�。�??�?��?��?:
* テンプレートファイルを使うときは、望むマッピング方法をその中で全て指定する必要があります


* テンプレートファイルを使�?��?��??�?��?望むマッピング方法を�??�?�中�?�全�?�指定�?�る必�?�?��?�り�?��?�
これを簡単にするために、テンプレートファイルを作成するいくつかの方法が用意されてます。まず1つめはモーションマッパーに同梱されている6,7のテンプレートファイルを使うことです:
 
�?�れを簡�?��?��?�る�?��?�?��?テンプレートファイルを作�?�?�る�?��??�?��?��?�方法�?�用�?�?�れ�?��?��?�。�?��?�1�?��?�?�モーションマッパー�?��?�梱�?�れ�?��?�る6,7�?�テンプレートファイルを使�?��?��?��?��?�:


* default.mmt
* default.mmt
Line 102: Line 95:
* template7.mmt
* template7.mmt


<code>"default.mmt"</code>ファイルを除�??�?�??れ�?�れ�?�テンプレート�?��?�様々�?�モーションマッピング�?�方法�?��??�?�機能�?�関�?�るコメント�?��?��?�れ�?��?��?��?�。 別�?�方法�?��?��?��?��?モーションマッパー�?�<code>-printTemplate</code>引数を使�?��?�出力をパイプを�?��?��?��?�ファイル�?��?存�?�る�?��?��?��?��?��?�り�?��?�:
<code >"default.mmt"</code >ファイルを除き、それぞれのテンプレートには様々なモーションマッピングの方法とその機能に関するコメントが含まれています。 別の方法としては、モーションマッパーの<code >-printTemplate</code >引数を使って出力をパイプをつかってファイルに保存するというのがあります:


<pre>
<pre>
motionmapper.exe -printTemplate > myTemplate.txt
motionmapper.exe -printTemplate > myTemplate.txt
</pre>
</pre>
 
これでモーションマッパーのデフォルト設定と同じファイルを出力し、そこから編集を開始できます。このデフォルト設定ファイルはコメントが少なく、多くの説明はありません。以下にデフォルトテンプレート設定とそのバリエーションの説明があります。
�?�れ�?�モーションマッパー�?�デフォルト設定�?��?��?�ファイルを出力�?��?�??�?��?�ら編集を開始�?��??�?��?�。�?��?�デフォルト設定ファイル�?�コメント�?�少�?��??�?多�??�?�説明�?��?�り�?��?�ん。以下�?�デフォルトテンプレート設定�?��??�?��?リエーション�?�説明�?��?�り�?��?�。


=テンプレート設定=
=テンプレート設定=
 
テンプレートファイルにはアクションと属性が含まれ愛知ます。どちらも同じ行にある引数を読み込むことができます。アクションと属性の主な違いは、アクションは予定に追加され、属性はそうしたアクションのためのパラメータであるということにあります。これは少し混乱させるもので将来より一貫性のある形に変更されるかもしれません。<code >default.mmt</code >ファイルに現れる順番でそれらについて説明します。
テンプレートファイル�?��?�アクション�?�属性�?��?��?�れ愛知�?��?�。�?��?�らも�?��?�行�?��?�る引数を読�?�込む�?��?��?��?��??�?��?�。アクション�?�属性�?�主�?��?��?��?��?アクション�?�予定�?�追加�?�れ�?属性�?��??�?��?��?�アクション�?��?��?�?�パラメータ�?��?�る�?��?��?��?��?��?��?�り�?��?�。�?�れ�?�少�?�混乱�?��?�るも�?��?�将�?�より一貫性�?��?�る形�?�変更�?�れる�?�も�?�れ�?��?�ん。<code>default.mmt</code>ファイル�?��?�れる順番�?��??れら�?��?��?��?�説明�?��?��?�。
 
{|
{|
| <code>rootScaleJoint ValveBiped.Bip01_L_Foot</code>
| <code >rootScaleJoint ValveBiped.Bip01_L_Foot</code >
|-
|-
| The rootScaleJointコマンド�?�ルートモーション�?�拡大縮�?を行�?�元�?��?�る2�?��?�関節を�?�?�リムを引数�?�指定�?��?��?�。�?�れ�?��?�通常足を指定�?��?��?�。�?��?��?��?�も足�?�長�?��?�変更�?�ルート�?�拡大縮�?を行�?�唯一�?��?�由�?��?�る�?��?��?�多�?��?�ら�?��?�。<br>'''注�?:''' "twoJointIKSolve" (以下�?�照)�?�指定�?�れ�?��?��?��?�リムを使用�?�る�?�滑�?��?�よ�?��?�足�?��?果�?��?��?��?��?��?��?��?��?�ょ�?�。
| The rootScaleJointコマンドはルートモーションの拡大縮小を行う元となる2つの関節を持つリムを引数で指定します。これには通常足を指定します。というのも足の長さの変更がルートの拡大縮小を行う唯一の理由であることが多いからです。'''注意:''' "twoJointIKSolve" (以下参照)で指定されていないリムを使用すると滑ったような足の結果となってしまうでしょう。
|-
|-
| <code>rootScaleAmount 1.0</code>
| <code >rootScaleAmount 1.0</code >
|-
|-
| �?��?�属性�?�引数�?��?数�?��?��?��?�?��?�属性�?�唯一�?�目的�?�ルート�?�スケーリングをオン・オフ�?�る�?��?��?��?�。�?�れ�?��?��?��?��?��?�"代替マッピング"セクション�?�扱�?れる�?��?�ょ�?�。
| この属性の引数は小数ですが、この属性の唯一の目的はルートのスケーリングをオン・オフすることです。これについてたは"代替マッピング"セクションで扱われるでしょう。
|-
|-
| <code>toeFloorZ 2.7777</code>
| <code >toeFloorZ 2.7777</code >
|-
|-
| �?��?�属性�?�Z軸�?��?��?��?�床�?��?�る�?�を指定�?��?��?�。�?��?�属性�?�ルートスケーリング�?�"oneJointPlaneConstraint" (以下�?�照)�?�両方�?�影響�?��?��?�。
| この属性はZ軸のどこに床があるかを指定します。この属性はルートスケーリングと"oneJointPlaneConstraint" (以下参照)の両方に影響します。
|-
|-
| <code>twoJointIKSolve ValveBiped.Bip01_L_Foot</code>
| <code >twoJointIKSolve ValveBiped.Bip01_L_Foot</code >
|-
|-
| �?��?�アクション�?�実際�?��?��?��?1�?��?�テンプレートファイル�?�中�?�(望�?��?��??�?�)異�?�る関節�?�対�?��?�何回も呼�?�出�?�れ�?�予定�?��?�れる�?��?��?��?��??�?��?�。�?��?�コマンド�?�目的�?�様々�?�属性�?�元スケルトン�?�関節間�?�親�?�親�?��?置�?�相対関係を�?ターゲット�?��?�?��?�よ�?��?��?�る�?��?�?��?�り�?��?�。様々�?�属性�?��??�?�関係を変更�?�る特定�?�方法を指定�?��?��?�。default.mmtテンプレート�?��?�4�?��?�twoJointIKSolve�?�予定�?��?��?��?��?��?��?��?�:<br>
| このアクションは実際のところ1つのテンプレートファイルの中で(望ましくは)異なる関節に対して何回も呼び出されて予定にいれることができます。このコマンドの目的と様々な属性は元スケルトンの関節間と親の親の位置の相対関係を、ターゲットで再現しようとするためにあります。様々な属性はその関係を変更する特定の方法を指定します。default.mmtテンプレートでは4つのtwoJointIKSolveが予定にはいっています:
* ValveBiped.Bip01_L_Foot
* ValveBiped.Bip01_L_Foot
* ValveBiped.Bip01_R_Foot
* ValveBiped.Bip01_R_Foot
Line 135: Line 125:
* ValveBiped.Bip01_R_Hand
* ValveBiped.Bip01_R_Hand
|-
|-
| <code>reverseSolve 0.0</code>
| <code >reverseSolve 0.0</code >
|-
|-
| �?��?�属性�?�IKソル�?ー(逆�?�動学�?�よる�?置解決)�?�関節�?�曲�?�る方�?�を指示�?��?��?�。テンプレートファイルを�?�る�?��?肘�?��?�?�逆方�?��?�曲�?��?��?��?�る�?��?��?��?�?�る�?��?�ょ�?�。
| この属性はIKソルバー(逆運動学による位置解決)に関節が曲がる方向を指示します。テンプレートファイルをみると、肘は膝と逆方向に曲がっていることがわかるでしょう。
|-
|-
| <code>extremityScale 1.0</code>
| <code >extremityScale 1.0</code >
|-
|-
| �?��?�属性�?��?置解決�?��?�先端�?�モーションを新�?��?�リム長�?��?��?�用�?�る�?��?元�?�アニメーション�?��?��?�比率を�?�?��?�を決定�?��?��?�。注�?: �?��?�属性を足�?��?�用�?�る�?��??�?�rootScaleAmount�?�密接�?�関係�?��?��?�る�?��?��?両者を�?��?�値�?��?�る必�?�?��?�り�?��?�。
| この属性は位置解決した先端のモーションを新しいリム長さに適用するか、元のアニメーションと同じ比率を保つかを決定します。注意: この属性を足に適用するときはrootScaleAmountと密接に関係しているので、両者を同じ値にする必要があります。
|-
|-
| <code>limbRootOffsetScale 1.0 1.0 0.0</code>
| <code >limbRootOffsetScale 1.0 1.0 0.0</code >
|-
|-
| �?��?�属性�?��?��?�軸�?��??�?��?��?��?��??ら�?�リム�?�ルートや関節を動�?��?��?�親�?�親�?��?置解決�?�よる変更を模倣�?�る�?�を指定�?��?��?�。�?��?��?��?�を言�?��?��?��?��?��?も�?�腰�?�より広�??変更�?�れ�?��?��?��?�ら�?足も�?��?��?��?�広�?��?��?��?��?��?��?�も�?��?��?��?�?�?��?��?��?��?�肩�?�も�?��?��?��?�。肩幅�?�広�??�?��?��?�ら手もより広�??�?��?�?��?��?��?��?��?�?3軸�?�引数を�?�る�?�由�?�以下�?��?�:も�?�新�?��?�スケルトン�?�腰�?��?置�?�下�?��?��?��?��?��?��?��?�も�?足も�?��?��?��?�下�?��?�床より押�?�下�?��?��?��?��?��?�も�?��?��?�ん。�?��?��??対も腕�?��?��?��?��?��?�る�?�も�?�れ�?��?�ん。も�?�肩幅�?�広�??�?背中�?�短�??�?アニメーション�?�武器を�?�?�も�?��?��?��?�ら�?手を空間内�?�垂直�?�移動�?��?�頭より上�?��?�ら�?��?�よ�?��?��?��?��?武器を�?�?��?��?�?�両手�?��?置�?�広�?��?��?��?��?��?�も�?�?��?��?��?�ょ�?�。
| この属性はどの軸にそってどのくらいリムのルートや関節を動かして親の親の位置解決による変更を模倣するかを指定します。このことを言い換えます、もし腰がより広く変更されたとしたら、足も同じだけ広げてほしいとおもいますか?同じことは肩にもいえます。肩幅が広くなったら手もより広くひろげたいですか?3軸の引数を取る理由は以下です:もし新しいスケルトンの腰の位置が下がっていたとしても、足も同じだけ下げて床より押し下げたいとはおもいません。この反対も腕についていえるかもしれません。もし肩幅が広く、背中が短く、アニメーションは武器を持つものだったら、手を空間内で垂直に移動させ頭より上にならないようにして、武器を持つために両手の位置は広げたいとはおもわないでしょう。
|-
|-
| <code>relativeLock ValveBiped.Bip01_R_Hand 1.0</code>
| <code >relativeLock ValveBiped.Bip01_R_Hand 1.0</code >
|-
|-
| �?��?�属性�?�武器を�?�?��?��?��?��?�場�?��?�手をも�?�片方�?�手�?��?�絶対�?置関係を�?�?��?��?�。�?��?�属性�?�通常片方�?�手�?��?��?�設定�?��?ロック先�?�手�?�ロック�?�れ�?�手より先�?��?置解決�?�行�?れる必�?�?��?�り�?��?�。�?��?�属性�?�最後�?�値�?�拡大縮�?を�?�ら�?�?��?ロック�?�れ�?��?�る手�?��?置を�?ロック先�?�手�?�空間を元�?�スケーリング�?��?�?�れ�?�相対�?置を(�?�?��?��?大�??�?�武器�?��?��?�?��?�)伸�?��?��?�り縮�?�?�り�?��??�?��?�。
| この属性は武器を持つといった場合に手をもう片方の手との絶対位置関係を保ちます。この属性は通常片方の手のみに設定し、ロック先の手はロックされた手より先に位置解決が行われる必要があります。この属性の最後の値は拡大縮小をあらわし、ロックされている手の位置を、ロック先の手の空間を元にスケーリングし、これで相対位置を(小さい、大きい武器にあわせて)伸ばしたり縮めたりできます。
|-
|-
| <code>oneJointPlaneConstraint ValveBiped.Bip01_L_Toe0</code>
| <code >oneJointPlaneConstraint ValveBiped.Bip01_L_Toe0</code >
|-
|-
| �?�れ�?��?�純�?�1�?��?�関節�?�平�?�コンストレイント�?��?上�?�"toeFloorZ"属性�?�定義�?�れ�?�"床平�?�"を指定�?��?�ボーン�?�貫通�?��?��?�よ�?��?�親関節を調節�?��?��?�。�?�れ�?�twoJointIKSolve�?��?��?�先"Toe0"を押�?�出�?��?��?��?��?�も�?�?��?�先を地�?�より上�?��?�?��?��?�?��?�り�?��?�。<br>'''注�?:''' �?��?��?置解決�?�足"foot"ノード�?�地�?�より上�?��?�る�?��??�?��?��?��?��??�?��??�?��?�。�?��?�的�?�マッピングを実行�?�る�?��??�?�常�?��??�?��?��?�状態�?��?�る�?��??�?��?�。
| これは単純な1つの関節の平面コンストレイントで、上の"toeFloorZ"属性で定義された"床平面"を指定したボーンが貫通しないように親関節を調節します。これはtwoJointIKSolveがつま先"Toe0"を押し出したとしても、つま先を地面より上に保つためにあります。'''注意:''' この位置解決は足"foot"ノードが地面より上にあるときのみうまくいきます。合理的なマッピングを実行するときは常にそういう状態にあるべきです。
|}
|}
 
=テンプレートの特殊コマンド=
=テンプレート�?�特殊コマンド=
テンプレート内で使用できるスケルトン変更に関連した特殊コマンドがいくつかあります。これらはもともとテスト用でしたが、スケルトン変更のために使用することができます。{|
 
| <code >jointScale ValveBiped.Bip01_L_Foot 1.5</code >
テンプレート内�?�使用�?��??るスケルトン変更�?�関連�?��?�特殊コマンド�?��?��??�?��?��?�り�?��?�。�?�れら�?�も�?�も�?�テスト用�?��?��?��?��?スケルトン変更�?��?��?�?�使用�?�る�?��?��?��?��??�?��?�。
 
{|
| <code>jointScale ValveBiped.Bip01_L_Foot 1.5</code>
|-
|-
| ターゲット�?�スケルトン�?�左足ボーンを1.5�?�?�拡大�?��?��?�
| ターゲットのスケルトンの左足ボーンを1.5倍に拡大します
|-
|-
| <code>skeletonScale 1.5</code>
| <code >skeletonScale 1.5</code >
|-
|-
| ターゲット�?�スケルトン�?�全�?��?�ボーンを1.5�?�?�拡大�?��?��?�。
| ターゲットのスケルトンの全てのボーンを1.5倍に拡大します。
|}
|}

Revision as of 05:31, 29 November 2005

originally translated by RumikoHoshino, 2005/9/6
original English version: Skeleton motion mapping
モーションマッパー


基本的な使い方

モーションマッパーは元となる.SMDスケルトンから目標となる.SMDスケルトンに、モーションを再マッピングするためにデザインされたコマンドラインツールです。ターゲットとなるスケルトンのボーン長さや位置は元のものと違っているとします。デフォルト状態で使用すると、モーションマッパーは元のアニメーションの感じをできるだけ保つように努力しながら、手足の先端位置などを位置解決しようとします。(つまり、足は地面に、手は武器を持ったままという状態です)


motionmapper.exe sourceAnimation.smd targetSkeleton.smd mappedMotion.smd

上のようにコマンドラインで実行すると、"sourceAnimation.smd"のアニメーションを"targetSkeleton.smd"の最初のフレームで定義されたスケルトンに再マップを行い、結果を"mappedMotion.smd"ファイルに出力します.

使用する.SMDファイルについての注意:

  • モーションマッパーは元のスケルトンとターゲットのスケルトンを比較してどのようにマッピングを行うかを決めます。.SMDファイルには初期ポーズがないため、モーションマッパーは元ファイルとと目標となる.SMDファイルでのアニメーションの最初のフレームを使います。そのため:
    • 元となるファイルもターゲットとなるファイルも両方最低1フレームのアニメーションを持つ必要があります。
    • ターゲットは1フレーム以上のアニメーションを持つ必要はありません、というのも結局上書きされることになるからです。
  • モーションマッパーは元スケルトンもターゲットスケルトンもどちらもまったく同じ階層構造を持っていて、ボーン長さと位置関係だけが違っていると仮定します。そのため:
    • 元スケルトンもターゲットスケルトンもどちらもボーン数が同じでしかも同じ階層構造の順番を持つ必要があります。
    • 階層構造における位置が同じであれば、ボーン名が元スケルトンとターゲットスケルトンで異なっていても構いません。
    • テンプレートファイルオプションを使用する場合、そこでのボーン名は元の.SMDファイルで使われている名前を常に指します。
  • モーションマッパーはスケルトンがValveの標準の座標軸の枠組みに当てはまり以下の基準を満たして構築されたと仮定します:
    • ルートに関しては、Z軸は上下方向である。
    • ルートのみが平行移動と回転移動両方のアニメーションを持ち、すべての他のボーンは回転移動のみである。
    • ボーンの長さ方向は基本的にX軸方向であり、そうでない場合は、Z軸にそって回転するようにユニバーサルジョイントで繋がっている。



SDKのサンプル

モーションマップの使い方を示すためにサンプルスケルトンがSDKに含まれています。テストを行うには:

  • このコマンドをコマンドラインで実行してください (ブラウザ表示で複数行になっていますが、これら全てをコピーしたコマンドプロンプトに貼り付けることができます。).
"%sourcesdk%\bin\MotionMapper.exe" "%sourcesdk%\..\sourcesdk_content\hl2mp\modelsrc\combine_soldier_xsi\reload_standing.smd" "%sourcesdk%\..\sourcesdk_content\generic\modelsrc\heavy_walk.smd" "%sourcesdk%\..\sourcesdk_content\generic\modelsrc\MOTIONMAPPED_reload_standing.smd"
このコマンドラインは長いので、分割してみます。ここには3つのパラメータがあります。:
  1. "%sourcesdk%\..\sourcesdk_content\hl2mp\modelsrc\combine_soldier_xsi\reload_standing.smd" - これは元となるアニメーションを指しています。これはHL2MPで使われているリロードアニメーションです。マッピングした結果のアニメーションもこれと同じように見えるはずですが、スケルトンは2つ目のパラメータの体格にあわせたものになっているでしょう。
  2. "%sourcesdk%\..\sourcesdk_content\generic\modelsrc\heavy_walk.smd" - これは通常のHL2MPキャラクタと体格が違っているスケルトンを持った1フレームのアニメーションファイルを指しています。
  3. "%sourcesdk%\..\sourcesdk_content\generic\modelsrc\MOTIONMAPPED_reload_standing.smd" - これはモーションマッパーに結果のアニメーションファイル(最初のパラメータのSMDファイルの全てのフレームを2つ目のパラメータのSMDのスケルトンにマッピングしたもの)をどこに保存すべきか指定します。
  • これでアニメーションファイル(MOTIONMAPPED_reload_standing.smd)が作成され、これをHL2MPキャラクタに適用できますが体格は変になっているはずです。以下の行をsourcesdk_content\hl2mp\modelsrc\player\player_anims.qciファイルの最後に追加してみてください:
$makereload TEST_reload_shotgun "..\..\..\generic\modelsrc\motionmapped_reload_standing" ACT_HL2MP_GESTURE_RELOAD_SHOTGUN 1
  • HL2MPのプレイヤーアニメーションを再コンパイルします:
"%sourcesdk%\bin\studiomdl" -game "%sourcesdk%\..\half-life 2 deathmatch\hl2mp" "%sourcesdk%\..\sourcesdk_content\hl2mp\modelsrc\player\player_male_anims.qc"
  • それではSource SDKウィンドウからModel Viewerを実行します(ゲームリストからHalf-Life 2: Deathmatchを選択していることを確かめてください)。男性モデルをどれでもいいので選んでください。(先ほどのステップでは男性モデルアニメーションのみを再コンパイルしました。女性のアニメーションを再コンパイルするなら最後のパラメータをplayer_female_anims.qcに変えてください) 例えばHumans\Group02\male_04を選択します。それからTEST_reload_shotgunシークエンスを選択し、キャラクタの体格の変更を見てください。
  • 注意: 今作ったHalf-Life 2 Deathmatch\hl2mp\models\player\male_anims.mdlを削除しないと、ゲーム内でこの変なモーションマップされたアニメーションが使われて表示されることになるかもしれません。


テンプレートファイルの使用

モーションマッパーが-templateFile引数なしで使用された場合、元スケルトンからターゲットスケルトンまでデフォルトのマッピングを行おうとします。様々なマッピングのパラメータを変更することで様々なモーションエフェクトを起こすこともできます。そうしたパラメータはテキストファイルに保存して、-templateFile引数で指定する必要があります。

汎用テンプレートファイル モーションマッパーにはほとんどの要求を満たせるような汎用テンプレートファイルセットが付属しています:

walk.mmt
歩行/走行サイクルと、両手使いではない武器モーションのための基本テンプレート
twoHandedWeapon.mmt
肩に担いで発射するわけでばない両手持ち武器モーションのための基本テンプレート。左手は右手との相対関係をそのまま保ちつつ、右手は新しいスケルトンにモーションマッピングされます
twoHandedShoulderWeapon.mmt
肩に担いで発射する両手持ち武器モーションの基本テンプレート。左手は右手への相対関係を保ち、右手は肩(Spine2)との相対関係を保ちます。どちらの両手持ち武器の"twoHandedWeapon"テンプレートは、"relativeLock"を使っていることに注意してください。これはマッピングされた関節と"relativeLock"(相対距離固定)の距離がターゲットのスケルトンでも変わっていないことを仮定しています。もしその距離が変更してるのなら、コマンド末尾のscalar引数の値を帰ることで"locked"(ロックされた)ジョイントをスケーリングすることも可能です。
rootLock.mmt
このテンプレートはキャラクタが環境にあるオブジェクトをインタラクションを行うモーションのためのものです。足と手の位置について実際の「マッピング」は行われません。しかし、新しい関節距離は計算されます。手と足の位置は元アニメーションでのROOTからの相対位置を保とうとします。もしボーンの長さがかなり短くなっているとこれは不可能で不自然な結果になるかもしれません。

代替テンプレートファイル

注意してください: テンプレートファイルを使用するとき、モーションマッパーは内部の初期設定を全て放棄し、全体的にテンプレートに依存してマッピングをおこないます。そのため:

  • テンプレートファイルを使うときは、望むマッピング方法をその中で全て指定する必要があります

これを簡単にするために、テンプレートファイルを作成するいくつかの方法が用意されてます。まず1つめはモーションマッパーに同梱されている6,7のテンプレートファイルを使うことです:

  • default.mmt
  • template1.mmt
  • template2.mmt
  • template3.mmt
  • template4.mmt
  • template5.mmt
  • template6.mmt
  • template7.mmt

"default.mmt"ファイルを除き、それぞれのテンプレートには様々なモーションマッピングの方法とその機能に関するコメントが含まれています。 別の方法としては、モーションマッパーの-printTemplate引数を使って出力をパイプをつかってファイルに保存するというのがあります:

motionmapper.exe -printTemplate > myTemplate.txt

これでモーションマッパーのデフォルト設定と同じファイルを出力し、そこから編集を開始できます。このデフォルト設定ファイルはコメントが少なく、多くの説明はありません。以下にデフォルトテンプレート設定とそのバリエーションの説明があります。

テンプレート設定

テンプレートファイルにはアクションと属性が含まれ愛知ます。どちらも同じ行にある引数を読み込むことができます。アクションと属性の主な違いは、アクションは予定に追加され、属性はそうしたアクションのためのパラメータであるということにあります。これは少し混乱させるもので将来より一貫性のある形に変更されるかもしれません。default.mmtファイルに現れる順番でそれらについて説明します。

rootScaleJoint ValveBiped.Bip01_L_Foot
The rootScaleJointコマンドはルートモーションの拡大縮小を行う元となる2つの関節を持つリムを引数で指定します。これには通常足を指定します。というのも足の長さの変更がルートの拡大縮小を行う唯一の理由であることが多いからです。注意: "twoJointIKSolve" (以下参照)で指定されていないリムを使用すると滑ったような足の結果となってしまうでしょう。
rootScaleAmount 1.0
この属性の引数は小数ですが、この属性の唯一の目的はルートのスケーリングをオン・オフすることです。これについてたは"代替マッピング"セクションで扱われるでしょう。
toeFloorZ 2.7777
この属性はZ軸のどこに床があるかを指定します。この属性はルートスケーリングと"oneJointPlaneConstraint" (以下参照)の両方に影響します。
twoJointIKSolve ValveBiped.Bip01_L_Foot
このアクションは実際のところ1つのテンプレートファイルの中で(望ましくは)異なる関節に対して何回も呼び出されて予定にいれることができます。このコマンドの目的と様々な属性は元スケルトンの関節間と親の親の位置の相対関係を、ターゲットで再現しようとするためにあります。様々な属性はその関係を変更する特定の方法を指定します。default.mmtテンプレートでは4つのtwoJointIKSolveが予定にはいっています:
  • ValveBiped.Bip01_L_Foot
  • ValveBiped.Bip01_R_Foot
  • ValveBiped.Bip01_L_Hand
  • ValveBiped.Bip01_R_Hand
reverseSolve 0.0
この属性はIKソルバー(逆運動学による位置解決)に関節が曲がる方向を指示します。テンプレートファイルをみると、肘は膝と逆方向に曲がっていることがわかるでしょう。
extremityScale 1.0
この属性は位置解決した先端のモーションを新しいリム長さに適用するか、元のアニメーションと同じ比率を保つかを決定します。注意: この属性を足に適用するときはrootScaleAmountと密接に関係しているので、両者を同じ値にする必要があります。
limbRootOffsetScale 1.0 1.0 0.0
この属性はどの軸にそってどのくらいリムのルートや関節を動かして親の親の位置解決による変更を模倣するかを指定します。このことを言い換えます、もし腰がより広く変更されたとしたら、足も同じだけ広げてほしいとおもいますか?同じことは肩にもいえます。肩幅が広くなったら手もより広くひろげたいですか?3軸の引数を取る理由は以下です:もし新しいスケルトンの腰の位置が下がっていたとしても、足も同じだけ下げて床より押し下げたいとはおもいません。この反対も腕についていえるかもしれません。もし肩幅が広く、背中が短く、アニメーションは武器を持つものだったら、手を空間内で垂直に移動させ頭より上にならないようにして、武器を持つために両手の位置は広げたいとはおもわないでしょう。
relativeLock ValveBiped.Bip01_R_Hand 1.0
この属性は武器を持つといった場合に手をもう片方の手との絶対位置関係を保ちます。この属性は通常片方の手のみに設定し、ロック先の手はロックされた手より先に位置解決が行われる必要があります。この属性の最後の値は拡大縮小をあらわし、ロックされている手の位置を、ロック先の手の空間を元にスケーリングし、これで相対位置を(小さい、大きい武器にあわせて)伸ばしたり縮めたりできます。
oneJointPlaneConstraint ValveBiped.Bip01_L_Toe0
これは単純な1つの関節の平面コンストレイントで、上の"toeFloorZ"属性で定義された"床平面"を指定したボーンが貫通しないように親関節を調節します。これはtwoJointIKSolveがつま先"Toe0"を押し出したとしても、つま先を地面より上に保つためにあります。注意: この位置解決は足"foot"ノードが地面より上にあるときのみうまくいきます。合理的なマッピングを実行するときは常にそういう状態にあるべきです。

テンプレートの特殊コマンド

テンプレート内で使用できるスケルトン変更に関連した特殊コマンドがいくつかあります。これらはもともとテスト用でしたが、スケルトン変更のために使用することができます。{| | jointScale ValveBiped.Bip01_L_Foot 1.5 |- | ターゲットのスケルトンの左足ボーンを1.5倍に拡大します |- | skeletonScale 1.5 |- | ターゲットのスケルトンの全てのボーンを1.5倍に拡大します。 |}