おさらいも兼ねて
2007年01月12日(Fri)
とりあえずじぇーむずの骨を入れる。

自分はコンフォーム服の胴を捻った時の変形具合に不満を抱いてしまう性質である。手首を返したときに袖まで一緒に回転してしまうのもかなり嫌だと思っている。そんなおまいはコンフォーム服なんか使わずにDCで満足しとけって話だが、まあ折角なのでcr2を弄ってみたり。

裾部分をhip(腰)やabdomen(腹)に割り当てずに、chest(胸)の子階層trunk(胴)としてみた。服の裾をchestの子階層に割り当てるのはBilly-Tさんのジャケットやセーラー服などで使用されている手法だ。ちなみにパーツ名「waist」は、G2フィギュアに使用されているので使用を避けている。
もとのフィギュアに存在しないボーンを使用すると当然abdomenやchestの屈伸には追従しなくなるので、屈伸度合いに応じてtrunkを屈伸させてやらなければならない。

ERCで制御しようかとも思ったが、微調整が効かなくなるのでやめた。まあ、自分で使う分にはマニュアル調整は苦にならないからいいかな、と。
関節パラメータ(JP)設定では、chest-trunk間の設定を調整するだけではなく、abdomenが残っているのならabdomen-chest間の調整も必要だ。なぜならchestは対abdomen間のJP設定で下部(trunkとの継目のあたり)が変形するようになっているからである。新しく追加されたtrunkはabdomenには追従しないので、chest-trunk間の継目で段差が生じてしまう。chestがabdomenの影響を受けないように、影響範囲を調整する。
Poserの関節の変形にはweldとJPが影響する。weldはcr2においてパーツの親子関係の定義の次に記述され、親子間でパーツを接続するかどうかを決定する。

Poserのフィギュアメニューで「パーツ間をなめらかに表示する」がオンになっている場合、パーツはJP設定の通りに変形し、万一weld指定されたパーツ間で共有する頂点が離れてしまった時には、その間を埋めるように面を作成する子側のポイントが親側のポイントの位置に移動する。weld指定されていないパーツ間では隙間が開く。また、weld指定されていても、そのパーツのbend(屈折)がオンになっていない場合は変形もせずパーツ間の面も作成されない。
JPはcr2において各パーツ内の移動・軸回転やモーフと同じくチャンネルの一つであり、内部に球状影響範囲や斜角度傾といった情報を保持し、隣り合うパーツの屈伸によってそのパーツがどのように変形するかを定義している。jointとtwistの2種があり(smoothScaleとかもあるけどここでは無視)、自分の親階層に対してjoint2つとtwist1つ、子階層のパーツ1つにつきjoint2つとtwist1つを持っている。従って手のように多数の子階層を持つパーツでは、jointとtwistのチャンネルが延々並ぶことになる。また、jointとtwistチャンネルはその記述されている順番によってパーツの回転順序を決定する。決定するのは親階層に対するjointとtwistである。親は必ず(しかも一つだけ)存在するが、子は無かったり複数あったりするためだ。
このjointとtwistが存在しないと、パーツを軸回転させても変形しなくなる。逆に言うと、変形しないパート(たとえばジオメトリがshin以下にしかない靴で腰や大腿部のパートなど)には不要なチャンネルであるので、cr2を軽くしたいならザクザク消してしまえばいい。
子パーツに対するJPの内部名と外部名は、通常「子階層のパーツ名_ジョイント名」という規則で命名される。もちろん自分で好きに変更しても問題ないことは、セットアップルームでボーンを作成してみれば明らかである。JPチャンネルで記述されるのは「子階層の屈伸によって子階層自身と親階層がどのように変形するか」であり、対となる親子間で内容は同一である。どのパートが対になっているかは、チャンネル内のotherActorで指定される。
weld指定もJPも親子間の関係を定義するものであるから、ボーンの屈折で形状をなめらかに変形させる(bendさせる)ためには、パートは必ず親階層(と自分の子階層)のみに接していなければならない。孫階層や兄弟階層間ではbendは働かないので、パーツ分けを間違えると屈伸したときに形状が割れてしまうことになる。マニュアルにもしっかり書かれている通りである。
この辺のことは、普段からコンフォーム服を作っている方には当たり前のことだろうけど。まあ、覚書という程度で。
さて。
IKを持つフィギュアでIKをオンにすると、該当パーツの階層は従来の親子関係から切り離され、IK専用の親子関係を持つことになる。これは階層の編集ウィンドウで確認すればすぐにわかる。

ところが、例えば腕のIKをオンにするとHandが独立してBODY直下に移動するのだが、だからといって前腕と手首のbendが無効になるのかというと、そんなことはない。ちゃんとなめらかに屈伸する。
ということは、JP設定はパートの親子関係には依存しないことが推測される。つまり、親子関係にないパート間でも、JPチャンネルさえあればbendすることができるということだ。
というわけでhipにあるThighとのJPチャンネルを、そのままtrunkパートにカット&ペースト。

trunkはchestの子階層で、hipの子階層であるThighとは縁もゆかりもないのだが、きちんと変形していることがわかる。なお、JP調整するにはThigh側のJP内のotherActorを忘れずにtrunkに書き替えておかなければならない。でないと調整後の値が、対であるtrunk側のJPに反映されない。あんまり厳密に検証したわけではないが、多分そんな感じ。
また、JPを他のパートに移し替える場合、貼り付ける位置も重要なようだ。最初適当な位置に貼り付けたら、chest-trunk間のJP設定が飛んでしまった。多分、パート内で「親階層に対するJP」は一番最後に記述しないといけないのではないかと思う。
ん、待てよ。ということは回転順序は、「親階層に対するJP」でなくてただ単に「最後に記述されたJPチャンネル3つの順番」で決定されるんだろうか。
まあいいや、もう調べるの面倒だから次の機会で(笑)
ついでに言えばweld指定も、わざわざツリー階層で別に記述しているあたり、親子間でなくとも有効になるのではないかと踏んでいる。
どなたかの検証結果求ム(笑)
(2007年1月17日一部修正)