関節のボーンとポリゴンフローに関するTIPS
目次
- ボーンのローカル回転軸をそろえる
- アーマチュアの『体積を維持(Preserve Volume)』オプションを使う
- 関節の可動域の中間位置をレスト位置にする
- Pose Shape Keys アドオンを使う(3.1)
ボーンのローカル回転軸をそろえる
ボーンのローカル回転軸が統一されていない場合、ひじは X 軸で回転し、ひざは Z 軸で回転するというようなことが起こる。また回転軸がずれていると回転軸を指定した回転で自然な方向に曲がらないことがある。詳細はボーンのローカル座標軸設定を参照。
アーマチュアの『体積を維持(Preserve Volume)』オプションを使う
アーマチュアの『体積を維持(Preserve Volume)』にチェックを入れると、関節部分の沈み込みや回転時の体積減少を低減できる。前腕を2分割して回転させると前腕が痩せる問題はこれで解決できる。
これにはデュアルクォータニオンが使われている。デュアルクォータニオンの技術的な詳細についてはデュアルクォータニオン徹底解説を参照。
ただし大抵のゲームエンジンはデュアルクォータニオンに対応してないのでゲームエンジンで使用するモデルの場合は『体積を維持(Preserve Volume)』は使わない。
関節の可動域の中間位置をレスト位置にする
可動範囲の中間位置を基本ポーズにするとメッシュの破綻が少ない。A ポーズや指を少し曲げた状態をレスト位置にしているモデルが存在するのはこのためだ。
全関節を可動域の中間にするとバイクにまたがるようなポーズになるが、このような姿勢をレスト位置にすることはまずない。
Pose Shape Keys アドオンを使う(3.1)
関節を曲げたときのポリゴンの補正にシェイプキーを使うと依存性の問題が発生する。シェイプキーで補正した後にウェイトやコンストレイントのパラメータを調整すると、シェイプキーも修正しなければならない。
Pose Shape Keys アドオンはウェイト調整後のメッシュを保存しているため、シェイプキー補正後でもウェイトやコンストレイントのパラメータを調整できる。
外部リンク
Rig with Shape Keys Like Never Before!
補助ボーン
補助ボーンを使う
動かさない補助ボーンは意味がない。動かさない補助ボーンはウェイトを適切に設定することで、削除できる。
ボーンの影響力のブレンド
補助ボーンに影響力(Influence)を弱めたチャイルドコンストレイント(Child of)や回転コピーを追加すれば、ボーンの動きに少しだけ追従する動きを実現できる。
少しだけ追従する補助ボーンは正座したときに関節がつぶれるのを防ぐ目的で、膝によく配置される。
補助ボーンを回転量に応じて動かす
関節
シェイプキーを使ったポリゴンの補正
シェイプキーを使って関節のポリゴンを補正する場合は、曲がる側の関節部分の頂点のウェイトを上腕に多く振っておくとうまく動かしやすい。
ボーン変形の補助としてシェイプキーを使う
関節を曲げたときに丸くなりすぎる場合
肘や指を曲げたときに丸くなりすぎるときは関節位置を外側へずらすことで解消できる。ひざでこれをやると不自然になるので、ひざの場合はひざの裏側に寄せた位置に関節を配置する。
下の動画では左側が内側よりの関節位置で、右側が肘よりの関節位置だ。
関節位置のトレードオフ
関節位置を外側に配置すると丸みは低減できるが、頂点を配置できない関節の内側領域が広くなる欠点がある。この問題の解決方法は関節の可動域の中間位置をレスト位置にすることだ。
2重関節ボーン
関節位置の上下に2つ関節を配置することで、頂点のへこむ動きを相殺できる。正座ができることが要求されている場合は、膝を2重関節にすることが多い。
IK を設定するときは剛性(Stiffness)を設定して曲がりすぎないようにする。
Unity での設定はコンストレイントを使った二重関節を参照。
ボーンずらし
ボーンの親子関係は保持したまま接続を解除し、子ボーンを手前に配置する。こうすると回転軸が手前側に移動しポリゴンの沈み込みが目立たなくなる。
接続のみを解除するにはエディットモードで Connected のチェックを外す。
前腕
前腕のポリゴンを 90° ひねる
手をモデリングするとき、たいていは手のひらが下を向いた状態でモデリングされる。この状態の時、前腕はほとんど限界まで回転された状態だ。そこで前腕をあらかじめひねった状態でモデリングしておくと、前腕を逆回転させたときにポリゴンフローが自然になる。
実際はある程度モデリングした後に 90° ひねることが多い。これはプロポーショナルエディットを使えば簡単にできる。この後で最終的な修正を入れる。
なぜ前腕可動域の中間をレストポーズにしないのか
ボーン可動域の中間をレストポーズにするのがセオリーだ。前腕の場合は、手のひらを前面に向けた状態だ。しかしそのポーズをレストポーズにすることはほとんどない。
手のひらを前面に向けた状態は腕をおろしたポーズで問題になる。手のひらを前に向けた状態で、腕を下げひじを 90° 曲げると手の平は上を向く。この状態で手を下に向けようとすると、前腕を 180° 回転させる必要がある。それに対し手のひらを下に向けたレストポーズならば 90° の回転で済む。
前腕のボーンを分割する
前腕を一本のボーンで表現すると、手を180度反転させるときに手首がねじれてしまう。人間は手を180度反転させるとき、腕をひねっているのであって手首を回転させているわけではない。
Blender だけで使うなら、Bendy Bones を使えばボーンを分割する必要はない。
外部リンク
肘関節が痩せるのを防止するTwistBone設定(Blender&Unity)
前腕に補助ボーンを仕込む
ゲームエンジン等にエクスポートして使う場合、前腕を分割したくない。その場合は、前腕に位置に補助ボーンを配置する。この補助ボーンは前腕の子にする。そして回転コピーコンストレイントで手のローカルY軸回転をコピーする。ゲームエンジン側でも回転コピーコンストレイントを設定する。
前腕のねじれの問題
前腕をねじると前腕が痩せてしまう。これはアーマチュアモディフィアの「体積の維持」オプションを使えば解消できる。ゲームエンジンでもデュアルクォータニオンを使ってスキニングすれば、似た結果が得られる。
頂点の位置にボーンを置く
関節の曲がる側のポリゴンを少なくしたときは、伸びる側のポリゴンの分割数が増えている場所にボーンを置く。そうしないとポリゴンがきれいに移動しない。
メッシュ
天球体を作る
天球状にポリゴンを張ると輪郭部分の分割数が実際のポリゴン数よりも多く見える。これは関節の伸ばされる部分や球状の部位でよく使われる。以下の場所で天球体がよく利用される。
- ひじ・ひざ
- 肩
- 頭
- 頬
- 胸
- 尻
グリッドを天球状に変換するのは簡単だ。ポリゴンラインをひとつ飛ばしに選択して半グリッド移動する。後は三角化(trianglate)するだけだ。
ポリゴンベルトを作る
肩や股関節は3軸で回転するので、変形させたい場所にベルト状にポリゴンを作る。このベルト状のポリゴンは分割しないほうがいいのだが、尻の場合は大きく引き伸ばされるのでいくつか分割を入れる。また腕を肩以上に上げないときは肩も分割できる。
外部リンク
遊戲模型佈線對動作變形之影響(2-2)-肩膀篇――肩のエッジループの解説
関節の曲がる側のポリゴンを少なく、伸びる側のポリゴンを多くする
Loop cuts for animation
そもそも関節の曲がる側がへこむのはそこに頂点があるからだ。なので曲がる側に頂点を配置しなければへこむことはなくなる。
これは尻も同じで、尻の分割数を多くして、鼠径部のポリゴンを減らす。
ベベルを使った分割
伸びる側の分割は辺を選択してべベルを使えば楽にできる。べベル中にホイールスクロールでべベル数を変更できる。曲がる側は頂点を選択して GG で辺に沿って頂点を移動。
斜め配置の例
肘側の頂点が移動するのを見越して、関節ポリゴンを斜め配置する方法がある。VRoid がこの方法を採用している(2022年現在)。
外部リンク
前に色々あって消しちゃった奴だけどもう一度投稿。ローポリ関節の基礎的な技法 pic.twitter.com/TlfbC4YqQU
— TAISA@Vket3ネオ渋谷Error (@TAISA_3D) March 19, 2019
— Delaney King ✍🏻👸🏻 (@delaneykingrox) July 18, 2021
メッシュの貫通が前提の場合
メッシュの貫通が前提の場合は、曲がる側の間隔を狭くすることで、沈み込みを低減できる。
曲げたときにできる影はシェーディングで対処する。
外部リンク
Optimizing topology for a game Character: Creating a humanoid game character for animation
GUILTY GEAR Xrd開発スタッフが送るスキニングのためのモデリング TIPS