モデルにジョイントを配置したら方向付けをします。ジョイントにはローカルの回転軸があり、そのままでもアニメーションさせることはできますが、この回転軸がそれぞれに合った方向に設定されてないと関節を曲げるときに上手くいきません。方向付けにもちょっとしたルールとコツがあるので説明していきます。
ジョイントの方向付け
方向付けのルール
肘や膝のように1方向にしか曲がらない関節は、基本1軸で回転できるようにジョイントの方向を設定します。X軸のプラス方向を子スケルトンの方へ。Y軸はプラス方向を関節を曲げる外側に向け、Z軸で回転させるようにします。
肩や手首などのように2方向以上で回転する関節は、X軸を子ジョイントへ、Y軸Z軸は前後上下と回転させるとき、それぞれ1軸で回転できるように方向を設定します。
方向付けをする理由
上記のように方向付けをすることによってリグが設定しやすくなります。例えば、肘や膝のように1方向にしか曲げたくない関節はX軸Y軸(不要な回転軸)に制限をかけることができます。また、体の変形を補う補助骨を設定する場合、ドリブンキーを利用して腕や足などの回転を補助骨と連動させたりします。そのとき関節の1方向の回転に2軸以上の回転が入ってしまうと制御しづらくなります。
X軸を子ジョイントの方向に向けるのは以下のような理由があります。
- X軸が子ジョイントからズレてるとY軸、Z軸共にずれるので制御しづらい。
- Y軸Z軸は関節を曲げる。X軸は関節をねじるという役割分担がある。
- X軸が子ジョイントに向いてないと子ジョイントの移動値YZに値が入ってしまう。制御の面からX軸以外に移動値を入れたくない(だた、ひとつのジョイントから分岐している場合はしょうがない)。
ジョイントのアトリビュート
ここに方向付けしたスケルトンの情報などが格納されます。バインドポーズの状態でアトリビュートが以下のようになっていることがベストです。
- トランスフォーム アトリビュート
- 移動:基本Xだけに値が入っている状態。複数に分岐したジョイントの子の場合のみYZに値が入る。
- 回転:必ず全て0にします。
- スケール:必ず全て1にします。
- 回転順序:アニメーションする際にこの順番で回転します。
- 回転軸:必ず全て0にします。「ジョイントの方向」と似ていますが、こちらはトランスフォームノードのアトリビュートで、ややこしいので設定はしません。
- ジョイント
- 描画スタイル:「ボーン」のまま変えません。
- 半径:ジョイントの大きさです。見易くするために変更するといいでしょう。
- 自由度:チェックをはずすことでそれぞれの回転軸にロック(制限)をかけることができます。
- 固さ:IKハンドルで曲げるときに抵抗する度合いを設定できます。あまり使いません。
- 優先回転角:IKハンドルを設定した場合にどっちに曲げるかを設定できます。スケルトンが真っ直ぐだった時に使えます。
- ジョイントの方向:ジョイントの回転のオフセットのようなものです。
方向付けの方法
[スケルトン]>[ジョイントの方向付け]>[□オプションボタン]を選択します。オプションの内容は以下の通りです。
- ジョイントをワールドへ方向付け→ジョイントをワールド座標と同じ方向にします。・・・あまり使いません。
- 主軸→子ジョイントに向ける軸を指定します。基本はX軸。
- 補助軸+補助軸のワールド方向→2つの項目はセットで、例えば、膝のジョイントでY軸をワールド座標Zのプラス方向に向かせたい場合は、補助軸を[Y]、補助軸のワールド方向を[Z]と[+]を選択します。
- 選択したジョイントの子の方向付け→子のジョイントにも同様の方向付けをします。
- ローカル スケール軸の再方向付け→・・・よくわかりません!とりあえずチェックしておきます。
- ローカル軸の表示の切り替え→選択しているジョイントにローカル軸の方向を表示・非表示を切り替えます。
※ジョイントに回転値が入っていると実行できません。[修正]>[トランスフォームのフリーズ]で値の入っているジョイントをフリーズします。
ジョイントのミラーの罠
キャラクターの左半身のスケルトンを作成したらもう半身を作成します。通常、反転した同じスケルトンを手動で作成するのは面倒なので[ジョイントのミラー]を使用し、もう半身のジョイントを作成します。ただこれには問題があり、ミラーコピーした側のジョイントのX軸が反転した方向に向いて作成されます。つまり、ジョイントのミラーを行ったあとは、手動で方向付けをし直す必要があります。
I really like it when people get together and share views.
Great blog, continue the good work!