🏃‍♀️

Auto-Rig Proで手抜きリギング

2022/03/13に公開

素人の為によるAuto-Rig Pro

モチベーション

自作のモデルを作ったので手っ取り早くAuto-Rig Pro (ARP)でリグを作ってスキニングして, Unity持っていって動かそうと思います.

タイミング良くAmplify Animation Packが半額ということもありデモ・シーンで動かしてみることにする.

ということで見せてもらおうかBlenderの有名アドオンの実力とやらを.

しないこと

モデル紹介

項目 内容
名前 towa
3角形数 20k
オブジェクト数 1
テクスチャ数 1
ポーズ Aポーズ

テクスチャはUV展開を雑にして, TexToolsでマテリアルのベース・カラーを焼きこんでいます. この通りぐちゃぐちゃです.

服の下にも肌があります.

検証項目

耳学問でよくある破綻を検証する.

  • よくある膝・肘の関節の破綻
  • キャンディ・ラッパー現象
  • 臀部のヴォリューム減少(Improve hips weight)
  • 服の貫通

この辺が想定の内の破綻に収まっているなら助かる. このモデルを人柱にして試してみます.

検証とフィードバック

説明が長いので先に書く. 全体的にうまくいっていない感じがある.

キャンディ・ラッパー現象と関節の破綻

ただしFKモードで腕を動かすとそれほど無茶苦茶でもないのでIKでの操作が難しいという部分もあるのかもしれないです.[2]

Tポーズを取らせると肘関節にメリハリがないのが分かる. 曲がる部分の幅が狭いなどセオリーと異なっている.[3]

キャンディ・ラッパー現象も起きるときは起きるようです. 特にUnity向けではツイスト・ボーンは一つらしいです.

However, 1 twist bone is required to match the Unity’s humanoid rig. Unreal’s humanoid rig support multiple twist bones.

そもそもUnityではいらないという話もあります.

ツイストボーンがなくてもよい理由

ARPのマニュアルでも同じようなことが書いてあります.

Note that Unity internally handles the forearm twist by twisting the forearm bone without using a dedicated twist bone, unless an additional script/plugin is used to handle the twist bone.

またIKでうまく動かすコツとして関節を少し曲げておくというのもあるようです. ただこうすると立ちポーズをわざわざ作る必要があるのかなと思ったりします.

Remember to keep a slight angle between the arms/legs bones. It’s very important for the IK chains to work properly. They MUST NEVER be straight, otherwise the IK direction may be inverted.

コンストレイントを使った二重関節といった方法もあるようですが, これはARPと共存できそうにないですね.

臀部のボリューム減少

基本的には補助ボーンとかブレンド・シェイプで補正するとかいろいろあるんようですがゲームではあまり使われないですよね. 元を膨らませる手もありますが立ちポーズのシルエットが変わるのも嫌だしなぁ・・・

服の貫通

対策は地肌を消して貫通しないようにするしかないと思う.

反省点

  • Aポーズということもあり肘関節のトポロジーがおかしかったのでTポーズにする
  • 密着する衣装の場合地肌のポリゴンは消しておく
  • ポリゴンの密度がおかしい(ポニーテイルに振りすぎている)ので腕や足にもっと割り振る
  • 関節の伸びる部分は少し窪ませて, 曲がる部分は膨らませる.

UnityのHumanoid RigとちゃんとマッチさせるにはTポーズのほうが良いようです.

A successful match simply means that Unity was able to match all of the required bones. However, for better results, you also need to ... set the model in a proper T-pose.[4]

モデルの修正なども必要だがなと思いつつARPを使うとモデリングの早い段階でリグを入れて調整しながらモデルを作るというワークフローもあり得るなと思いました.

実践ARPによるリギング

以下は作業の参考にでもしてください.

スマート機能

ARPの売りでもあるスマート機能でリファレンス・ボーンを生成する. 指先のボーンが正確に入るために以下の条件がある.

  • 指の間隔が狭すぎない
  • 手のひらが床に向いている(床と平行である)

APRのUIは3DビューポートのサイドバーのAPRタグからアクセスできます. 2つ目のパネルがスマート機能のメニュになります.

初期状態ではGet Selected Objectsだけが表示されています. この名前から複数のオブジェクトで構成されたモデルにも利用できることが分かります. towaモデルを選択してボタンを押すとFull BodyかFacial Only化を選べます. Facial Onlyはフェイシャル・リグだけを指定できます.[5]

Full Bodyを選んでマーカーを配置していきます. メニューの内容が以下のように変わります.

プロパティ 内容
Turn モデルの真正面が-Y軸を向いていない場合に回転させる
Add XXX XXXで指定される位置用にマーカーを表示する
Mirro モデルが左右対称かどうか
Restore Last Session マーカーの位置を元に戻してくれる
Cancel and Delete Markers これまでの処理を破棄し最初からやり直せる

バグ技なのかARPが覚えているのか分からないですが, いきなりRestore Last Sessionを押すといい感じにマーカーが配置されたりします.

楽したい一心なのでこのままにしておきます. またメニューの内容が変わります.

ポイントだけ説明します.

プロパティ 内容
Find 5 Fingers 5本指を自動的に見つけてくれます
Spine Count 脊髄用のリファレンス・ボーンの個数を指定します
Go ボーンとリグを生成する

UE4の場合脊髄ボーンは4にする必要があるようです.

Number of spine bones, from 1 to 32. To export to Unreal Engine as a humanoid rig, 4 spine bones are required.

This allows to directly import the skeleton as the Mannequin skeleton in Unreal. It requires 4 spine bones.

しかし肝心のUnityには設定がありません.

Unity Humanoid Avatarの解説を見るとNeckとHipsの間にUpper Chest, Chest, Spineの3本しかありません. 当然Vroidでも3本です.

実験のために3でやってみます.

Goを押すとリファレンス・ボーンが表示されます.

やはり脊椎ボーンは4本必要なことが分かると思います.

やり直しましょう. 方法は簡単です. まずモデルを選択してunbindしておきます. 次にアーマチュアを選択してプロパティ・エディタからオブジェクト・データ・プロパティ・タブを表示しLayersの17番を表示します.

リファレンス・ボーンが表示されているはずです. 編集モードに入ってspineボーンをどれでもいいので選択します.

ARPのLimb Optionsを押すとCountが変更できます.

splineボーンを4にしてOKを押すと骨が増えるはずです. まだ, この時点ではポニーテイルがあるので頭のほうに向かうにつれ奥行きの推定が間違っています.

リファレンス・ボーンの修正

アーマチュアを選択して編集モードから適切な位置に修正しましょう. あまり上下の移動はせずに前後の移動だけで済ますとARPの恩恵にあずかれると思います.

手のボーンもちゃんと入っています.

リグの生成

アーマチュアを選択した状態でARPタブの1番上のパネルを表示します.

Match to Rigでリファレンス・ボーンを元にリグ(コントローラー・ボーン)が生成されます.

カスタム・ボーン

Adding Custom Bonesを参考にしてボーンを追加します.

生成されたボーンはレイヤ分けされています.[6]

変形ボーン(deforming bones)は隠されています. 編集モードに入ってボーンを追加するとc_head.xといったコントローラ・ボーンに追加されることが分かります. どちらに追加しても良いようです.

The only requirement is to add and link them to the deforming bones or controller bones, not reference bones.

またゲーム用にイクスポートする場合cc_という接尾辞を付ける必要があります. ポニーテイル用のボーンを追加してみます.

選択中のc_head.xからポニーテイルの付け根までボーン(ブリッジ・ボーン)を伸ばし, そこからさらにボーンをつかしポニーテイルの先端まで伸ばします. ブリッジ・ボーンは削除しておきます.

cc_ponytailは適当に分割しメッシュに沿わせます. 数字はアンダースコアで区切り付け根から先端に向かってcc_ponytail_0xのxをインクリメントすることにします.

サイド・ヘアは対称にする必要があります. 対称化したいボーンを選択して右クリックしてNamesからAuto Name Left/Rightでまず名前を付けます. 同じように右クリックからSymmetrizeで対象化できます.

詳しくは以下の動画を見ましょう.

YouTubeのvideoIDが不正ですhttps://youtu.be/_bOirFVwAng?t=577

スキニング

RigからSkinに切り替え以下のような設定をします. Preserve Volumeを無効にしている以外はデフォルトの設定です.

通常のBlenderのスキニングと同じようにメッシュ, アーマチュアの順に選択してBindを押します.

Unityとの連携

  • カスタム・ボーンは今回は出力しません.
  • URPプロジェクト・テンプレイトを利用します.

まずImporting a model with humanoid animationsを参考にヒューマノイドをインポートして設定します.

Blenderからエクスポート

アーマチュアのほうを選択します. 試しにSecondary ControllersにTwistを設定しています.

設定は以下のようにします.

Unityへのインポート

ドラッグ&ドロップするかAssetsメニューから読み込みます.

この時点ではテクスチャがありません. 同じフォルダにテクスチャをインポートしておきましょう. 勝手に読み取ってくれると思います.

アバターの設定

towa_twistを選択し, インスペクタからRigを選びます. Animation TypeをHumanoidにしてApplyを押すと, Configureができるようになります.

Configureを押すとAvatar Configurationが開かれます. 強制的にTポーズになりますが全部緑になっているのできちんと認識されていることが分かります.

Amplify Animation Packのインポート

Amplify Animation Packを購入し, Unity Package Managerからインポートします.

この処理には時間がかかります.

UPRへの対応

If you intend to use it with URP or HDRP, be sure to first use the automated Unity provided converter, else the DemoScene and all other Materials will render pink/magenta.

これはURPシェーダとビルトイン・シェーダに互換性がないからです. Upgrading your Shadersを参照せよとあるのですが, Editメニュー以下にRender Pipelineという項目がなくて躓きます.

2021以降のバージョンではRender Pipeline Converterというのを使うようになっているようです.

2021.2.0 Beta 4 not showing menu to upgrade material (URP)

のでRender Pipeline Converterを見てやります.

Windowメニュ以下のRenderingからRender Pipeline Converterを実行します.

ドロップダウン・リストからBuilt-in to URPを選び, PostProcessing Stack v2(PPS v2)以外にチェックを入れます. PPS v2は規格外に時間を食いますし, 必要性も良く分かりません.

https://www.youtube.com/watch?v=zQIosR0P-RE

キャラクターの入れ替え

AmplifyAnimationPack/Scenesフォルダ以下にDemoSceneがあるので開きます. Characterを選択して右クリックでPrefab -> Unpackします. SK_Amplify_Characterをhideして, 同階層にtowaモデルを置きます.

最後にインスペクタからAvatarにtowa用のアバターを設定します.

動かしてみる

Ctrl/Cmd + Pで再生するとW/Sで前後に動かしたりできます.

Recorderで録画

Recoder (Unity Recoder)をパッケージ・マネジャでインポートします. Windows -> General -> Recoder -> Recoder Windowを開きます. デフォルトでMP4が出力されるので何も考えずにStart Recordingを押します. 同時にPlayモードが起動するので適当にゲームを遊んでCtrl + Pで終了すると動画が保存されます.

Appendix

リグの修正

修正する場合はバインド前なら自由にできます. 修正してMatch to Rigを押すとそのたびにリグが生成されます. バインド後はunbindしておくといいかもしれません.

リグの削除

バインドされていない場合はCharacter1コレクションを右クリックしてDelete Hierarchyで削除すれば良いです. この時点ではアーマチュアとメッシュには親子関係はないからです.

Hierarchy and Collections

バインド後はunbindした後に削除します.

レイヤーとボーン

レイヤー 内容
0 Main controllers
1 Secondary controllers
17 Reference bones
31 Deforming bones

リファレンス・ボーンはマーカーから生成されます. Deforming bonesはいわゆる骨入れで利用される基本的な骨格構造を表すボーンです. それを操作するリグと呼ばれるのが0, 1のコントローラー・ボーンです.

カスタム・ボーンの名前

まずARPの命名規則は以下のような感じです.

命名規則 内容
.x 中心に位置するボーン
.l/r 左右対称に位置するボーン

数字に関してはspin_01.x, spin_02.x, spin_03.xとなっているので数字はアンダースコア区切りになるようです.

Naming Conventions

IK/FKモード

四肢に関してはIKとFKを切り替えることができる. 手や足のIKボーンを選択してサイド・バーを開く. ToolsタブにRig Main Propertiesパネルがあるのでそれを展開する. Snap IK-FKでIKとFKを切り替えることができる. あるいはIK-FK Switchスライダーを調節することで両方使うこともできる.

ツイスト・ボーン

ツイストボーンは腕の捩れで体積が縮むいわゆるキャンディ・ラッパー現象を軽減するための補ショボーンらしいです. MMDなどでも使われたりしているようです. 有名なFinal IKアセットではTwistRelaxer というのがあります.

Animation RiggingにもTwist Correction

https://www.youtube.com/watch?v=_GmAupH5Co0

CascadeurにもTwist Bonesを設定できるようです.

リーフ・ボーン

ボーン・チェインの末端を示すために追加されるボーンのようです. 通常は不要ですがDynamic Boneのような揺れものに使うボーンに使うようです.

参考文献

  1. Mecanim Humanoid の基礎的技術解説
  2. [もう悩まない!(かもしれない)Unity/VRChat向けのHumanoid Rig/Bone/ボーン/骨の設定](もう悩まない!(かもしれない)Unity/VRChat向けのHumanoid Rig/Bone/ボーン/骨の設定 )
  3. ブログの女の子を作る #94 ひざを二重関節とUnityのConstraintで修正する【Blender,Unity】
  4. Unity Products:Amplify Animation Pack/Manual
脚注
  1. Binding Engines ↩︎

  2. モデルがちゃんとしていれば普通は破綻しないのかもしれませんが・・・ ↩︎

  3. 折れ曲がる部分は広くして, 伸びる部分狭くすると良いらしい. ↩︎

  4. Importing a model with humanoid animations ↩︎

  5. Facial: if you wish to setup the facial markers (optional), first make sure the eyeballs are a separate object ↩︎

  6. Armature Layers ↩︎

Discussion