Skip to content

hashi4/vmdgadgets

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vmdgadgets

MMDのモーション記録ファイルであるvmdファイルを操作するツールです。

概要

  1. camlight
    • カメラの方向と同方向あるいは逆方向の照明を作成します。 カメラによっては激しく影が動き不快なものになります、特に地面影。
  2. vmd_concat
    • 元となるvmdファイル中の特定のフレーム範囲を別のvmdファイルへコピーします。
  3. spectrum
    • waveファイルからスペクトラムメータモーションを作成します。
    • Pythonの他にnumpyが必要です。
  4. trace_camera, trace_model
    • カメラ(trace_camera)や他モデルの特定ボーン(trace_model)を見続けるモーションを作成します。
    • デフォルトでは「首」、「頭」、「両目」ボーンのモーションを作成します。「両目」は「右目」のy座標の高さで計算します。
    • trace_modelのデフォルト注視先は「両目」ボーンです。ただし(y, z)位置は「右目」のもので計算します。
    • 以下の制約があります
      • 各モーションが持つ「全ての親」から「首」に至るまでのキーフレーム位置に、視線変更のモーションを線形補間で打つため、長い区間では視線がズレます。また背中や直上方向に視線先があると破綻しやすいです。
      • 計算は先端→根本ではなく、根本→先端の簡易計算です。
      • IKや付与親、ローカル軸は計算に入っていません。
  5. joint_graph
    • (接続剛体A)→[ジョイント]→(接続剛体B) の有向グラフをdotファイル形式で出力します。
    • dotファイルはグラフを良い感じに可視化してくれるGraphvizのファイル形式です。
    • 剛体は「ボーン追従」を実線、「物理演算」を破線、「物理+ボーン位置合わせ」を点線で描きます。
  6. brj
    • pmxモデルに、ボーン(半球+円錐)や剛体形状の頂点・面・材質、及びそれらの透明化モーフを追加します。
    • 追加頂点にはボーンの場合はそのボーンの、剛体の場合は関連ボーンをウェイト対象として塗ります。
      • ボーンの「表示先」がボーンの場合は、円錐の先端頂点は表示先ボーンを塗ります(姿勢によっては面が裏返ります)。
      • 剛体に関連ボーン設定がない場合は、剛体名のボーンを追加します。
    • 剛体は、「物理+ボーン位置合わせ」や複数の剛体が一つのボーンを関連付けている場合など、本当の剛体とは異なる動きになります。
    • 材質は、「ボーン」→「元モデルの材質」→「剛体」の順で登録します。
      • ボーンは物理ボーンと非物理ボーンとに材質を分けます。
      • 剛体は剛体グループ毎に材質を分けます。
    • ジョイントは、動きがかなり違うので除外しました(接続剛体Aのボーンを塗った実装が残骸で残っています)。

必要なもの

Python 3.5.1。
単に私の環境です。 Windowsでしか確認していません。
Pythonの導入・利用方法については、python.orgを参照してください。

導入方法、使い方

vmdgadgetsディレクトリ以下をどこかにコピーしてください。
それぞれのスクリプトに対して、-h か --helpを指定実行すると、簡単な使い方やオプションの説明を出力します。酷い英語ですがご容赦ください。

  • camlightの使い方は以下の通りです。

    • python camlight.py 入力カメラファイル名 出力照明ファイル名
    • 入出力ファイル名を省略した場合は標準入出力を使いますので、上の記法と下の記法は同じ動きになります。
    • python camlight.py <入力カメラファイル名>出力照明ファイル名
    • --add_framesオプション指定により、カメラのキーフレーム以外にもカメラ方向の照明フレームを追加できます。
    • --auto_add_framesオプション指定は、ぐるぐる回るカメラに対し、適当に照明フレームを追加します。
    • なお、2.のvmd_concatはコピー諸元(コピー元となるファイルの名称やフレーム番号)を記載したテキストを直接の入力にします。
  • trace_camera, trace_modelの使い方は以下の通りです。

    • python trace_camera.py 自pmx名 自vmd名 カメラvmd名 出力vmd名
    • python trace_model.py 自pmx名 自vmd名 相手pmx名 相手vmd名 出力vmd名
    • pmxファイルの読込みが苦手で、十秒以上かかることがあります。計算も遅いため、「全ての親」から「首」までで、モーションを持たないボーンをvmdから削除しておくと、少し速くなります。
    • 「首」「頭」「両目」のモーションファイルを生成します。元からあるこれらボーンのモーションを削除してから、上書きしてください。
      • --eyes_only オプションを指定すると「両目」モーションのみ作成します。
    • 「首」->「頭」->「両目」順の親子関係になっていないモデルは、この順に設定してから計算を実行してください。
    • フレーム間隔が長く、補間曲線他の影響で視線がズレる場合は、--add_framesオプションで同期フレームを追加できます。
    • --constraintオプションで操作対象ボーンの回転角制約を各軸に指定できます。また回転角に対して倍率を設定できます。
      • z軸の回転倍率は、体が傾いているときに頭を天頂へ向けるか、体と同じ傾きにするかに効きます。
        • 1.0だと天頂を向き、0だと体の傾きと同じになります。
      • x軸, y軸の回転倍率は、「両目」ボーンの回転と目線との差が大きいモデルの調整に使います。
        • 40度で相対するカメラに対し「両目」が6度で目線が合う場合は、0.15倍(6/40)です。
        • 「両目」のx軸(ピッチ)maxを10度、y軸(ヨー)maxを14度、z軸を0度とする場合、以下のオプションを指定します。
        • --constraint 両目 10 14 0 0.15 0.15 0
    • --frame_rangeオプションで、元のvmdモーションを使うフレーム範囲と、追跡モーションを使うフレーム範囲を指定可能です。
      • --frame_range 100 1000 --frame_range 2000 2500 とした場合、100~1000, 2000~2500フレームは追跡モーションになり、他のフレームは元のvmdモーションをコピーします。
    • (実験中)--vmd_lerpオプションで、追跡モーションの角度と元のvmdモーションの角度とを混ぜ合わせます。
      • --constraint 頭 30 30 30 0.3 0.3 0 --vmd_lerpとした場合、vmdのx軸, y軸回転と、追跡のための角度とを0.7, 0.3で混ぜ合わせます。
      • --use_vmd_interpolation オプションを指定すると、「首」と「頭」のモーションは元のvmdモーションと同じフレーム番号にのみ作成し、補間曲線は元vmdモーションのものを使います。オプション指定しない場合は適当なフレームに線形補間でモーションを作成します。
    • カメラ切替え時に一瞬で視線を変えると(頭を振ると)、長い髪のモデルでは乱れが起きるので、一定時間カメラと視線を合わせるためのフレームを入れないようにしています。
      • この一定時間内にさらにカメラ切替えがあると、先読みのような動きになってしまいます。
      • デフォルトは(カメラを向くのに必要な回転/4.5度)フレーム待ちます。--omega設定で変更可能です。
    • カメラや追跡対象が背後に来た場合もフレームの作成をしないようにしています。
      • デフォルトではx-z平面で140度以上にしています。これも--ignoreで変更可能です。
      • こちらも先読み動作になる他、呆けた様になってしまう(大抵ゆっくり振り向くため)ので、手作業で直しが必要です。
      • --use_vmd_interpolation オプションを指定している場合は、元のvmdモーションを挿入します。
    • --near オプションは、「首」・「頭」に対し追跡先の目の高さより少し下を追跡させます(相手が近いとアゴが上がってしまうため)。
  • joint_graphの使い方は以下の通りです。

    • python joint_graph.py PMXファイル名 dotファイル名
    • SVG形式に変換する場合はGraphvizのdot.exeにPATHを通し、dot.exe -Tsvg dotファイル名 -o svgファイル名 です。
    • PMXファイル名のコピペは、エクスプローラでファイルをシフト+右クリックし「パスのコピー」がお勧めです。
  • brjの使い方は以下の通りです。

    • python brj.py 入力PMXファイル名 出力PMXファイル名
    • 出力PMXファイル名を省略すると標準出力へ出力します、入出力両方省略すると標準入力を入力にします。

サンプル

  • 1.sample/lamb: camlightのサンプルバッチファイル
  • 5.sample/spectrum: スペクトラムメータのサンプル
  • 6.sample/lookat: 目線モーション作成サンプルバッチファイル(モデルやモーションは含みません)
  • 他に、sample/sineに、補間曲線でサインカーブを近似するサンプル。円運動を描くのに利用。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages