■Unity開発メモ用のWiki◎現在扱っていること・Unity全般・MMDからUnityへの変換してインポート・MMDの仕様把握・BlenderでMMDモデルのカスタム

目次


Blenderでアニメーションをインポートとエクスポートする

  • このサイトを参考に、アニメーションのインポートとエクスポートを試す
  • ここのGitHubからテンプレートのZIPをダウンロードする
  • アニメーション用の適当なモデルを用意する
    • HL2の市民モデル?
  • モデルをデコンパイルをして、まずはGMODできちんと表示出来るか試す
    • 追加したモデルをGMODで表示する方法はWIKIにて別記
  • Blenderで「c_limbs_template.smd」を読み込む
    • アーマチュア(ボーン)を読み込んでいる?
  • 表示用のモデルをインポートする。
    • 「Bone Append Mode」(ボーン・アペンドモード)が[Append to Target](ターゲットに追加)に設定されているかを確認する
    • モーションがバグるので、モデルをインポートしないのも一つの手か?
    • QCファイルはインポートしない
  • 「c_limbs_template_anims」フォルダにある「killmove_zombie_kick1.smd」のアニメーション用のSMDファイルをインポートする
    • ポーズモード?
  • Blenderのエクスポートの設定を行う(別記)
  • 下図の赤線の新しく追加するモーションのSMDを選択してエクスポート
  • QCファイルで「$sequence」が辺りに、以下のスクリプトを追加してコンパイルする
$sequence "my_animation" {
	"anims\killmove_zombie_kick1.smd"
	fadein 0.2
	fadeout 0.2
	snap
	fps 30
}
  • 上図の黄色線のHLMVビュワーで確認する
  • 新しく追加したモーションはHLMVビュワーの「Sequence」タブの赤線のプルタブメニューから選ぶ
    • シークエンスの名前は上で書いた「$sequence "my_animation"」の「my_animation」がそれにあたる

ながれメモ

1:モデルのプロポーション(比率)ファイルを定義する
2:モデルの参照ファイル(Referenceファイル)を定義する
3:スケルトンを定義する

プロポーションファイル

  • プロポーションファイルとスケルトンは何が違うか?
  • プロポーションファイルにメッシュは含まれない

MOD用のモデルのスケルトンのみにしたSMDファイル→プロポーションファイル?
Valve標準モデルのスケルトンのみにしたSMDファイル→参照(Reference)ファイル?
  • 以下の非標準のBipedボーンを削除する
    • ジグルボーン(jigglebones)
    • プロシージャボーン(proceduralbones)

  • reference.smdファイルは基本的に、新しいカスタムモデルと同じ回転でポーズをとった元のモデルのスケルトンです

コンパイルモデルのアニメーションがおかしい場合

  • 下の画像の様になった場合
  • Sourceエンジンのアニメーションシステムは、各フレーム時に回転だけでな、くボーンの位置と回転を通知する
  • 上記はカスタムモデルのモデルのサイズと比率と連携していない
  • モデルのボーンは、アニメーションが要求する場所に強制的に配置される
  • 参考(Steamガイド):サイズプロポーショントリックの使い方
  • この問題は「プロポーショントリック」呼ばれるものをを行う事で解決する
    • プロポーショントリックとは、既存のアニメーションを変更することなく、異なる形状のスケルトン用に構築された既存のアニメーションのセットを使用することである

ジグルボーン(Jiggle bone )について

  • モデルのスケルトン内のボーンを「ジグルボーン」としてマークすると、ゲームエンジンは実行時にそれらを動的にシミュレートするようになり、アンテナの揺れ、弾力のある肉、フロッピーの耳などのリアルな二次モーションが可能になります。
  • ジグルボーンの重力は、物理オブジェクトに影響を与えるグローバル重力ではなく、ローカルであり、ボーンの+ Y(モデルエディタによっては+ Z)軸によって決定されます。
  • ジグルボーン≒揺れもの?
  • ジグルボーンを使って胸を揺らす
  • TF2におけるジグルボーンの使用例
  • Sourceエンジンにおけるジグルボーンの使い方
  • 構文
$jigglebone <名前> {
	<プロパティグループ> {
		<プロパティ> <値> [<値>]
		…
	}
}
  • ここでの<name>とはジョイントチップの名前です。

プロパティグループ「is_flexible」

  • ジグルボーンが「is_flexible」である場合、シミュレートされたマスがボーンの端に配置され、ボーンは弾力性のある柔軟なロッドのように機能します。
  • このスプリングは回転運動のみを生成し、回転の中心はジグルボーンの基部にあります。
  • yaw_stiffness
    • ローカルヨー回転軸でのばねの剛性。
  • yaw_damping
    • ローカルヨー回転軸に沿った減衰。最小:0、最大:10。
  • pitch_stiffness
    • ローカルピッチ回転軸でのばねの剛性。
  • pitch_damping
    • ローカルピッチ回転軸に沿ったダンピング。最小:0、最大:10。
  • along_stiffness
    • ばねの軸に沿ったばねの剛性。これは、このボーンに「allow_length_flex」が指定されている場合にのみ使用されます。
  • along_damping
    • ばねの軸に沿って減衰します。これは、このbone.min:0、max:10に「allow_length_flex」が指定されている場合にのみ使用されます。
  • allow_length_flex
    • 通常、ジグルボーンはその長さを固定します。これを指定すると、その長さも柔軟になります。
  • length
    • 「先端」の質量がベースからインチ単位でどれだけ離れているか。短い長さは劇的な揺れをもたらします。長さが長いほど、動きが微妙になります。
  • tip_mass
    • 先端が重力の影響をどの程度受けるか。ゼロは重力効果を無効にしますが、1000は重い質量になります。

角度の制約

  • 以下のパラメーターは、is_rigid(リジッド)またはis_flexible(フレキシブル)パラメーターグループ内で使用できます。
  • これらの制約のいずれかまたはすべてを使用することはできず、各制約で重要な計算が発生することに注意してください。
  • angle_constraint
    • 許容される最大角度たわみを指定して、ジグルボーンが貫通できない円錐形の境界を作成します。
  • yaw_constraint (min max)
    • ローカルヨー回転軸に沿って許容される最小および最大の角度たわみを指定します。角度値は+/- 90度を超えてはなりません。
  • yaw_friction
    • ゼロ以外の値は、ジグルボーンがヨー制限で定義された平面に対してスライドするときに摩擦力を作成します。摩擦は20単位を超えてはなりません。
  • pitch_constraint
    • ローカルピッチ回転軸に沿って許容される最小および最大の角度たわみを指定します。角度値は+/- 90度を超えてはなりません。
  • pitch_friction
    • ゼロ以外の値は、ジグルボーンがピッチ制限で定義された平面に対してスライドするときに摩擦力を作成します。摩擦は20単位を超えてはなりません。
  • ジグルボーンのチュートリアル動画


Blender上でのリギング練習

  • 3DSMAXのリギングの命名規則が「bip_パーツ名_左右」、Valve系のモデルは更に頭に「Valve」が付き「ValveBiped.パーツ名_左右」となる
  • リグをX軸ミラーで操作できない?
  • Pelvis(骨盤)→Spine(背骨)→Spine1→Spine2→Spine3(オプション)→Spine4(オプション)
    • Clavicle(鎖骨)はSpine2に取り付けることができる
  • Spine2(又は3,4)→Clavicle(鎖骨)→UpperArm(上腕)→Forearm(前腕)→Hand(手)
  • Spine2(又は3,4)→Neck1(首)→Head(頭)
  • Pelvis(骨盤)→Thigh(ふともも)→Calf(ふくらはぎ)Foot(足)→Toe(つま先)
  • Pectoral(胸部)とLatt(?)は必須のボーンでは無いので削除
  • Wrist(手首)とFinger(指)は必須のボーンでは無いので削除
  • Ulana(尺骨)とElbow(ひじ)とBicep(上腕二頭筋)とShouder(肩)は必須のボーンでは無いので削除
  • Forward(?)は必須のボーンでは無いので削除

ボーンの集合=スケルトン=アーマチュア
リグ=スケルトンにポーズが取れるようにコントローラを取り付ける
リギング=リグとメッシュを関連付ける?
  • FBXをテクスチャ付きで出力する場合(Blender2.9)は、FBXエクスポート時に「path mode」を「Copy」に変更する
  • 適当なPMXやFBXモデルをBlenderにインポートする
    • メッシュとマテリアルだけの状態にしてFBXで出力する
  • Blenderに標準で入っているアドオン「Rigify」を有効にする
    • テンプレートのアーマチュアが用意される
  • これからリギングするモデルをBlenderに用意する
  • 作業画面の「追加」→「アーマチュア」→「基本」→「Basic Human(meta-rig)」を選択
  • 追加したアーマチュアのスケールや位置を調整する
  • Zキー:レンダリングモードの変更:ワイヤーフレームにすることで、ボーンとメッシュを選択しやすくなる
  • 「アクティビティツールとワークスペースの設定」タブで「X軸ミラー」にチェックと入れると、スケルトンの調整に便利
  • S:拡大、G:移動、R:回転
  • オブジェクトモードの作業画面(モデリングビュー)?リギングするメッシュを選択し、Shiftキーを押しながら、スケルトンも選択する
  • 作業画面で「Ctrl+P」又は右クリック→「ペアレント」→「自動のウェイトで」を選択する

自動ウェイトに失敗した時の対策

  • メッシュとアーマチュアが自動ウェイトで正しく結合した場合、「人形のアイコン(アーマチュア)」の下位に「逆三角形のアイコン(メッシュ)」が配置される
    • アーマチュアの下にメッシュが配置されていない場合、失敗している

自動ウェイトでエラーが出る場合

Valveのリソースを活用したリギング

  • テンプレートとなるリグを取り出す
  • どこからか解凍した「female_**.mdl」を取り出し、逆コンパイルする
    • 「female_**.mdl」:**は数字;数字の違いは何か?
  • デコンパイルしたMDLの中にあるQCファイルを開く
    • QCファイルにある「$Model 」コマンドでしてされているSMDファイルをBlenderにインポートする
    • Blenderにスケルトンがインポートされていれば成功
  • 次に新しく変更したいモデルをインポートする
    • インポートオプション時に「Make a New Armature(新しいアーマチュアを作成する)」オプションを選択する
  • スケールの調整を行う。顎が同じ位置になるように調整する。
  • 新しく追加したモデルのフェイシャルとジグルボーンを覗いたボーンを削除する
    • これらのカスタムボーンは後で再リギングする
  • 新しいモデルを選択し、「マテリアル」タブを開く。ここでのマテリアル名が後のVMTファイルの名前とリンクするので、日本語などを修正する
    • 眼のマテリアルは「eyeball_R」、「eyeball_L」に変更する
  • 元となるモデルのアーマチェア(スケルトン)をコピーする

アーマチェアの修正

  • オリジナルのアーマチェアをカスタムモデルに適合させていく
    • Blenderをポーズモードにする
    • アニメーションのフレームが変更された場合、今のポーズがすべて削除されてしまう。
   これを防ぐには、[アニメーション]タブに移動し、[自動キーイング]をオンにします。
   これにより、アニメーションに対して行うすべてのボーンポーズが自動的に保存され、一時的なポーズが削除されるのを防ぎます。
   「A」を押して、元のアーマチュア全体を選択します
  • 3Dカーソル(赤白の浮き輪みたいなやつ)を足元にセットし、「ピポットポイント」メニューから、「3Dカーソル」を選ぶ
    • これによりボーンのスケールを変更した時に足元から上方向に伸びていき、足が床を通り抜けないようになる
  • 「S」を押して、ボーンが肩に合うようにスケールを調整する
  • 個々のボーンを調整していく
    • 「ピボットポイント」を「Individual origins(それぞれの原点)」にする
    • 「トランスフォームの座標系」を「ローカル」にする。ギズモで、「移動」だけをオンにし、「回転」と「スケール」のチェックを外す
    • まず足のボーンから修正していく、足の付根を選択し「R」キーを押し、モデルの膝にボーンをあわせていく
      • この時画面に表示される「Rot:(回転)」の値をメモしておく
      • 反対側のボーンを選択し「R」キーを押し、先程メモした値を参考に直接入力できる
    • 同じ様に肩を回転させ、モデルとボーンが合わさる様にする
    • 手指を修正していく
    • ボーンの修正が終わったら「ポーズ」→「適用」→「レストポーズとして適用」

リグの準備

  • Blenderにデフォルトである「Copy Attribute」アドオンを有効にする
  • ポーズモードかを確認
  • 任意のボーンを選択し、[ボーン]タブで、[カスタムオブジェクト]設定を削除
  • 「A」キーを押してすべてのボーンを選択
    • 「Ctrl&C」を押し、新しい[属性のコピー]ウィンドウで、[ボーンシェイプのコピー]を選択
  • 「オブジェクトデータプロパティ」(緑の棒人間が走っている様なアイコン)で「ビューポート表示」→「八面体」を選択
    • MMDによく見るボーンの形になる
  • ボーン名に「attachment」と付いているアタッチメントボーンを削除する
    • ボーンを削除するには、削除するボーンを選択→作業画面で右クリック→選択したボーンを削除→確認画面
  • 「編集モード」、「ピボットポイント」→「3Dカーソル」に変更する
  • 任意のボーンのベースを選択
    • 指やつま先などの先端のボーンから始めた方が良い
  • 「Shift&S」を押してから「カーソルを選択」
    • 3Dカーソルがそのボーンのベースになる
  • 親ボーンの先端を選択、「S」を押して拡大縮小、0(テンキーのゼロ)を押す。
    • 親ボーンの先端が子のベースに接続される
    • 指先、つま先、頭は、メッシュが終了する先端までボーンを伸ばす必要がある
  • すべての頂点グループを削除する
    • 古いモデルのボーンが自動リギング後に表示される?

MMDのボーンを修正してValve形式にする

  • MMDのボーンをマージしていき、Sourceエンジンで読み込める「ValveBiped」形式のボーン構造のスケルトンにする
  • これにより、元のMMDのウェイトを活用する事ができる

MMDのボーンをマージする

  • MMDのボーンをマージしていき、親子関係やボーンを名前を「ValveBiped」形式と同じすればイケるはず
  • 子ボーンのウェイトを親ボーンのウェイトと合わせたい場合
    • 「Cats」タブ→「モデルオプション」→「ウェイトをマージする」で子ボーンは削除され、ウェイトが結合される
  • 下半身のボーンはIKボーンなどが複雑なので、「ウェイトペイントモード」でボーンのウェイト範囲を確認する
    • 見た目に黙れるな
  • 「Cats」タブの「モデル修正」で、ウェイトがゼロのボーンを取り除く事ができる
  • 時々ポーズモードで動かしておかしくなっていないか確認する

ポーズモードと編集モード

  • ポーズモードと編集モードで表示が違うのはなぜか?
  • ポーズモード(オブジェクトモード)
    • ポーズ位置
    • アーマチュアの現在の「ポーズ」で表示( 「アーマチュア」パネルの 「レスト位置」 ボタンが無効の場合)
  • 編集モード
    • レスト位置
    • アーマチュアは常にレスト位置で表示される
  • ポーズモードと編集モードでモデルとアーマチュアがずれた場合、Blenderプラグイン「Cats」の機能を使って修正する
    • ポーズモードのズレを修正する場合
      • 「Catsタブ」→上の方にある「Start Pose Mode」→すぐそのままに「Stop Pose Mode」→修正完了
    • 編集モードのズレを修正する場合
      • 「Catsタブ」→上の方にある「Start Pose Mode」→「Apply as Rest pose」→修正完了

親子関係の変更方法

  • 編集モードにする
  • 子にするボーン→親にするボーンの順に選択する
  • 右クリック→ペアレント→作成
    • オフセットを維持のほうが良いか?

Blenderでボーンのウェイトを見る

  • オブジェクトモードでメッシュを選択し、シフトキーと左クリックでドラッグしながらボーンも選択する?
  • ウェイトペイントモードでCtrl+左クリックでボーンのウェイトを見ることが出来る

ウェイト関連

  • 方法1:新たしいアーマチュアと新しいモデルをBlenderの自動ウェイト機能でウェイトしていく
    • 細かなウェイトの調整が必要になる

コンパイルしたモデルのねじれ対策

  • コンパイルしたモデルを早速HLMVビュワーで見た場合ねじれている場合がある
  • 対策1:Valve型ゲームのリソースのスケルトンをそのまま使う
  • 対策2:Blenderでローカル回転軸を揃える
    • 参考
    • エディットモード→アーマチュア→ボーンロール→ロールを再計算でボーンの座標軸を統一する
    • X軸が奥向きになるようにする?
    • ツール「クローバー」で「DefineBones.qci」をもう一度作り直してからモデルをコンパイルする

ラグドール用のSMDファイルを作る
  • 下記のコマンドを新しいモデル用のQCファイルに追加する
    • 「$IncludeModel」コマンドよりも上に記述する(GMODの場合のみ)
    • 「$Sequence ragdoll」コマンドがあれば削除しておく
$sequence reference "reference" fps 1
$animation "a_proportions" "YOUR CUSTOM MODEL.smd" subtract "reference" 0
$sequence "ragdoll" "ragdoll.smd" {
fps 30
activity "ACT_DIERAGDOLL" 1
}
$sequence "proportions" "a_proportions" predelta autoplay
  • Valve系ゲームからデコンパイルした「ragdoll.smd」を使ってはいけない
  • ラグドールにはスケルトンのみがあり、メッシュはなく、キーフレームが設定されている
  • ラグドールの作成
    • カスタムモデルをBlenderにインポートする
    • モデルのスケルトンのみを残しメッシュを削除する
    • ポーズモードに入り「a」キーを押してすべてのボーンを選択
    • すべてを選択したら、「I」キーを押し「LocRot」を選択する。
    • これにより、ボーンの位置と回転のキーフレームが作成される
    • スケルトンをアニメーションとしてエクスポートする
    • 出力したファイルを「ragdoll.smd」とする

ヘルパーボーンがある場合
後で……
「Reference.smd」ファイルの作成
  • reference.smdファイルとは、新しいカスタムモデルと同じ回転でポーズをとった元のモデルのスケルトンのこと
  • まずベーススケルトンを作成する
  • 参照となるファイルは、基本的に新しいキャラクターと同じ回転値のみを持つ、置き換える元のモデルのアニメーション
  • 置き換える元のモデルを読み込み、メッシュを削除し、スケルトンだけの状態にする
  • 「ポーズモード」で「A」キーで全選択し、「I」キーで「位置と回転」を選択する
    • スケルトン内のすべてのボーンの位置と回転のキーフレームが作成される
  • スケルトンをエクスポートする。これがベーススケルトンとなる

QCファイル作成-04

  • デコンパイルした元モデルのQCファイルを改変していく
  • 「$modelname」のパスとファイル名を新しいモデルに対応させる
  • フレックスアニメーション関連の設定行をごっそり削除する
  • 「$CollisionJoints」のブロックを削除する
タグ

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

【メニュー編集】

スカイリム関連

スカイリム関連


Menu

【メニュー編集】

スクリプト関連

フリーエリア

管理人/副管理人のみ編集できます