LightWaveで二次元キャラ系人物モデリング奮闘記 ―ClothFX編―

最終更新:2016/09/06

現状、スカートは次の画像のようになっている。とりあえず足がスカートを突き抜けたりはしていないけど、足のボーン・ウェイトにスカートを巻き込んで無理矢理変形させているだけなので、不自然さが拭えない。

ClothFX000

解決策はいくつかある。

  1. スカートのみを別のオブジェクトとして分離してポーズに合わせて固定モデリングする方法。
  2. スカート専用のボーンを新たに組み込み、ボーン・ウェイトを適用して変形させる方法。
  3. スカートに物理演算を適用してポーズをとった後の体のラインに半自動的に沿わせる方法。

1.は服のしわなどを緻密に作り込みたい場合に向いているけど、主にフィギュア向けの方法なので、ここでは使わない。2.はローポリゴン・モデルでよく使われている方法だけど、ここでまたボーン・ウェイトを使うのも芸がない。そこで、3.の物理演算を利用してなんとかしてみる。

スカート用オブジェクトの用意

現状では次の画像のように、スカートは体や他の服装と一緒のレイヤーにひとつのオブジェクトとしてまとめられている。

ClothFX001

スカートのみを選択して切り取り、別のレイヤーに保管しておく。仮にもボーン・ウェイトが既に設定してあるものなので、単純に削除してしまうと後でやっぱり必要になったという時にウェイトの設定をやり直さないといけなくなる。

ClothFX002

体をモデリングした時の初期段階のまま放置してあって下着などをちゃんと作ってないので、とりあえず裸に見えないようにサーフェース色を変えてある。直接見えないところは後回しにしていたわけだけど、いい加減このへんの作り込みもしないといけない段階になってきた。

保管したスカートを元にして物理演算用のスカートを加工する。オブジェクトに厚みがあると物理演算の際に色々と大変なので、ウェスト部分を除いて裏地を削除し、両面の1枚ポリゴンにする。両面になっていないと足にスカートの影が落ちないので注意。サブパッチがかかっているので、レイアウトではもっと多ポリゴンのオブジェクトとして扱われる。このスカートのオブジェクトを「ハイポリゴン・スカート」とする。

ClothFX003

ウェスト部分のポイントを選択し、ポイントセットで選択セットを登録しておく。

ClothFX004

セット名は「Skirt_Waist」とした。この選択セットは物理演算の時に動かない箇所を指定するのに用いる。

ClothFX005

更に上で加工したハイポリゴン・スカートを複製してまったく同じ形のスカートを別のレイヤーに作る。この際、必ずサブパッチを解除しておく。これを「ローポリゴン・スカート」とする。

ClothFX006

今回は簡単な形状のスカートだったので、単にサブパッチを解除しただけのものをローポリゴン・スカートとしたけど、大きさが同じであれば、細部は異なっていても問題ない。

ポイントセットを作った後で複製していれば、ローポリゴン・スカートにも同様の選択セットができている。一応、念のため「Skirt_Waist」選択セットで選択できるか確認しておく。

ClothFX007

以上でモデラーでのオブジェクトの用意は終了。ファイルを保存する。

ClothFX単体の設定

まずはハイポリゴン・スカート単体でClothFXを試してみる。レイアウトに移り、0フレームでハイポリゴン・スカートを呼び出す。モーションオプションで指定する親アイテムはRootボーンがいいだろう。Rootボーンの位置がリグの腰コントロールの設定によって原点になっていない場合は、Rootボーンの座標を参考にして体の位置に合うようにスカートの位置を決める。大抵はZ軸座標を足すか引くかすれば体の位置と一致させられるはず。

ClothFX008

次に、体のオブジェクトに衝突判定用の物理演算を追加する。体のアイテムプロパティから「物理演算」タブを選択し、「Collision」を追加する。パラメータは次の画像のとおり。「Radius/Level」をあまり小さくしすぎると衝突判定が起こらずに貫通してしまうこともあるので、適度にマージンを確保しておく。「Bounce/Bind power」は「100%」が基準。スカートが足に当たってゴムボールのように跳ね返るわけではないけど、あまり小さいと足がスカートを貫通しやすくなる。

ClothFX009

ハイポリゴン・スカートにも物理演算を設定する。ここでClothFXを追加する。

「Fix」にスカートの加工で作成したポイントセットを指定する。「Skirt_Waist」ポイントセットがドロップダウンメニューから選択できるようになっているはず。
「Weight」は単純に重量のことでウェイト・マップとは直接関係ない。1.0がデフォルトだけど、衣服に使うような軽い布の場合は「0.1」~「0.3」程度の低めがいいようだ。
「Viscosity」は粘性、「Resistance」は抵抗のことでこれらの値を大きくすると布の変形を遅らせることができるようになるけど、1.0より小さい値にしても変形が早まるわけではなく、むしろ変形が逆流するようになるので「1.0」が最低値と思ったほうがいいようだ。
「Hold Structure」は構造を維持しようとする力、「Sub Structure」は構造を分散させようとする力。説明が難しいけど、「Sub Structure」は「Hold Structure」の範囲内で規則性を乱すといった感じか。「Hold Structure」が高すぎると伸縮性がなくなるので足とスカートの衝突判定に関係なく足がスカートの裾から出てしまいやすくなる。

ClothFX010

各パラメータには「Fx」というドロップダウンメニューがあり、それぞれオブジェクトに設定したウェイト・マップを利用して場所によって強度を調整できるようになっているけど、今回は省略。ClothFXの挙動はただでさえ難解なので、最初は基本設定だけで試してみることをおすすめする。

「Collision」タブはスカート側の衝突判定設定。「Collision Detect」を「<all>」に設定し、「Collision Offset」もやはり適度に確保しておく。「Bound」は「100%」でなくてもいいけど、「0%」にしてもそれほど大きくは変わらない。

ClothFX011

「Advanced」タブはデフォルトのままで変更しない。

ClothFX012

「Etc」タブもデフォルトのままで変更しない。重力の設定は厳密には必要なんだろうけど、ClothFXの利用目的がスカートの型を維持させたいくらいのものであれば特に設定する必要はない。

ClothFX013

最後にハイポリゴン・スカートの「ジオメトリ」タブを選択し、「サブディビジョン手順」を「一番終り」に設定し、「表示サブパッチレベル」が「3」、「レンダーサブパッチ」レベルが「3.0」になっていることを確認する。

ClothFX015

再び「物理演算」タブに戻り、「演算」ボタンをクリックして演算を開始する。サブディビジョンをする前のスカートに対して演算するため、それほど長くはかからないはず。もし、演算に時間がかかりすぎて待ちきれないようなら次節の「FX_MetaLinkを使って演算時間を短縮する」を試す。

演算が終わったら、「Save Motion」で必ずモーションをファイルに保存しておく。これを忘れると、せっかく演算した結果が消えてしまい、フレームをレンダリングしても演算結果が反映されない。

ClothFX014

演算結果を反映したスカートが次の画像。これで特に問題ないならばシーンを保存する。たまたま良好な結果が得られてしまったけど、これでいつもうまくいくとは限らない。

ClothFX016
サブディビジョン手順:一番終り、表示サブパッチレベル:3、レンダーサブパッチレベル:3.0

単体ClothFXの試行

試しに、次の画像のようにハイポリゴン・スカートの「サブディビジョン手順」を「一番初め」に設定して演算してみる。演算時間が非常に長くかかるようになる。

ClothFX017

演算を中断し、大体同じくらいのフレームをレンダリングしてみたのが次の画像。サブディビジョン手順を「一番終り」にしたものと比較すると結果の差は一目瞭然。サブディビジョンが最初に実行されてしまうので、エッジが細かくなることで布として変形できる箇所が多くなり、くしゃくしゃな結果になる。

ClothFX018
サブディビジョン手順:一番初め、表示サブパッチレベル:3、レンダーサブパッチレベル:3.0

物理演算としては正しいのかもしれないけど、いきなり細かい計算が始まるので極端に時間がかかる上に出力も良好でないとなるとサブディビジョンを最初にするのは賢明ではないということになる。

演算時間を短くするには、演算対象のポリゴンの数を減らせばいいんだけど、表示サブパッチレベルとレンダーサブパッチレベルが一致していないと問題が起こることがある。

表示サブパッチレベルを「1」、レンダーサブパッチレベルを「3.0」とし、サブディビジョン手順を「一番初め」にしてみる。

ClothFX019

演算そのものは速くなるし、レイアウトの表示では問題ないように見えるけど、レンダリングすると次の画像のようにスカートの表面がめくれたり逆立ってしまったように大きく乱れてしまい、とてもではないけど見るに堪えないものになってしまう。

ClothFX020
サブディビジョン手順:一番初め、表示サブパッチレベル:1、レンダーサブパッチレベル:3.0

表示サブパッチレベルとレンダーサブパッチレベルは同様で、サブディビジョン手順を「一番終り」にしてみる。

ClothFX021

演算速度は変わらず、次の画像のように表面の処理そのものは改善した。もっとも、だいぶ前に膨らんでしまっていて良好なレンダリング出力とまでは言えない。

ClothFX022
サブディビジョン手順:一番終り、表示サブパッチレベル:1、レンダーサブパッチレベル:3.0

試した範囲ではたまたま許容できるくらいの結果になったけど、表示サブパッチレベルとレンダーサブパッチレベルが一致していないとレンダリングの時に警告が出て演算結果が出力に反映されないことがある。

FX_MetaLinkを使って演算時間を短縮する

ハイポリゴン・スカートだけでは良好な結果が得られなかった場合や、演算時間が許容できないほど長すぎる場合は、ローポリゴン・スカートを併用することでレンダリング出力の改善と演算時間の短縮の両方を図ることができる。この方法は、ClothFXが実装されてさえいればLightWaveのバージョンに関係なく良好な結果を得られる可能性が高い。

まず、ローポリゴン・スカートを呼び出し、ハイポリゴン・スカートと同様にRootボーンを親アイテムに指定する。

ClothFX023

ローポリゴン・スカートのアイテムプロパティを開き、「ジオメトリ」タブを次の画像のように設定する。「SubPatches」の数値が「0」である点に注目してほしい。サブパッチがひとつもないので表示サブパッチレベルとレンダーサブパッチレベルは意味がないように思えるかもしれないけど、ハイポリゴン・スカートのサブパッチレベルと同じかそれ以上のレベルであることが重要。サブディビジョン手順は「一番初め」にしておく。

ClothFX024

ローポリゴン・スカートにサブパッチが適用されていると演算時間は短縮されないし、サブパッチレベルがハイポリゴン・スカートより低いと、次の画像のような陥没が生じることがある。ハイポリゴン・スカートのサブディビジョン手順を「一番終り」に設定しておけば回避できるけど、サブディビジョン手順の初期設定は「一番初め」なので、うっかりするとこのようなミスをしやすい。

ClothFX033
(ローポリゴン・スカート)サブディビジョン手順:一番初め、表示サブパッチレベル:1、レンダーサブパッチレベル:1.0(ハイポリゴン・スカート)サブディビジョン手順:一番初め、表示サブパッチレベル:3、レンダーサブパッチレベル:3.0

ローポリゴン・スカートにClothFXを設定する。ハイポリゴン・スカートにClothFXを設定済みならそれを「File」タブからコピーしてペーストすると簡単に転写できる。「Basic」タブ以外の設定は省略するけど、上で書いた設定と同じ。

ClothFX025

ローポリゴン・スカートは物理演算のためだけに使うので、レンダリング出力に映らないようにScene Editorで「A」欄のチェックを外し、ローポリゴン・スカートそのものをレンダリングの演算対象外にする。

あるいは、次の画像のようにアイテムプロパティの「レンダリング」タブで「オブジェクトディゾルブ」を「100%」、「光線無効」、「カメラ無効」、「ラジオシティ無効」、「フォグ無効」にしておく。光線とカメラが無効なのでそもそも影は生じないから影の設定は任意。

ClothFX026

ハイポリゴン・スカートのモーションオプションで親アイテムをローポリゴン・スカートに指定する。「その場でペアレント(Parent in Place)」がオンになっていれば特に移動させる必要はないはず。

ClothFX027

ハイポリゴン・スカートのアイテムプロパティを開き、「変形」タブで変位プラグインに「FX_MetaLink」を追加する。「プロパティ」かFX_MetaLinkをダブルクリックして「Smoothing」にチェックが入っていれば問題ない。

ClothFX028

FX_MetaLinkは、親に指定したアイテムの変位情報を子アイテムに移し替えるプラグイン。LightWaveには結果の厳格さを求めない代わりに物理演算を簡素化する方法がいくつか用意されている。

ハイポリゴン・スカートの物理演算はすべて削除しておく。

ClothFX029

続けて「現在のオブジェクト」からローポリゴン・スカートを選択し、ClothFXを演算させる。演算が終わったら、「Save Motion」でモーションを必ずファイルに保存しておく。

ClothFX030

ローポリゴン・スカートにはサブパッチが適用されていないため、サブパッチレベルの設定は3ではあるけど実質レベル0と同じなので演算時間を短縮でき、かつハイポリゴン・スカートに適用されたサブパッチにより良好なレンダリング出力を得られる。

ClothFX031
(ローポリゴン・スカート)サブディビジョン手順:一番初め、表示サブパッチレベル:3、レンダーサブパッチレベル:3.0(ハイポリゴン・スカート)サブディビジョン手順:一番終り、表示サブパッチレベル:3、レンダーサブパッチレベル:3.0

途中経過

今回は結構微妙な差なので、比較画像。左がボーン・ウェイトのみ。右がスカートにClothFX使用。歪んでいた裾がだいぶすっきりした。ミニスカートなので特に大きな問題は起きなかったけど、ロングスカートだとどうなるだろうか。

ClothFX032

関連記事

参考記事

LightWaveで二次元キャラ系人物モデリング奮闘記 ―上半身IK編―

最終更新:2016/09/06

上半身のIKを設定する。上半身系のボーン構造は次のとおりになっていることを前提とする。手首から下のボーンは今回のIKには関係ないけど、すべて記載した。

  •  Root
    • Spine
      • Breast
        • Chest_L
          • ChestIK_L(IK用)
            • Upper_Arm_L
              • Lower_Arm_L
                • Wrist_L(IK用)
                  • Hand1_L
                    • Finger11_L
                      • Finger12_L
                  • Hand2_L
                    • Finger21_L
                      • Finger22_L
                        • Finger23_L
                  • Hand3_L
                    • Finger31_L
                      • Finger32_L
                        • Finger33_L
                  • Hand4_L
                    • Finger41_L
                      • Finger42_L
                        • Finger43_L
                  • Hand5_L
                    • Finger51_L
                      • Finger52_L
                        • Finger53_L
        •  Chest_R
          • ChestIK_R(IK用)
            • Upper_Arm_R
              • Lower_Arm_R
                • Wrist_R(IK用)
                  • Hand1_R
                    • Finger11_R
                      • Finger12_R
                  • Hand2_R
                    • Finger21_R
                      • Finger22_R
                        • Finger23_R
                  • Hand3_R
                    • Finger31_R
                      • Finger32_R
                        • Finger33_R
                  • Hand4_R
                    • Finger41_R
                      • Finger42_R
                        • Finger43_R
                  • Hand5_R
                    • Finger51_R
                      • Finger52_R
                        • Finger53_R
        • Neck
          • Head

以下、特に断りがない限り、0フレームで操作する。

左腕IKの設定

腕のIK設定のおおまかな流れは足とほぼ同様で、ゴールオブジェクトになるNullオブジェクトの作成、IK用のボーンからゴールオブジェクトを参照する設定、IKで動くボーンの指定、及びIKが及ぶ範囲の限定という4つの手順からなる。

まず、胸の位置に新しいNullオブジェクト「Breast_Null」を作成する。

IK046

Breast_Nullを下半身IKで作成したWaist_Nullの子オブジェクトにする。

IK047

Altキーを押しながらBreast_Nullを移動させ、Neckボーンの根元にスナップさせる。位置が決まったら、モーションキーを作成しておく。

IK048

左腕ゴールオブジェクト

次に、左肩コントロール用のNullオブジェクトを作成する。名称は「ChestIK_Null_L」とした。腕はX軸方向に伸びているので、向きがわかりやすいように「Axis」を「X」にした。

IK049

ChestIK_Null_LをChestIK_Lボーンの根元にスナップさせ、モーションキーを作成する。

IK050

ChestIK_Lボーンを選択する。IK用のボーンでモデルのボーン・ウェイトに極力影響を与えないように短くしているため少しわかりにくいけど、次の画像の位置にある。

IK051

モーションオプション(Mキー)を開き、「ゴールオブジェクト」をChestIK_Null_Lに指定する。

IK052

「Wrist_Null_L」オブジェクトを作成し、Wrist_Lボーンの根元にスナップさせる。

IK053

Wrist_Lボーンを選択し、モーションオプション(Mキー)で、「ゴールオブジェクト」をWrist_Null_Lに指定する。

IK054

左腕IKの屈伸設定

IKで自動的に屈伸するボーンを指定する。左上腕にあたるUpper_Arm_Lボーンを選択する。

IK055

モーションオプション(Mキー)で「制御と制限」タブを選択し、「ヘディング制御」と「ピッチ制御」を「インバースキネマティクス」に指定する。バンク制御は変更しない。肩関節にあたる部分の設定で、腕の垂直方向に上げ下ろしする方向と、水平方向に広げる方向の両方についてIKを有効にする。

IK056

続けて左下腕にあたるLower_Arm_Lボーンを選択する。

IK057

モーションオプション(Mキー)の「制御と制限」タブで「ピッチ制御」のみを「インバースキネマティクス」に指定する。ヘディング制御及びバンク制御は変更しない。肘は曲がる方向が決まっているので、前後に曲げる方向だけに制限する。

IK058

最後に左肩に相当するChest_Lボーンを選択する。

IK059

モーションオプション(Mキー)で「制御と制限」タブを選択し、「ヘディング制御」と「ピッチ制御」を「インバースキネマティクス」に指定する。バンク制御は変更しない。鎖骨にあたる部分の設定で、腕に連動して肩を動かすことができるようになる他、肩で息をするような肩だけ上下させるような動作が可能になる。

IK060

左腕IKの停止設定

再びChestIK_Lボーンを選択し、モーションオプション(Mキー)で「子孫のIK効果を及ぼさない」にチェックする。これでWrist_Null_Lの移動によるIKの影響範囲は肩までに限定される。

IK061

親子関係の設定

作成したNullオブジェクトに親子関係を結ばせる。次の画像をとおり、Waist_Nullの配下にBreast_Nullを配置し、Breast_Nullの子にChestIK_Null_LとWrist_Null_Lを配置する。

IK062

足と異なるのは、肩と手首のNullオブジェクトに親子関係を結ばせないという点。足の場合は足首に必ず爪先が追随してくることを前提としているけど、手首が必ずしも肩に追随しない設定になっている。

右腕IKの設定

左腕の設定を右腕にも設定する。ChestIK_Null_LとWrist_Null_Lをそれぞれひとつずつ複製(Ctrl+C)し、X座標を反転させて右腕のゴールオブジェクトを作成する。名称をそれぞれChestIK_Null_RとWrist_Null_Rに変更し、モーションキーを作成しておく。

IK063

右腕ゴールオブジェクト

右腕のゴールオブジェクトは未設定なので、ChestIK_LボーンとWrist_Lボーンを選択し、それぞれ次の画像のように複製したNullオブジェクトをゴールオブジェクトに設定する。

IK064
ChestIK_Rボーン
IK065
Wrist_Rボーン

右腕IKの屈伸設定

左腕と同様に右腕の各ボーンにIKで自動的に屈伸する設定をする。

IK066
Upper_Arm_Rボーン
IK067
Lower_Arm_Rボーン
IK068
Chest_Rボーン

右腕IKの停止設定

左腕と同様に、肩関節のボーンにIKの及ぶ範囲を設定する。

IK069
ChestIK_Rボーン

上半身IKのチェック

すべての設定が終わったら、シーンを保存する。Wrist_Null_L又はWrist_Null_Rを選択し、XZ平面方向に動かしてみる。肩を軸にして肘が曲がってくれたら成功。手首のNullオブジェクトの移動につられて肩のボーンも動いてしまう場合は肩のIK停止設定を忘れている可能性が高い。

IK070

チェックが終わったら、フレームを0から1に移し、再び0に戻すとWrist_Null_L/Rは初期位置に戻っている。モーションキー自動作成モードにしていると移動したNullオブジェクトの位置に0フレームのキーが作成されてしまうので、別のフレームでチェックする。

スケマティックビューの整理

オブジェクト本体から読み込まれたボーン構造は、最初はスケマティックビューで一列の直線状に並んでいるので、左右にわけて階層構造がわかりやすいように並べ替えておくと後でモデルに動きをつけたい時にボーンやオブジェクトを視覚的に探すのが容易になる。

IK071

ウェイトの正規化

チェックが済んだら一時退場させていたオブジェクト本体を表示し、0フレーム以外の任意のフレームに移動する。一連の操作で作成した各ゴールオブジェクトを動かすとモデルに様々なポーズをとらせることができるようになっているはずだ。

ただ、肩関節など大きく動く箇所でモデラーのVertex Paintで設定したボーン・ウェイトのとおりに変形してくれないことがある。そういう場合は、対象のボーンのアイテムプロパティを開き、次の画像のように「フォールオフ種」が「反比例 ^ 32」になっているか確認し、「ウェイトのみ使用」と「ウェイト正規化」にチェックを入れると大抵の場合改善する。

IK072

回避方法はあるとしても、レイアウトの独立という特徴を持ちながら、モデラーの設定と同期できていないという難点がある。また、標準機能のボーンを使用していると、リグを途中で変更したくなった時に一度すべてのボーンを入れ換えてから再設定しなければならないという問題もある。これらの問題がLightWaveをアニメーション制作用のツールとしての第一線から遠ざけている要因にもなっている。これらの問題を解決するリグ用ツールとしてLightWave 11からGENOMA/GENOMA2が追加されたけど、実用例が少ない上に、詳細に解説した書籍がないため、一般に広く知られた機能とまでは言い難い。

途中経過

IKの効果を端的に示しているかどうかは微妙だけど、背骨にもIKを組み込み、胸を反らした姿勢ができるようになった。また、腰コントロールにより足にポーズをつけても地面との距離の調整が容易になった。今までは何もない空白の空間に立たせていたけど、地面と背景に相当するオブジェクトを追加してみた。足下に影が落ちてようやくCGらしくなってきた。

IK073

補足

今回のIKでは指に関する設定をしていない。指は関節が集中する箇所なので、5本の指にそれぞれIKを設定すれば指先のゴールオブジェクトを動かすだけで良くなり、キーフレームの操作が楽になるだろうと考えるのが人情というもの。しかし、指の関節は他の指の動きによっても動きを制限されたり、力の入れ具合によってはすべての関節が均等に曲がるとは限らないため、IKに適さないことが多い。もちろん、目的によりけりの部分も大いにあるため、アニメーションを作る上で指の動きが大きなウェイトを占めるのであれば、指のモーションの効率化が課題になるので指のIK設定に挑戦してみてもいいかもしれない。

それから、背骨に関するIKの設定もしていない。Breast_Nullオブジェクトはゴールオブジェクトに指定されていないため、上半身をWaist_Nullに追従させることと両肩をリンクさせて同時に動かすためだけにしか使われていない。背骨にもIKを設定すればBreast_Nullをゴールオブジェクトとして胸を反らしたり前屈みの姿勢をとらせることもできるようになる。

手順は多いけど、ボーン単位でテクニカルに設定できるので、一度慣れてしまえばボーン・ウェイトをポリゴン単位で緻密に設定するよりは精神的疲労は少ない。惜しむらくは片側の設定を反対に対称コピーする方法がLightWave標準機能にはないことくらいか。各関節の可動角度の制限も特にしていないので、あまり極端なポーズをとらせると関節が逆に曲がることもあり、これでも必要最小限。

もちろん、IKにも欠点はある。FKは特に何も設定しなくてもモデルをとりあえず動かすことができるのに対し、あらかじめIKを使う設定を一定の手続きに従って済ませておかなければならないし、上位階層の構造が制作者の思ったように動いてくれないケースもある。

IKを設定したからといって万全というわけでもなく、膝を外に向けて歩く「がに股」歩行やバトルシーンのような大胆なアクションには対応できないこともある。爪先のゴールオブジェクトが邪魔に思えることもあるだろう。リギングのみを専門に担当するエンジニアがいると言われるくらいなので、目的に応じたIKの設定が必要になるわけだけど、基礎さえおさえておけば工夫のしようもある。LightWaveではIKで実現できない部分にFKをブレンドすることもできるけど、高度なのでここでは割愛する。

そういった短所があるとしても、部分的にでもIKを取り入れると後の作業効率は劇的に改善する。

関連記事

LightWaveで二次元キャラ系人物モデリング奮闘記 ―下半身IK編―

最終更新:2016/09/12

次はレイアウトに移っていよいよIKを設定する。一般には略してIKと呼ばれるけど、正式にはインバース・キネマティクス(Inverse Kinematics)と言い、関節等によって多重階層構造を持つモデルの末端部分の位置を先に決めることによってその上位階層の要素の位置を逆算的に求める技法。

普通、階層構造を持っているモデルの場合は上位の要素から順に位置を決めていかないと末端要素の位置は決まらないものなんだけど、例えば人間の足のように全長が決まっていて基本的に伸び縮みしないものである場合、目測を誤ると足が宙に浮いてしまったり、逆に地面に埋まってしまったりといった事態が起こる。すると、上位階層に戻って調整をやり直すことになり、単に歩くだけの動作ひとつにも非常に手間がかかる。

上位階層から順に位置を決めていく方法をIKに対してFK(Forward Kinematics)と言う。FKはアクション・フィギュアのような人形や人型ロボットのプラモデルにポーズをとらせる時に手足の関節を上から順に曲げていく感覚に近い。ただし、CGの世界には物理演算を使わない限り重力がないため、重心の位置や左右の荷重バランスをとらなくても立ってしまい、作品として捉えた時に違和感のないポーズをとらせるのが逆に難しい。

一方、実際の人間は自分の手を差しだそうとした場合や、足を一歩踏み出そうとした場合に、手や足の未来位置を意識することはあっても、その時に肩、肘、股や膝の関節をどのくらい曲げようかということまでは通常意識しない。IKは「足を持ち上げて50cm前へ進ませる」といった人間にとっては当たり前の動作を上位階層を必要以上に意識せずに実現するものだと思ってもらえれば一番わかりやすい。動画などで反復運動が多い作品を作る際に非常に役立つものだけど、静止画の場合でも有用なことが多い。

準備と前提

IK000前置きはこのくらいにして、レイアウトを起動する。まず最初に、「その場でペアレント(Parent in Place)」がオンになっているかどうかを確認する。オフになっている場合はボタンをクリックし、トグルしてオンにしておく。

これがオンになっていないと、2つのオブジェクトに親子関係を結ばせた時に親オブジェクトの座標を基準とした相対座標が計算されず、子オブジェクトの絶対座標がそのまま相対座標に代入されるため、子オブジェクトの位置が動いて定まらなくなってしまう。親子双方のオブジェクトが原点から離れている場合、子オブジェクトが画面外へ飛んでいってしまうこともあるので、親子関係を設定したと同時にオブジェクトの挙動がおかしくなったらまずこの設定を疑う。

また、普段からモーションキーを手動で作成するのを習慣にしているため、新しいオブジェクトを配置するたびにモーションキーを作成している。自動作成モードにすればモーションキーを作成する煩わしさから解放されるけど、常に自動にしているとモーションキーのことを意識しなくなることがあるので要注意。不自然な動きをする時はキーを手動で作成し直すとオブジェクトの挙動が改善することがある。

なお、記述が煩雑になるのを防ぐため、下半身系のボーン構造は次のとおりになっていることを前提とする。

  • Root
    • Hip
      • Coxa_L
        • Upper_Leg_L
          • Lower_Leg_L
            • Ankle_L(IK用)
              • Foot_L
                • Toe_L
                  • FootIK_L(IK用)
      • Coxa_R
        • Upper_Leg_R
          • Lower_Leg_R
            • Ankle_R(IK用)
              • Foot_R
                • Toe_R
                  • FootIK_R(IK用)

以下、特に断りがない限り、0フレームで操作する。

スケルゴンからボーンへの変換

モデラーでスケルゴンとしてボーンを組み込み、ボーン・ウェイトを設定したオブジェクト本体を呼び出す。体や髪の毛はもちろん、服装も含むオブジェクトのすべての構成要素がひとつのレイヤーにまとめられていて、更にボーンも同一レイヤーに組み込まれていることが前提。

IK001

オブジェクト本体のプロパティを開き、「表示サブパッチレベル」を「1」又は「0」にする。マシンパワーに余裕のあるPCの場合は「3」のままでも問題ないけど、ボーンの旋回などの結果が反映されるまでに時間がかかるので、表示品質は落ちるけど表示サブパッチレベルは下げておいたほうが能率は良くなる。「サブディビジョン手順」は「一番終り」に設定する。サブディビジョン手順をボーンによる変形などの後にすることによって、まっすぐなストローを無理に折り曲げた時のような関節の潰れを防止できる。

IK002

オブジェクトを選択した状態で、「ユーティリティ」メニューグループからプラグインを選択し、「SkelegonReader」を選択する。普通は「スケルゴン変換」を使うんだけど、ボーンを組んだ時にスケルゴンエディターでバンクをZ軸方向に揃えた操作が反映されないため、SkelegonReaderを使う。

IK003

次の画像のようなダイアログが表示されるけど、「Yes」で問題ない。

IK004

ボーンがオブジェクト本体に完全に埋まっている場合は見た目にはわかりにくいかもしれないけど、組み込まれたボーンはモデラーで組んだ階層構造のとおりにすべてオブジェクト本体の配下に設定されている。

IK005

ボーンが読み込まれたら、オブジェクト本体は一時的に必要なくなるので、Scene Editorを使ってオブジェクト本体を「Hidden」に設定して、レイアウト画面に表示されないようにする。

腰コントロールの設定

次に、すべてのオブジェクトの頂点に位置する最初のNullオブジェクトを作成する。「アイテム」メニューグループの「追加」から「Null」を選択する。名称はなんでもいいけど、「TOP_Null」とした。「Shape」は「Ring」、「Axis」は「Y」に設定する。「Scale」はモデルの大きさに対して見やすい大きさにしておく。後でアイテムプロパティの「ジオメトリ」で変更することもできるので、間違ってデフォルト設定で作成してしまっても削除してやり直す必要はない。

IK007

次の画像のように足下にNullオブジェクトが作られた。

IK006

作成したNullオブジェクトをひとつ複製(Ctrl+C)し、名称を変更する。腰の高さに設定するものなので、「Waist_Null」とした。

IK008

Rootボーンを選択し、Y座標をコピーする。コピーした座標をWaist_NullのY座標にペーストする。次の画像はRootボーンを横から見た図。

IK009

Waist_NullがRootボーンと同じ高さになったら、Enterキーを何回か押し、モーションキーを作成する。更に、RootボーンのZ座標をコピーし、同様にWaist_NullのZ座標に貼り付ける。再度モーションキーを作成するのを忘れずに。

IK010

モーションキーを自動作成モードにしている場合は逐一キーを作成する必要はないけど、何か操作する度に勝手にキーが作られてしまうので、操作すべきフレームを間違えた時にキーを削除しなければならず、どちらが便利とは一概には言い難い。

Waist_Nullの座標が決まると、次の画像のようになっている。

IK011

再びRootボーンを選択し、モーションオプション(Mキー)を開く。「モディファイヤ追加」をクリックし、ドロップダウンメニューから「Follower」を選択する。追加できたら、名称欄を右クリックして「プロパティ」を選択する。

IK012

Followerコントロールを開くと、次の画像のように表示される。

IK013

「After IK」のチェックを外し、「Item to Follow」に「Waist_Null」を指定する。また、Z PositionにRootボーンのZ座標を入力する。左下に表示されているので、それをそのまま入力すればいい。メートル単位なので、600mmならば「0.6」と入力する。回転角度やスケールの設定は三角をクリックし、「(none)」を選択して無効にしておく。

IK014

「続行」をクリックすると、RootボーンはWaist_Nullの動きに追随するようになる。

左足IKの設定

足のIK設定のおおまかな流れは、ゴールオブジェクトになるNullオブジェクトの作成、IK用のボーンからゴールオブジェクトを参照する設定、IKで動くボーンの指定、及びIKが及ぶ範囲の限定という4つの手順からなる。

左足ゴールオブジェクト

まず、ゴールオブジェクトになるNullオブジェクトを追加する。くるぶしに当たる箇所に使うので、名称は「AnkleIK_Null_L」とした。形状は「Ball」にしたけど、好みで変更して構わない。後で選択しやすいように大きさは足の幅よりも大きくなるようにする。

IK015

原点に作成されたAnkleIK_Null_LをAnkle_Lボーンの根元に配置する。矢印を掴むとひとつの軸方向にしか動かせなくなってしまうので、中間の円弧あたりをAltキーを押しながら掴み、ボーンの根元にスナップさせる。Ankle_Lボーンは短いので、根元にスナップできているかわかりづらい時は拡大して確認する。位置が決まったらモーションキーを作成する。

IK016

同様にして「FootIK_Null_L」オブジェクトを作成し、Altキーを押しながらFootIK_Lボーンの根元にスナップさせる。しつこいようだけど、モーションキーも忘れずに作成する。

IK017

Ankle_Lボーンを選択し、モーションオプション(Mキー)を開く。「ゴールオブジェクト」に先ほど作成したAnkleIK_Null_Lを指定する。

IK018

同様にFootIK_Lボーンを選択し、モーションオプション(Mキー)で「ゴールオブジェクト」をFootIK_Null_Lに指定する。

IK019

左足IKの屈伸設定

次に、IKで自動的に屈伸するボーンを指定する。太ももにあたるUpper_Leg_Lボーンを選択する。

IK021

モーションオプション(Mキー)で「制御と制限」タブを選択し、「ヘディング制御」と「ピッチ制御」を「インバースキネマティクス」に指定する。バンク制御は変更しない。股関節にあたる部分の設定で、足を前後に持ち上げる方向と、足を左右に広げる方向の両方についてIKを有効にする。

IK020

続けてふくらはぎ又は脛にあたるLower_Leg_Lボーンを選択する。

IK023

モーションオプション(Mキー)の「制御と制限」タブで「ピッチ制御」のみを「インバースキネマティクス」に指定する。ヘディング制御及びバンク制御は変更しない。膝は曲がる方向が決まっているので、前後に曲げる方向だけに制限する。

IK022

足首から下にもIKを設定する。足首から下の足にあたるFoot_Lボーンを選択する。

IK025

モーションオプション(Mキー)の「制御と制限」タブで「ピッチ制御」のみを「インバースキネマティクス」に指定する。ヘディング制御及びバンク制御は変更しないけど、ピッチ制御だけだと足首は曲げ伸ばしの方向にだけしかIKが効かないことになるため、足を大きく投げ出すようなダイナミックなポーズをとらせたい場合などはヘディング制御にもIKを有効にしておく。

IK024

爪先にあたるToe_Lボーンを選択する。

IK027

モーションオプション(Mキー)の「制御と制限」タブで「ピッチ制御」のみを「インバースキネマティクス」に指定する。ヘディング制御及びバンク制御は変更しない。

IK026

左足IKの停止設定

太もものUpper_Leg_Lボーンの更に上位に位置する、腰骨にあたるCoxa_Lボーンを選択する。モーションオプション(Mキー)で「子孫のIK効果を及ぼさない」にチェックする。これは、IKによる足の屈伸が腰から上のボーンに影響を及ぼさないようにするための設定。IKでは「IKによる自動変形をどこで止めるか」という情報が必要になる。言い換えると、IKの固定軸をどこにするかの指定ということになる。

IK028

再びAnkle_Lボーンを選択し、モーションオプション(Mキー)で「子孫のIK効果を及ぼさない」にチェックする。

IK029

親子関係の設定

作成したNullオブジェクトに親子関係を結ばせる。TOP_Nullの配下にWaist_Null、ボーンを含むオブジェクト本体、AnkleIK_Null_Lを配置し、AnkleIK_Null_Lの子にFootIK_Null_Lを配置する。次の画像を見てもらったほうが早いだろう。

IK030

オブジェクトの親子関係の設定にはScene Editorを使うと簡単だけど、うっかり既存の親子関係を壊してしまうと修復に苦労することにもなりかねないため一長一短。モーションオプションの「親アイテム」でも設定できるので、数が少ない場合はこちらを利用したほうが間違いが少なく、結果的に早い場合もある。

IK031

これまでは各Nullオブジェクトが独立していたので何の効果もなかったけど、親子関係を結ばせることにより、TOP_Nullを動かせば全体が移動するし、Waist_Nullを動かせばTOP_Nullに重心は拘束されるもののAnkleIK_Null_Lによって足を地面方向に拘束させて胴体を動かせるようになる。

右足IKの設定

左足の設定を右足にも設定する。AnkleIK_Null_Lを選択し、「階層の複製(Clone Hierarchy)」でFootIK_Null_Lと一緒に複製する。

IK032

TOP_Nullとの親子関係は維持されるので、Scene Editorで確認するだけでいい。

IK033

「AnkleIK_Null_L (2)」と「FootIK_Null_L (2)」をそれぞれ「AnkleIK_Null_R」と「FootIK_Null_R」に名称を変更し、AnkleIK_Null_RのX座標を正負反転させると右足のボーンの上に配置されるので、モーションキーを作成しておく。

IK034

右足ゴールオブジェクト

右足のゴールオブジェクトは未設定なので、複製したNullオブジェクトをゴールオブジェクトに設定する。

IK035
Ankle_Rボーン
IK036
FootIK_Rボーン

右足IKの屈伸設定

左足と同様に右足の各ボーンにIKで自動的に屈伸する設定をする。

IK037
Upper_Leg_Rボーン
IK038
Lower_Leg_Rボーン
IK039
Foot_Rボーン
IK040
Toe_Rボーン

右足IKの停止設定

左足と同様に、股関節と足首のボーンにIKの及ぶ範囲を設定する。

IK041
Coxa_Rボーン
IK042
Ankle_Rボーン

下半身IKのチェック

すべての設定が終わったら、シーンを保存する。Waist_Nullを選択し、Y軸方向に動かしてみる。マイナス方向に動かすと足首の位置はほぼそのままに腰を落とし、膝を曲げてしゃがむような姿勢になる。この時点で足を構成するボーン群の動きが左右で食い違っていたり、膝が逆に曲がったり、爪先の方向がおかしかったりした場合はIKの設定をどこか忘れている可能性が高い。

IK043

Waist_NullをY軸プラス方向に動かすと足を伸ばし、爪先を下に向けてジャンプする。足首と爪先のボーンはゴールオブジェクトのほうを常に向いているけど接着はしていないので、ゴールオブジェクトを離れることができる。MMDで人物オブジェクトが基幹ボーンをY軸方向に動かすだけでジャンプできたりするのもこれと原理は同じ。

IK044

チェックが終わったら、フレームを0から1に移し、再び0に戻すとWaist_Nullは初期位置に戻っている。モーションキー自動作成モードにしていると移動したWaist_Nullの位置に0フレームのキーが作成されてしまうので、別のフレームでチェックする。

途中経過

下半身IK設定完了。下半身のIKが設定されているだけでもポーズはとりやすくなるし、歩行アニメーションを作る時に足が地面から離れないように腰の高さを調節することもできるようになる。

IK045

関連記事

LightWaveで二次元キャラ系人物モデリング奮闘記 ―UV編―

最終更新:2016/10/09

ボーン・ウェイトの設定が終わったので、次はIKの設定なんだけど、レイアウトに移る前にLightWaveにおけるUV展開について簡単にまとめておこうと思う。普通はUV展開後、テクスチャを用意してからリギングをするものなんだろうけど、動くかどうかわからないモデルに一生懸命テクスチャを塗っても意味がないのでIK以外のリギングを先に済ませておいた。

UV展開

LightWave標準機能にもUV展開用のツールが備えられているんだけど、平面状、円柱状、球状、アトラスの4種類からしか選べなくて、人物モデルのような複雑な形状のUV展開には向いていない。もっと言ってしまうと、その4種類しかないのであれば、UVマップである意義はあまりない。ただ、平面状であってもUVを使用するとバンプ・マップやノーマル・マップの凹凸がはっきり出るようになるので無意味とまでは言わないけど、必要性はかなり薄い。

そこで、フリーソフトウェアのLightWaveモデラー用プラグインplg_Make_UV_Editを使用する。LightWave関連書籍には大抵使い方が載っているLWユーザー必携のプラグインのひとつ。WEBサイトからプラグインのZIPファイルをダウンロードして解凍し、適当なプラグインフォルダにコピーしてモデラーに読み込ませる。x64ベースのWindowsでは動作を確認していないそうだけど、64bit版のLightWave 10で特に問題なく動作している。

本当はモデル全体のUVを展開する必要があるんだけど、ひとまず例として次の画像のジャケットのUVを展開してみる。

UV000

UVを分割する境界線をエッジで選択していくので、サブパッチはいったん解除しておいたほうが作業しやすい。図解のためにワイヤーフレームにしているけど、エッジの位置が確認しやすいものであればビューモードはなんでもいい。

UV001

plg_Make_UV_Editを起動し、次の画像の数値入力ウィンドウでUVマップ名を決めたらマップを分割するエッジを選択していく。Ctrlキーを押しながら選択すると最後に選択したエッジから最短距離の連続したエッジが選ばれるので、ポリゴン数が多い場合は幾分省力化できる。

UV003

どのように区切ったらテクスチャを塗りやすいかを考えながらエッジを選択していく必要があるんだけど、できるだけUVの分割線を目立たないところに設定しておくとテクスチャを描くときに継ぎ目の調整に苦労しなくて済む。テクスチャ・ペイント(3Dペイントとかポリペイントとか呼び方は様々)ができるソフトウェアを持っている場合は継ぎ目のことはあまり考えなくてもいいんだけど、UV展開をソフトウェア任せにしていると必要以上に細切れにされてしまい、テクスチャのどの部分がモデルのどこに相当するのかわからなくなり、画像編集ソフトウェアでの微調整ができなくなる恐れがあるので、一度は自分で工夫しながらUV展開する経験をしておくのをおすすめする。

UV分割があまりに大雑把すぎても、逆に細分化しすぎてもテクスチャを塗りにくくなるので、どんなテクスチャが必要なのか事前にイメージしておくことが重要になる。最初は加減がわからないと思うので、ざっくり前後に区切ってどのようにUV展開されるのか確認しながら分割するエッジを変更したり増やしたりしていってもいいと思う。展開時に無理があるところはプラグインが適当に補間してくれるので、すべての分割エッジが一筆書きのように連続している必要はないけど、エッジ選択をひとつ増減しただけでUV展開図が大きく変わることもある。

UV002

何かの拍子に選択したエッジがすべて解除されてしまうことがあるので、選択したエッジが複雑になってきたら適当なところで「Save Edge」でエッジ・データを保存しておく。

LightWave 11.5からようやく標準でもUVアンラップ機能が追加されたけど、ポリゴンの「パーツ」やポイントの「ポイントセット(選択セット)」のように過去に選択したエッジをまとめて保存しておく方法がなく、どこのエッジでUVを切り分けたのかを記憶しておいてくれないので、LightWave 7.5の時代に作られたplg_Make_UV_Editのほうがまだアドバンテージがある。

モデリング中のエッジ選択の方法とは異なり、選択判定が結構シビアでエッジの中央付近を正確にクリックしないと選択されないので、選択しにくい場合は、数値入力ウィンドウの「Hide Handle」のチェックを外してハンドルを表示させるとどこをクリックすればいいのかわかりやすくなる。次の画像のような静止画だと表示がゴチャゴチャしてかえってわかりづらくなっているように見えるかもしれないけど、プレビューを回しながら見てみるとハンドルがあるのとないのとでは相当違う。

UV004

また、「Ignore Backface」のチェックを外すと表側に見えていないエッジも選択できるようになるので、裏手に回り込んでいて選択しにくいエッジを選択したい場合などその都度使い分ける。

UV005

エッジの選択が終わったら、念のためエッジ・データを保存し、「Make UV」をクリックすると次の画像のようにUVが展開される。塗り分けテストのためにジャケットの本体部分と肩の部分を別のサーフェースにしていて、「Divide by Surface」を選択していたので、次の画像のようにジャケット本体から肩と襟がバラバラに展開されてしまった。

UV006

これではテクスチャを塗る時に都合が悪いので、肩のサーフェースをジャケット本体のサーフェースに統一し、再度「Make UV」すると次の画像のように展開された。肩とジャケット本体がつながっているのがわかる。「Divide by Surface」のチェックを外してもいいんだけど、それはそれで別の問題が起きることがあるので、モデルの都合で判断する。

UV007

このように、展開図が気に入らなかった時に何度でもUV展開をやり直すことができるので、plg_Make_UV_Editは非常に便利。エッジ・データさえ残っていれば、テクスチャを描いていて不具合に気付いた時にUV展開からやり直すこともできる。

現状ではUVマップに余白が多い。この余白を有効利用したい場合は、plg_Make_UV_Editと制作者が同じplg_Pack_UV_Chartプラグインで再パッキングできる。UVマップはモデルのジオメトリをUV平面に投影したものだけど、三次元空間とは独立した概念なので、UVマップ内にあるポイントを動かしてもモデルの形状には影響しない。最初は理解に苦しむかもしれないけど、色々試してみて少しずつ体感として理解していってもらうより他にない。

また、テクスチャを塗る時にポリゴンが左右対称、上下対称や直線状に並んでいたほうが何かと都合がいいので、あらかじめUVマップを整然と整列させておくという作成スタイルもある。ただ、テクスチャ作成が楽になる代わりに最終的にポリゴンに貼り付けた時に実際のジオメトリに合わせてテクスチャの伸縮が起こるので、文字や記号など模様に意味のあるものについては判読できなくなる可能性がある。

文字や記号の可読性とテクスチャ作成の簡略化を両立させることもできるけど、UVの特性を把握した上で、市松模様や水玉模様の歪み調整用のテクスチャを別に用意してテクスチャの歪みを丹念に修正しなければならないため、技術的にはむしろ高度になる。

今回はそれほど難しいテクスチャを作成する予定がないので、パッキングとUV編集は省略する。所望のUVマップが得られたら、Enterキーを押すか、plg_Make_UV_Editを割り当てたメニューボタンをクリックして編集モードを終了してUVマップを確定し、オブジェクトファイルを保存する。

テクスチャを描く

UVマップができあがったら、画像データに出力して画像編集ツールでテクスチャを描くんだけど、その画像出力でつまづき、結構悩んだ。LightWave 10からUVマップ(厳密には三面図のワイヤーフレームも含めて全部)をEPS形式で出力できるようになっている。「ファイル」メニューから「出力」を選ぶとEPSファイルにエクスポートできる。

UV008

次の画像のようなEPS出力ダイアログの「View」を目的のUVマップに設定し、ページサイズを選択する。インチスケールなので面食らうかもしれないけど、300dpi固定の解像度で出力されるので、デフォルトの6インチ四方だと1800×1800ピクセルの画像になって出力される。「Draw Grid」はグリッドを出力画像に埋め込むためのもので、必要に応じて指定する。「Draw Points」はよほど特殊な用途でない限り使う機会がない。

UV009

EPS形式はポストスクリプトに基づく画像形式なんだけど、ポストスクリプトの権利をアドビシステムズが保有していることもあり、対応している画像編集ソフトウェアが限られていて、メジャーなところではAdobe PhotoshopかIllustratorくらいしかない。GIMP2も一応ファイル形式の名前だけは表示されるけど、どういうわけか、正しく読み込まれない。

Illustratorの場合はUVマップがベクター画像として解釈されるので拡大縮小に強くなるという利点があるけど、ページのサイズは考慮されないので、上のダイアログでグリッドを出力しておかないと余白も含めたUVマップにピッタリ合う正方形の画像に形成するのでさえ負担になる。

ここでは、オーソドックスにPhotoshopでの編集方法を書いていく。PhotoshopでEPS形式ファイルを開こうとすると、次の画像のようなダイアログが表示される。6インチ四方、300dpiなので1800×1800pxのサイズになっている。これで特に問題なければ、「OK」を押すとラスタライズされる。アンチエイリアスはお好みで。マスクなどに自動選択ツールを使いたい場合はアンチエイリアスしないほうがいい場合もある。

UV010

ラスタライズが完了すると次の画像のようにUVマップがPhotoshopに表示される。これにレイヤーを重ねてUVマップをアタリにしてテクスチャを塗っていく。UVマップがラスタライズされたレイヤーは誤って編集してしまわないようにロックしておくのが無難。

Photoshopの場合はページサイズの設定や画像の位置調整が必要なく、すぐに描き始められるのが長所なんだけど、ラスター画像なのでPhotoshopをそれなりに使いこなす二次元作画スキルが必要になる。もっとも、最近のPhotoshopはスマートオブジェクト化が進んでいるので、幾何学的模様を任意の時点でパスによって変形・編集でき、さながらベクター画像のように作画することもできるようになっていて、Illustratorとの境目が曖昧になりつつある。

UV011

ひとまず、何も塗らずにPNG画像に出力してジャケットに合わせてみる。色・質感編集(Surface Editor)からジャケットのサーフェースを選択し、「色」設定の「T」ボタンをクリックしてテクスチャ設定画面を開く(テクスチャを完全に削除したい場合はShiftキーを押しながら「T」ボタンをクリックする)。

レイヤー種に「画像マップ」を選択し、投影は「UV」、UVマップは作成したUVマップ名、画像はPhotoshopで出力したPNG画像を指定する。なお、透過PNGを指定することもできるので、透明ピクセルに相当する箇所はサーフェース色か直下に位置するレイヤーが透けて見える。

UV019

「テクスチャ使用」をクリックするとモデルにテクスチャが貼り付けられる。次の画像のとおり位置はピッタリ合っているのは確認できた。ただ、サブパッチの都合で肩の部分が歪んでいるので、UVマップのポリゴン境界のとおりにテクスチャを塗ったとしても肩の塗り分けは綺麗にできないことが予想される。

UV012

とは言え、サブパッチによる歪みを計算に入れてテクスチャを描くのは困難なので、Photoshopでは素直にUVマップのポリゴン境界に沿ってテクスチャを作成していく。主に肩の塗り分けと、前に垂れている襟の輪郭の塗り分け、ジャケットの合わせ部分の装飾と裾の塗り分けをしている。ほとんどベタ塗りだし、テクスチャの描き方はそれこそ千差万別なので細かい描き方は省略する。

UV013

UVマップの境界線から余白にはみ出している箇所は無視され、モデルの表面には反映されないので境界線ギリギリに塗って継ぎ目にサーフェース色が一部残ってしまったりするよりは若干はみ出すくらいがちょうどいい。必要最低限の塗り分けが終わったら、UVマップのレイヤーを非表示にし、PNG画像に出力する。

LightWaveに戻り、着色前のテクスチャを着色済みのテクスチャに差し替える。前の画像に上書き出力して「画像編集」から再読み込みしてもいい。

UV020

歪みの修正

UVマップのポリゴン境界線に沿って色を塗ったので、サブパッチの影響により次の画像のように色の境目が歪んでいる。着色前のマップで予想できていたし、ある程度はやむを得ないんだけど、このままではさすがに目立つし格好悪いので、放置するわけにもいかない。良い方法か悪い方法かは別にして、テクスチャではなくUVマップを編集して歪みを修正する。

UV021

UVマップにテクスチャ画像を重ね、ポイントを選択して青色に塗られている方へ移動させる。ポイントの移動に従って色の境界が前方に動いていくのがわかるはず。

UV022

近傍のポイントも移動させて青色の面積をやや拡大させながら色の境目の歪みが許容できるくらいになるまで調整する。左肩が終わったら、右肩も同様に修正する。こういう時にUVマップを左右(上下)対称に整列させてあるとポイントの移動量は単純に正負を反転するだけでいいので、どちらへ移動させればいいのか悩まなくて済む。今回は対象が片側4ポイント程度だったので軽微な調整で済んだけど、事前のUVの整理にかける労力と天秤にかけてどちらが気楽かその都度判断する。

UV023

UVマップによるテクスチャの貼り付けが終わり、歪みの修正も済んだのが次の画像。ようやくジャケットらしくなってきた。

UV014

古典的なテクスチャ画像作成法

EPS形式の画像ファイルを読み込めるソフトウェアを持っていない場合や、どうしてもベクター画像で幾何学的にテクスチャを描きたいことがある。そういう場合は、LightWave 9.6以前から使われてきた古典的な方法でUVマップからテクスチャ画像を作成する。

まず、UVマップを表示しているビューの右上の最大化ボタン(虫眼鏡ボタンの右隣り)をクリックし、UVマップをディスプレイの解像度の許す限り大きく表示させる。

UV015

Alt+PrintScreenキー(F12キーの隣り)でウィンドウ全体のスクリーン・ショットを撮り、GIMPなどの画像編集ソフトウェアに貼り付ける。UVマップいっぱいで正方形にトリミングし、画像サイズを計測する。上の画像の場合は、984×984pxだった。トリミング後の画像をPNGなど圧縮で画質が劣化しない画像形式で保存する。

UV016

次に、Inkscapeを起動し、ドキュメントのプロパティを開く。ページのサイズをスクリーン・ショットと同じ984×984pxに設定し、トリミングしたUVマップ画像をインポートする。

UV018

インポートした画像はひとつのオブジェクトとして扱われるので、X座標とY座標をともに0に設定するとページの左上隅ピッタリに合わせられ、ページサイズとも一致させられる。

UV017

スクリーン・ショットの色が濃い場合は、当該オブジェクトを選択した状態で左下の「O:」(Opacity)の数値を下げてオブジェクトの不透明度を下げる。スクリーン・ショットを置いたレイヤーは間違って編集しないようにロックし、新しいレイヤーを用意してそこにテクスチャを描いていく。テクスチャ画像をビットマップに出力する際にはスクリーン・ショットのレイヤーを非表示にすればいい。

スクリーン・ショットを土台にするなんて、すごく大雑把な方法に思えるかもしれないけど、LightWaveではなかば公式に利用されてきた伝統的な方法なので、結構正確にマッピングできる。

この方法に限ったことではないけど、UVマッピングは厳格な位置やサイズの調整が必要なマッピングにはあまり向いていないので(UVを綿密に設計すれば不可能ではないけど)、別のマッピング方法を試すか、LightWaveではメモリの許す限りいくつでもUVマップを作れるので新しいUVマップを用意してそちらを使用してレイヤーを複数重ねるかを選ぶことになる。

途中経過

取り急ぎ、無地のままでUV展開が必要だったジャケットだけテクスチャを作成した。二次元イラスト風にしたい場合はレイトレースやシェーディングに頼らずに影なども直接テクスチャに描き込んでしまうのが定石になっているけど、それは最後の手段に残しておいて、LightWaveならではのアプローチで非写実的出力を目指す。

UV024

関連記事

参考記事

LightWaveで二次元キャラ系人物モデリング奮闘記 ―ボーンウェイト編―

最終更新:2016/09/06

ウェイト・マップと一口に言っても用途は多岐にわたるので、ボーンが移動又は旋回することによってモデルが変形する影響範囲を決めるウェイト・マップをボーン・ウェイトと呼ぶことにする。

ウェイトの設定には「マップ」メニューグループにあるVertex Paintを使用する。簡単なウェイト・マップの設定の場合は同じグループのエアブラシツールやMAP値指定などを使用して設定していくこともできるんだけど、それらのツールは結果がプレビューに反映されるまでに時間がかかり、関節が多く多数のボーン・ウェイトを調整しなければならない人物モデルの場合は作業効率が悪く、微調整くらいにしか使えない。

Vertex PaintがあるおかげでLightWaveはなんとか実用的な3DCGソフトウェアとしての地位を保っていられると言っても過言ではない。古いLightWaveではボーンの組み込みはレイアウトで一発勝負だったため、左右の足のボーンの影響範囲がお互いに干渉し合わないように保険をかける意味で大の字型に人物モデルを作らなければならなかったりなど、今では笑ってしまうような苦労が多かった。

もっとも、そのVertex Paintも動作を軽くするためにサブパッチを適用した状態での表示ができず、厳密を期そうとすればするほど熟練を必要とし、最後にはやはり勘に頼らざるを得ないところが欠点と言えば欠点。サブパッチ適用後の状態を想像しつつトライ・アンド・エラーで補うより他にない。それでも、Vertex Paintがなかった頃よりはセットアップは遥かに楽になった。

ボーン・ウェイトの自動算出

何はともあれVertex Paintを起動する。表示モードは「Weight Value」にし、「Weight」タブを選択する。透視投影の「Pers」モードよりは平行投影の「Ortho」モードのほうが細部は見やすいかもしれない。モデルにはまだウェイトが設定されていないので全体が灰色で表示される。

Weight000

今回扱っているモデルにはIK用のものも含めて68本のボーンが組み込まれていて、ひとつひとつ手作業でウェイトを設定していくのは非常に骨が折れる。そこで、ある程度まではボーンの情報を元にVertex Paintに自動でウェイトを計算してもらう。「Calc」タブでフォールオフを「Distance ^ 32」に設定し、「Calculate Weights」ボタンをクリックするとすべてのボーンのウェイトが計算され、ボーンと同数だけのウェイト・マップが作成される。

Weight001

ウェイトが設定された箇所は赤く染まる。ただし、ウェイトを算出するとすべてのボーンのウェイトが再設定され、手動で設定したウェイトは失われてしまうという点には注意しなければならない。

ボーン・ウェイトの手動修正

まずは小手調べにRootボーンのウェイトを変更する。

Weight002

Rootボーンはモデルの変形には関係がないので、ウェイトを消してしまう(消さなくても特に問題にはならないけれど)。「Paint」タブを選択し、「Operation」を「ERA」にして赤い部分をマウスでなぞってみる。ウェイトは頂点に設定されるものなので、頂点付近をなぞると赤い部分の面積が少なくなっていく。グラデーションはあくまでも目安で結構いい加減なので、面の色よりもどの頂点までウェイトの範囲が及んでいるかに注目してペイントするようにする。

Weight003

ペイント・オペレーションには5種類あり、動作は次のとおり。

  • ADD
    加算オペレーション。元のウェイト値にValueで設定したウェイト値を足す。
  • SUB
    減算オペレーション。元のウェイト値からValueで設定したウェイト値を引く。
  • REP
    置換オペレーション。元のウェイト値に関係なく、Valueで設定したウェイト値で置き換える。100%など一定の値で塗りつぶしたい時に便利。
  • ERA
    消去オペレーション。元のウェイト値に関係なく、Valueで設定したウェイト値で塗りつぶす。普通は「0%」に設定して使う。REPオペレーションで「0%」を指定しても同じ。
  • OVR
    上書きオペレーション。Valueで設定したウェイト値が元のウェイト値を上回っている場合だけValueのウェイト値で上書きする。使いどころがあまりない。

Strengthなどの設定はエアブラシのように少しずつペイントしていくためにあるものだけど、RGBAの4チャネルで設定した色をブレンドしていくカラー頂点マップとは異なり、ボーン・ウェイトではパラメータがひとつなのであまり意味がない。

なお、「Brush Size」の隣りにある「Front」ボタンをトグルしてオンにしておくと表面に見えている側だけペイントされる。オフにしていると直接見えていなくてもブラシの範囲内に入った頂点はすべてペイントされる。

「Object」の隣りにある「Save」ボタンをクリックすると実際にモデルのボーン・ウェイトに反映される。ウェイトを変更している状態でVertex Paintを終了しようとすると次の画像のような確認ダイアログが表示される。ここで「Yes」を押せば同様にボーン・ウェイトに反映されるけど、変更の反映は「Save」ボタンで、変更を破棄したい時はダイアログで、と使い分けるようにしておくとうっかり大事な変更を破棄してしまったり、必要ない変更を反映してしまったりするミスを防げる。

Weight004

Vertex Paintが終了したら、モデラーウィンドウ右下の「W」ボタンを押し、頂点マップ名を選択するとボーンと同名のマップが大量にできているはず。

可動部分のボーン・ウェイトの修正例

ひとまずボーン・ウェイトはできたけれど、あくまでも自動算出なので必ずしも想定どおりのウェイトになっていないことがある。ここでは左肩を例にあげてウェイトを修正する。

左上腕のボーンを選択し、スケルゴン回転(Rotate Skelegon)でヘディングを適当な角度まで回して腕を降ろしてみる。サブパッチ適用状態でマウスのドラッグで回転させようとすると動作が重いので、数値入力ウィンドウ(Nキー)を利用するといい。

Weight005

左腕を降ろしてみたところ、次の画像で赤い矢印で示した部分に不具合があった。まず、髪の毛にも左上腕のボーン・ウェイトが影響してしまっていて、想定外の膨らみができている。次に、肩章にあたる部分が強く引っ張られて伸びきってしまっている。伸縮性の高い素材という設定なのであればこれでも問題ないけど、制服のようにほとんど伸び縮みしない服装の場合は型崩れと捉えられる。更にもっと問題なのは、ジャケットの脇に大きな陥没が生じていてインナーが見えてしまっている。重ね着はこのような問題を生じることがあるため、できる限り避けたほうがいい。場合によってはインナーは襟と裾を残して際どいところは削除してしまったほうがいいかもしれない。

Weight006

アンドゥ(Ctrl+Z)でスケルゴン回転を元に戻し、再度Vertex Paintを起動する。スケルゴン回転を元に戻さないとスケルゴンが回転したままのモデルが表示されるので注意。左上腕のボーンを選択し、Shift+Aで当該ボーンを中心にして拡大する。確かにボーン・ウェイトの範囲がかなり広いことがわかる。髪の毛にもうっすらではあるけど赤い範囲がある。

Weight007

Ctrlキーを押しながら赤いリングを掴んでボーンを回してみる。LightWaveでは赤リングはヘディング(H)、緑リングはピッチ(P)、青リングはバンク(B)と統一されているので、この際レイアウトに移る前に覚えてしまったほうがいい。

プレビューで確認済みだけど、肩章が肩に食い込むように大きく沈み込んでいるのがわかる。髪の毛の変形やジャケット脇の陥没も見受けられる。この状態でサブパッチがかかった状態を容易に想像できるようになれればいいんだけど、慣れが必要なのでVertex Paintの起動と終了を繰り返すことになるのは最初のうちは仕方がない。

Weight008

ひとまず、肩章の端に設定されているウェイトを消去して所定の場所に戻す。ボーン・ウェイトを消去する度に変形が復元されていく様子は少し面白い。

Weight009

左上の「Edit」ドロップダウンメニューから「Reset All Bones」を選ぶか、Shift+Rでボーンを最初の位置に戻せる。ジャケット脇を陥没させた原因になっていたウェイトも消去すると同時に、左上腕のボーン・ウェイトの範囲を狭くする。ボーンを回してみて、様子を見ながら袖のポリゴンがジャケットにめり込まない程度にウェイトを少し足しておく。ほんの10%程度なので、スクリーンショットではわかりづらい。

Weight010

右側へのボーン・ウェイトの複製

左上腕のボーン・ウェイトが設定できたので、右上腕にウェイトを複製する。「Edit」ドロップダウンメニューから「Copy」を選ぶか、Cキーでボーン・ウェイトをコピーする。

Weight011

右上腕のボーンを選択する。ボーンを回すまでもなく、左上腕のボーン・ウェイトと同様の問題が起こっているのがわかる。

Weight012

左上腕のボーン・ウェイトを左右反転してペーストする。「Edit」ドロップダウンメニューから「Paste -X」を選ぶか、Shift+VでX軸対称ペーストができる。

Weight013

左上腕のボーン・ウェイトが右上腕のボーン・ウェイトにも反映された。ただ、右上腕のボーン・ウェイトはジャケットの襟も巻き込んでいるようなので、ERAオペレーションで消去しておく。

Weight014

ボーン・ウェイト修正の確認

「Save」でボーン・ウェイトをモデルに反映し、Vertex Paintを終了する。再度、スケルゴン回転で左腕を降ろしてみる。今度は髪の毛の変形、肩章の異常な伸長、ジャケット脇の陥没は見られなくなった。脇が若干苦しいけど、これ以上はボーン・ウェイトでなんとかするのは難しそうなので、どうにもならなくなった時はジャケットのオブジェクトを再検討して修正したほうが良いような気がする。

Weight015

このような作業を繰り返して全身のボーン・ウェイトを設定していくわけだけど、慎重な設定を要求されるのは可動範囲の広い肩関節と股関節くらいで、膝、肘、指など曲げ伸ばしが特定の方向のみに決まっている部分は最初の自動算出の時点で大体できてしまっている。

途中経過

ボーン・ウェイトの設定が終わってしまえばリギングはほとんど終わったようなもの。レイアウトでのIKの設定をしなくても次の画像のような簡単なポーズをとらせることはできる。ひとまず両手を水平に広げて両足を揃えた棒立ちの状態からは卒業できた。

Weight016

補足

話が混乱するのでボーン・ウェイトのみに絞って書いたけど、ウェイト・マップの応用範囲は広い。これまでにも軽く触れてきたエッジ・ウェイトやサブパッチ・ウェイトの他にも、軟体シミュレーションであるSoftFXを利用してプルプル震えるゼリーを作ったり、布地シミュレーションであるClothFXを利用して足の動きには影響されるけどボーン・ウェイトだけでは実現が難しいスカートの「裾捌き」の再現などの物理演算の影響範囲をウェイト・マップで文字通り「重み付け」することができる。

また、グラディエント・マップにウェイトを入力してサーフェースの各種パラメータに変化を加えることもできる。例えば、自己発光度にウェイトを入力することで、同一のサーフェースを割り当てられた平面上にありながら自己発光度の輝度が異なる部分を作ることができる。そうすることによって、電球のような発光体を奥に仕込んだり、半透明のポリゴンの屈折率を設定したりといった微細な加工を簡略化できる。大きく拡大して見ることが少ない灯火類や人型ロボットの目などの細かな部分に有効。

関連記事

参考記事

LightWaveで二次元キャラ系人物モデリング奮闘記 ―ボーン編―

最終更新:2016/09/06

これからリギング作業を始める。一口にリギングと言ってもどこからどこまでをそう呼ぶのか解釈のわかれるところだろうけど、ボーンの作成、ウェイト・マップの設定、IKの設定などをひとまとめにしてリギングと呼ぶことにする。

最初に、ボーンを組み込む。LightWaveではモデラーにおけるボーンを「スケルゴン(Skelegon)」と呼んでいて、スケルトン(Skeleton)とポリゴン(Polygon)を合わせた造語らしい。スケルゴンはLightWaveモデラーではポリゴンの扱いになっていてポリゴン選択モードで選択でき、また、2頂点の線ポリゴンに分類されている。モデラーでのボーンの呼称が別に必要になったというのが主な理由なんだろうと思うけど、古いバージョンのLightWaveでは決して操作性がいいとは言えないレイアウトでボーンを目分量で組み込んでいく職人技のような作業が必要だったため、ボーンの精密な設計をある程度モデラーでしておくことができるようになったのは大幅に改善された点と言える。

LightWaveでは「ボーン」と「スケルゴン」は厳密な意味では異なる概念だけど、一般的な呼称ではないのでコマンドなどの固有名詞を除いては極力ボーンで統一していく。

首の接合

これまでずっと保留にしてきた頭と首の接続を行う。頭か体のどちらかに問題が出た場合を想定していたわけだけど、結局大きな問題は発生しなかった。もっとも、深く考えずに頭をボールから作ったことによって顎の先端にトポロジーが集中してしまっている問題は残っているけど、これといった解決策も見つからなかったし、ここへ来ての作り直しというのも気が向かなかったというのもある。

Bone000

首側と頭側のエッジの数が合わなかったので、少々強引だけど首側のエッジを分割して接続してある。なお、頭側と首側の接続部にある向かい合わせのポリゴンは削除してある。

Bone001

基幹ボーンと背骨から頭のボーンの組み込み

体のオブジェクトがあるレイヤーを背景レイヤーに設定し、新しい前景レイヤーにスケルゴンを作成する。最終的には体のオブジェクトのレイヤーと統合するので同一レイヤーにスケルゴンを追加していってもいいんだけど、体のオブジェクトが邪魔になることが多いし、LightWaveの仕様上、体のオブジェクトをマスクすることもできないので別のレイヤーで作成して後で統合したほうが操作性は良い。

最初にすべてのボーンの中心になる基幹ボーンを組み込む。「セットアップ」メニューグループにあるスケルゴン作成(Draw Skelegons)でX軸方向からYZ平面を見るビューで背中側の任意の点から左ドラッグで体の中まで引く。最初のボーンだけはドラッグで作らないと長さが0のスケルゴンができてしまうことになるので、細かい調整は後ですることにして一気に引き切る。

Bone002

後は、左クリックで連続してボーンを作成していくことができる。まずは背骨にあたるボーン群を下から順に組み込む。背骨は胴体の後ろ寄りにあることをイメージしながら位置を決めていく。

人体の背骨は全部で30個の椎骨から成り立っていて、ボーンの数を増やせば増やすほど滑らかな旋回が可能になるけど、ヘビやタコのようなモデルを作る場合でない限り、実際にはそこまで細かくする必要はない。あまりボーンの数を多くするとウェイト・マップの設定が大変になるので、首、胸、背中の3つか4つくらいで十分。首の先に頭に相当するボーンを加えてひとまずスケルゴンの作成を終了する。

なお、頭のボーンは頭のモデルを貫通するくらい長くしておく。ウェイト・マップの範囲はボーンの長さに影響を受けるので、頭のギリギリの長さにしてしまうと、頭の一部や髪の毛などがボーンの旋回に追従してこなくなることがある。

Bone003

すぐに手足のボーンの作成に移っていってもいいんだけど、練習の意味も兼ねてボーンに名前を付けるためにスケルゴンエディターを起動する。スケルゴンエディターは重要な機能の割に「その他」のサブグループに入っているので、メニュー編集で表に出しておくか、元のメニューを変更したくない場合はユーザーメニューグループに追加していつでも使えるようにしておく。

スケルゴンエディターを起動すると、親子関係を持ったボーンが5つできている。名前はモデラーが機械的につけたものなので、これを右クリックで「名称変更」を選択し、ひとつずつ名前をつけていく。

Bone004

ひとまず、次の画像のように名前をつけた。ボーンの名称に限った話ではないんだけど、LightWaveで日本語用の2バイトや3バイト文字を使用すると文字化けを起こしてトラブルの元になるので、必ず半角英数字で名前をつける。英語が苦手ならローマ字でも問題ない。要は後で自分がわからなくならないような命名を心がけるということ。

Bone005

腕から手のボーンの組み込み

腕のボーンを追加していく。枝分かれさせる箇所の親になる胸のボーンを選択し、スケルゴン作成を選択する。

Bone006

次の画像のように左クリックで肩のボーンを枝分かれさせて追加できる。肩口と手首にごく短いボーンをひとつずつ追加しておく。これらはIKに使用するもので、モデルの動きには直接影響しない。

Bone007

肩、肩口IK、上腕、下腕、手首IK、手(小指の根元)、小指1、小指2、小指3と関節ごとにボーンを追加していく。

Bone008

ここまで作成できたら、胸のボーンを枝分かれさせた時と同様の方法で手首IKのボーンを選択し、薬指のボーンを枝分かれさせて追加していく。小指のボーンをコピーして薬指から人差し指までのボーンを作成し、後で手首IKのボーンにポイントの統合ツール(Ctrl+W)で接続してもいいけど、指の長さや位置はそれぞれ少しずつ異なり調整が必要になるため、一本ずつボーンを作成していくのとそれほど手間は変わらない。

Bone009

次の画像が腕から指先までのボーンを作成し終わった状態。画像では上から見た状態しか示していないけど、パースビューを利用してちゃんと腕や指の中にボーンが入っているかどうかよく確認する。親指は関節が他の指よりひとつ少ないので余計なボーンを作ってしまわないように注意。

Bone010

片腕のボーンの作成が済んだら、再びスケルゴンエディターで各ボーンに名前をつける。左腕なので、すべてのボーンの名称の末尾に「_L」をつける。

手は人間の骨格の中でもっとも複雑な動きをする場所でもあり、3DCGでも細かい部分の割にもっとも多くのボーンを必要とする箇所。指のボーンが非常に多くて名前に困るかもしれないけど、ここは番号で管理したほうが簡便。医学的には親指を「第一指」、人差し指を「第二指」、中指を「第三指」、薬指を「第四指」、小指を「第五指」と呼ぶので、それぞれ「Finger1」、「Finger2」、「Finger3」、「Finger4」、「Finger5」と名付けた。指の関節は医学的には指先のほうから第一関節、第二関節、第三関節と呼ぶけど、スケルゴンツリーで並べた時に数字が逆転してしまうので、手首に近いほうから1、2、3と付けた。

Bone011

足のボーンの組み込み

片腕のボーンの命名が済んだら、足のボーンを組み込む。左腕のボーンを作成したならば左足のボーンを作る。最初に作成した基幹ボーンを選択する。

Bone012

次の画像のようにスケルゴン作成で下向きにボーンを追加する。これが腰のボーンになる。

Bone013

更に股関節、大腿(ふともも)、脛(すね)、足首IK、足、爪先、爪先IKと連続してボーンを追加していく。足の指を個別に管理する必要が発生することは滅多にないため、足首から下のボーンは1本のツリーで簡単に設定する。

Bone014

この時注意しなければならないのは、膝にあたる、ふとももとすねのボーンの接続部には少しでもいいので角度をつけておくこと。完全にまっすぐに接続してしまうとIKを使おうとした時に関節が反対側に曲がってしまって骨折したようになってしまうことがある。これはLightWaveに限った話ではなく、すべての3DCGソフトウェアで共通とされているボーン設定の注意事項のひとつ。

実は肘にも同じ事が言えるんだけど、手は実質上宙に浮いていてIKの設定次第でどうにかなるのに対し、地面と胴体の位置関係でしゃがんだりジャンプしたりといった動作にIKを使う足は設定だけではどうにもならないことがある。IKなんて面倒くさい機能は使わないということであれば問題ないんだけど、関節の多い人体モデルをFK(キーフレーム)だけで管理するのはそのうち嫌になってくるはず。

スケルゴンエディターで足のボーンにも名前をつける。左足なので左腕と同様に末尾に「_L」をつけるのを忘れないように。最後にスケルゴンツリーで名前のつけ忘れがないか確認する。

Bone015

反対側の手足のボーンの複製

左腕と左足ができたら、それらに属するすべてのボーンを選択し、鏡面Xで右側に複製する。

Bone016

右側のボーンは背骨のボーンに接続されていないので、胸のポイントを選択し、ポイントの結合ツール(Mキー)か統合ツール(Ctrl+W)で肩のボーンの根元と胸のボーンの先端を接続させる。背骨は横から見たビューで作成しているのでX座標は0になっているはずだけど、何らかの理由で0になっていない場合は整列ツールで揃える。

Bone017

同様に、右股関節を腰のボーンに接続する。

Bone018

右腕と右足のボーンは左側のものをコピーして作ったものなので、ボーンの名前は左と同じになっている。そこで、スケルゴンエディターを使って一括で名前を変更する。右腕にあたるボーン群をすべて選択し、「操作」タブから「接尾辞を削除」を選択し、番号に「2」を入力する。「適用」ボタンをクリックすると、末尾2文字の「_L」が選択したすべてのボーンの名称から削除される。

Bone019

ボーンの選択を解除せずに、「接尾辞を追加」を選択し、名称に「_R」を入力する。「適用」ボタンをクリックすると、選択したすべてのボーンの名称に「_R」が追加される。

Bone020

同様にして右足のボーンも改名しておく。「接頭辞」と「接尾辞」を間違いやすいので注意したい。

スケルゴンエディターはこのように大量のボーンを操作するのに非常に有用で強力なツールなんだけど、逆にボーンひとつだけを改名したい時に現在の名称を表示してくれなくてファイルの改名のようにちょっとした追加や削除ができなかったり、少々不便なところもある。スケルゴン名変更ツールではそういった問題はないので微妙なところでかゆいところに手が届かない感じもするんだけど、スケルゴンツリーを眺めながらミスがないかを確認しながら操作できるという点ではスケルゴンエディターのほうがやはり便利ということになる。

ねじれ補正

最後に、すべてのボーンを選択し、「バンク」タブを選択する。「種類」を「-Zに整列」に設定し、「OK」ボタンをクリックする(「+Zに整列」でも可)。作成したばかりのボーンはバンク角がまちまちで、これをやっておかないと、レイアウトでヘディングやピッチを同じ角度だけ旋回させたのに左右で違う方向に向いてしまうといったトラブルが起こる。そのトラブルを回避するための手順。

Bone021

以上でボーンの作成は終了。せっかく作ったボーンの情報が失われてしまわないうちに、ファイルを保存する。

オブジェクトの準備

次に、ボーンで変形させたいオブジェクトを加工する。ウェイト・マップの設定が煩雑になるため、基本的に見えていないポリゴンはバッサリ削る。重ね着になっているところなどもできる限り二重や三重にならないようにする。ゲーム用のローポリゴン・モデルなどで体のラインにピッタリのボディスーツ状の衣装がよく用いられるのはポリゴンの節約と同時にウェイト・マップの簡略化の意味合いが強い。

Bone022

もったいないようだけど、次の画像のように上半身のほとんどと上腕まで、足首から下を削除する。もちろん、後で調整が必要になった場合のことを考え、完全な状態の体のモデルのバックアップは別のレイヤーにとっておくようにしたい。

Bone023

ボーンを作成したレイヤーから主ボーンをコピーし、加工済みのモデルに貼り付ける。切り取りはしないほうがいい。場合によっては複数のレイヤーに分けてウェイト・マップを設定したほうがいいこともあるため、主ボーンの本体をいきなりモデルに埋め込んでしまわないほうがいい。

体の一部がないのでなんとも間抜けな姿だけど、体のオブジェクトにボーンを組み込んだのが次の画像。レイアウトではモデルと同一レイヤーに存在するボーンが読み込まれるので、必ずボーンとモデルは同じレイヤー上に存在しなければならない。

Bone024

服を加工し、同一レイヤーにコピーする。服の裏地はほとんど要らなくなるので、見えるか見えないかギリギリのところまで削る。場合によっては袖口などは適当なポリゴンで塞いでしまう。髪の毛や靴など必要なものはすべてコピーして同一レイヤーにまとめる。

Bone025

以上でウェイト・マップの設定の準備ができた。ここまでできたところでボーンの作成完了。

最後に、足りないボーンがないかどうかよく確認する。と言うのは、レイアウトでスケルゴンをボーンに変換してしまった後でボーンが足りなかったことに気付いたとしても、モデラーでスケルゴンを編集しただけではレイアウトには反映されないばかりか、再度スケルゴン変換を行うとまったく同じ位置にボーンが二重にできてしまうことになり、非常に面倒なことになる。IKは面倒だからとIKを考慮しないボーンを組んでおいて、後でやっぱりIKを使いたくなったから追加したいというのは困難だということ。不可能とまでは言わないけど、せっかく設定したボーンやウェイト・マップをすべて破棄しなければならず二度手間になる。モデラーにおけるスケルゴンとレイアウトにおけるボーンの概念が独立していることによる最大の問題点がここにあり、アニメーション作成におけるLightWaveの地位が大幅に後退した原因になっているわけだけど、人体モデルの関節が急に増えたり減ったりすることはないのでボーンの設計は周到にしておくに越したことはない。

ボーンの分割

ボーンを作成していて、うっかり必要なボーンを作り忘れてしまった場合は、ボーンの分割を行うと解決できる。次の画像で示している例は、手首IKのボーンを作り忘れてしまった場合。分割したいボーンを選択し、「セットアップ」メニューグループにあるスケルゴン分割(Skelegon Split)を選択する。

Bone026

スケルゴンの分割を行うと、ちょうど半分のところに新しいボーンが作成されるので、位置や長さを調整する。ボーンの名称は両方とも分割前とまったく同じになっているので、足りなかったボーンが根元側だとしても、先端側だったとしてもスケルゴンエディターで改名してしまえば親子関係を崩すことなくボーンを追加できる。

Bone027

なお、画像のように左右の区別があるボーンを追加しなければならなくなった場合は、反対側を一度削除してから再度鏡面複製して接尾辞を一括改名したほうが無難。

途中経過

Bone028

参考までに、今回のボーンのリスト。

  • Root
    • Spine
      • Breast
        • Neck
          • Head
        • Chest_L
          • ChestIK_L(IK用)
            • Upper_Arm_L
              • Lower_Arm_L
                • Wrist_L(IK用)
                  • Hand1_L
                    • Finger11_L
                      • Finger12_L
                  • Hand2_L
                    • Finger21_L
                      • Finger22_L
                        • Finger23_L
                  • Hand3_L
                    • Finger31_L
                      • Finger32_L
                        • Finger33_L
                  • Hand4_L
                    • Finger41_L
                      • Finger42_L
                        • Finger43_L
                  • Hand5_L
                    • Finger51_L
                      • Finger52_L
                        • Finger53_L
        • Chest_R
          • ChestIK_R(IK用)
            • Upper_Arm_R
              • Lower_Arm_R
                • Wrist_R(IK用)
                  • Hand1_R
                    • Finger11_R
                      • Finger12_R
                  • Hand2_R
                    • Finger21_R
                      • Finger22_R
                        • Finger23_R
                  • Hand3_R
                    • Finger31_R
                      • Finger32_R
                        • Finger33_R
                  • Hand4_R
                    • Finger41_R
                      • Finger42_R
                        • Finger43_R
                  • Hand5_R
                    • Finger51_R
                      • Finger52_R
                        • Finger53_R
    • Hip
      • Coxa_L
        • Upper_Leg_L
          • Lower_Leg_L
            • Ankle_L(IK用)
              • Foot_L
                • Toe_L
                  • FootIK_L(IK用)
      • Coxa_R
        • Upper_Leg_R
          • Lower_Leg_R
            • Ankle_R(IK用)
              • Foot_R
                • Toe_R
                  • FootIK_R(IK用)

関連記事