lunarborの備忘録

CGソフトの使い方を記録しておけば自分とどこかの誰かに役立つだろう

Lightwave3Dでもリグコントローラーにカーブオブジェクト使用したい話

使用ソフト

  • Lightwave2020

Lightwave3Dのリグコントローラーは通常Nullを使いますが、形が限られているため設置場所によっては分かりづらかったり掴みづらくなってしまいます。そこでこの記事では他のソフトで見るようなカーブを使った任意の形のオブジェクトをコントローラーとして使うやり方をLightwave3Dでも行う方法を紹介します。Lightwave3Dのレイアウトではカーブがモーション補助ツールという位置づけになっており、コントローラーとしての使い方は想定されていないようなので少し工夫が必要になります。

 

まだ開発中ですが概ねこの画像のように任意形状のコントローラーを使用できるようになります。

 

この記事で使用しているモデルについて

この記事ではカーブで作成したコントローラーを適用する作例としてLightwave3Dに付属している"SampleContents"の中にある"Human_Rig.lwo"というサンプルモデルを使用しています。こちらのモデルは残念ながらLightwave2020には付属しておらず、自分が所有している中では2018もしくは2015に付属しています。

Human_Rig.lwo

ただ、このモデルはGenoma2のヒューマンリグのサンプルですので、リグ自体はモデラーのGenomaプリセットの中にある"Human_Rig"(Complex_Rigas>G2 Bipeds>Human_Rig)を使用しており、2020で不足しているのは人型のメッシュのみです。リグだけでもこの記事の作例は再現できますが、必要があればご自身でメッシュを作成するか、入手して使用してください。

Human_Rig

Human_Rigのデフォルトの状態

"Human_Rig.lwo"もGenomaプリセットの中にある"Human_Rig"もデフォルトでは正面が+Z方向を向いています。そのままだと編集作業がやりづらいため180°回転させて-Z方向が正面になるようにして保存しておきます。

"Human_Rig.lwo"をレイアウトに読み込んで"セットアップ">"Genoma">"リグ作成"を行うと下の画像のような状態でリグが作成されます。コントローラーには全てNullが使われており、初見では少し操作の仕方が分かりづらい印象です。このコントローラーを記事冒頭の画像のように自分で作成したカーブオブジェクトのコントローラーに差し替えてわかりやすくしていきます。

コントローラーにするカーブオブジェクトを作成する

まずはコントローラーに使用するカーブオブジェクトの作り方を解説していきます。

試しにモデラー"Human_Rig.lwo"を背景レイヤーに置いて腰の辺りに直方体のカーブオブジェクト作成してみます。

これをレイアウトで読み込んでリグを作成します。このシーンではカーブオブジェクトは"Human_Rig_ctrl_test:Layer2"という名前になっています。(カーブオブジェクトの表示方法は後に解説があります。)

リグの腰の部分に"pelvis"という名前のボーンがあります。これを選択して"モーションオプション"パネルを開いて"回転"タブにある"回転アイテム"を確認すると"pelvisctrl"というNullを使ったコントローラーが指定してあります。

"pelvisctrl""pelvis"ボーンのすぐ上、次のボーンとのつなぎ目に設置してあるボックス形状のNullです。"pelvisctrl"を選択した状態で"モーションオプション"パネルを開いて"回転アイテム"にカーブオブジェクトである"Human_Rig_ctrl_test:Layer2"を指定して"Human_Rig_ctrl_test:Layer2""pelvisctrl""pelvis"というようにコンストレインを繋いでカーブオブジェクトを"pelvis"の回転のコントローラーとして機能させます。

すると2つのことが分かると思います。

  1. カーブオブジェクトコントローラーの回転軸が原点の位置になっている
  2. カーブオブジェクトコントローラーの回転軸の向きが"pelvisctrl"と違う。

1はカーブオブジェクトをモデラーで作るときに回転軸の設定位置が原点になることを考慮して作成する必要があるということです。

2はそれぞれのバンク(青)の向きを比べるとわかり易いと思います。"pelvisctrl"の回転軸の向きは制御先の"pelvis"ボーンの回転軸と一致していますがカーブオブジェクトの回転軸は一致していません。カーブオブジェクトをコントローラーとして使用するなら回転軸は制御先のボーンと一致させる必要があります。

"pelvisctrl"ボーンの回転軸

これらのことを踏まえた上で次の章からカーブオブジェクトの作り方を解説していきます。

コントローラーの回転軸をボーンの向きに合わせる。

前提として、Lightwave3Dにおいてボーンの基本の向きは-Zから+Z方向に向いた状態です。これはレイアウトで原点にひとつNullを作り、"ボーン追加"でボーンを作成するとわかります。

そのためコントローラーにするカーブオブジェクトもこの向きのボーンに合わした形で作成して保存しておくと回転軸が合うようになります。リグに設置されたボーンは場所によって向きが違ってくるものですが、カーブオブジェクトのモデリングの際にガイドとしてスケルゴンをひとつ置くことで、コントローラーを設置したいボーンの向きに合わせる事が容易になります。カーブオブジェクトが完成すればこのスケルゴンは不要なので削除しても構いませんが、自分は修正や流用のためにカーブと同じレイヤーに置いたままにしてあります。この場合レイアウトで"スケルゴン変換"をしない限り現れないので問題ありません。但し、別レイヤーに置いたままにするのはおすすめしません。そうするとカーブオブジェクトをレイアウトに読み込んだ際にレイヤーが別々のオブジェクトとして読み込まれてしまい、不要なものを削除する手間が増えてしまいます。

このように作ればレイアウトに読み込んだときに回転軸がボーンと合うようになります。(画像はBank回転(青)を確認するとわかりやすいです。)

コントローラー用のカーブオブジェクトの作り方

カーブオブジェクトの作り方はLightwaveモデラーの標準機能だけで作る方法の他に有料プラグイン"LWcad"*1を使う手順も紹介してあります。"LWcad"を導入するとLightwaveNURBS Curveが使用できるようになるため、カーブで形状を作る工数をかなり削減できます。

標準機能の場合
  1. ポリゴンでボックスを作る。
  2. 頂点を2つ選択して"開いた曲線の作成"を使って1辺づつ作る。

  3. "状態"パネルの"曲線"で作成したカーブを選択し、カット&ペーストで別レイヤーに移す。

  4. 全ての辺を曲線で作成し移したら頂点は結合せずにそのまま別オブジェクトとして保存。(画像はスケッチ色を変えてあります。)

LWcadを使う場合
  1. ポリゴンでボックスを作る。

  2. "Create"タブ"Convert"メニューの"Surf To Curvs"でNurbs Curveに変換。(2頂点ポリゴンのみになるためメッシュが消えます)

  3. 同メニュー"Convert Curvs"を選択。数値入力パネルのオプションにある"Conversion Mode"LightWave Curve”を選ぶ。Enterを押して確定。("ポリゴン状態"パネルの"曲線"に数字が追加され、アクティブになります。)

  4. 頂点は結合せずそのまま別オブジェクトとして保存。(画像はスケッチ色を変えてあります。)

モデラーで角を保った曲線を作成する方法

前の章では直方体のように直線(2ポイントカーブ)を組み合わせたオブジェクトをの作り方を紹介しましたが、曲線と直線を組み合わした形状を作りたい場合は少し工夫が必要になります。

カーブを使って曲線(3ポイント以上カーブ)と直線(2ポイントカーブ)を組み合わせたオブジェクトを作りたい場合は曲線部分と直線部分を別ポリゴンにしておくことで可能ですが、そのオブジェクトをレイアウトに読み込むと開いた曲線が強制的に閉じたオブジェクトとして表示されてしまい意図しない形で表示されてしまいます。(下の画像のオブジェクトは16個の開いた曲線で構成されていますが、レイアウトに読み込むと開いていた部分が閉じた状態で表示されます。尚、この状態でも後記する「レイアウトでカーブオブジェクトの表示方法」を行えば、意図した形で表示されます。)

そこでこれを回避するために"ポリゴン結合"(Shift+z)を行い、ひとつの閉じた曲線のオブジェクトにしようとすると、結合後に角が失われてしまい意図した形にできません。加えて、最後に結合する部分がエラーのような形になってしまいます。(画像左側)

そういう場合は以下のようにします。

  1. カーブポリゴンを結合するにはカーブの"始点""終点"が揃っている必要があります。始点→終点・始点→終点というようにカーブが並んで居ない場合は修正します。(カーブに四角い端点がある側が始点)始点と終点を入れ替えるには"ポリゴン反転"(F)を使います。

  2. 連なったカーブの結合したいポイント(始点と終点)を"統合"(ctrl+w)します。
  3. ポリゴンモードで直線側のポリゴンを選択。
  4. "マルチ加工"タブ"細分化"メニュー"ポイント追加"で角の近くにポイントを追加。
  5. "変形"タブ"移動"メニュー"整列"サブメニュー"ポイントを軸へ整列"を使い追加したポイントを角のポイントの位置に重ねる。

  6. ポリゴンモードで結合したいカーブ同士を選択。
  7. "詳細"タブ"ポリゴン"メニュー"結合"(Shft+z)
  8. 角を保ったまま直線と曲線が結合されたカーブオブジェクトができます。

このようにカーブで角を保ちたい場合は近い位置に頂点を2つ作り重ねる必要があります。これを踏まえて工程を整理したモノが次の方法になります。

モデラーの標準機能でのカーブオブジェクトの作り方

例として円に矢印を組み合わせた形状を作成します。

  1. 目的の形状をポリゴンでモデリングする。(必要になるのは外周の頂点のみなので、形状内部でメッシュが分割されていても問題ありません。)

  2. 角を残したいポイントをすべて選択し、"拡張プラス"(Eキー)を押してポイントを複製し同じ位置に2ポイントが重なった状態にする。

  3. カーブを構成するポイントを時計回りで順に全て選択し、"曲線を作成"から"閉じた曲線の作成"でカーブを作る。

  4. "ポリゴン状態"パネルで"曲線"を選んで別レイヤーにカット&ペーストする

  5. 必要があればポイントの位置を微調整して完成。

LWcadを使えばポイントの追加を省略できる
  1. nurbsカーブで形を作る。
  2. 必要ならLWcadの"Bool"を使ってnurbsカーブを組み合わせる。(Edit>Edit Tools>Bool)

  3. バラバラになっているnurbsカーブを"Join Edge"(Edit>Connect TR>Join>Join Edge)で順番に選択して全て接続する。

  4. "Convert Curvs"(Create>Convert>Convert Curvs)を選択。オプションメニューの"Conversion Mode"LightWave Curve”を選び、Enterを押して確定。

※事前に"Join Edge"を使ってカーブを接続していれば角を保ったまま一つのオブジェクトとして変換されます。

レイアウトでカーブオブジェクトをコントロラーとして設置する

この章では作成したカーブオブジェクトをレイアウトに読み込んでリグのコントローラーとして設置する方法を解説します。

ボーンとコントロラー(Null)のつなぎ方。

ボーン側のモーションオプションの"制御と制限"パネルにある"回転(位置、スケール)アイテム"でnullを指定した後、各制御(ヘディング、ピッチ、バンク)のドロップダウンメニューから"アイテムと同じ"を選ぶ。("(回転の)コンストレイント"モデファイヤと同じふるまいになる)

レイアウトでNullのコントローラーをカーブオブジェクトに置き換える

作成したカーブオブジェクトをコントローラーとして設置するには、すでにコントローラーとしてあるNullを選択して"オブジェクトで置き換え"を使い、作成したカーブオブジェクト指定すれば置き換え設置することができます。しかし設置後もカーブオブジェクトをリグが入っているオブジェクトの形に合わして掴みやすい位置や形状にモデラーで微調整する必要があるため、この記事ではNullと直接は置き換えずにコントローラーにしているNullは残したまま、Nullの"モーションオプション"にある(移動/回転/スケール)で制御アイテムとしてカーブオブジェクトを指定して紐付ける方法とっています。こうしておくと問題が起きた時にカーブオブジェクトだけを切り離せばいので、修復がたやすくなります。

手順

  1. カーブオブジェクトに紐付けるNullコントローラーを"複製"する。

  2. 念のため複製したNullをリネーム(複製元の名前から末尾の(1)が消えて、元の名前に戻る。)

  3. 複製元のNullコントローラーのモーションオプションの"(移動/回転/スケール)アイテム"で複製したNullを指定しておく。(各チャネルの"~制御"の項目は"アイテムと同じ"を選択する)

  4. 複製したNullを選択して"オブジェクトで置き換え"を使い、作成したカーブオブジェクトに置き換える。これでカーブオブジェクトはNullの位置に正確に合う。

  5. コントローラーにしてあったNullの"アイテム形状""なし"にするか、わかりやすいものに変えておく。または"シーン編集"パネルで非表示にする。

レイアウトでカーブオブジェクトの表示方法

カーブオブジェクトをレイアウトに読み込んでも、そのままでは表示されないため以下の設定が必要になります。

  1. カーブオブジェクトを選択して"オブジェクトプロパティ"パネルを開き"アピアランス"タブの"カスタムオブジェクト追加""曲線を表示"を追加する。"曲線色"は明るい黄色にしておくとビューの表示がわかりやすくなる。

  2. "シーン編集"パネルでカーブオブジェクトを選択し、オブジェクトの表示方法を"頂点"に変更する。

エクスプレッションを使ったコントローラーの紐づけ

今回サンプルとして使用した"Human_Rig"は腕にIK/FKブレンド切り替え機能が付いています。そのためか、腕のボーンに設置してあるNullコントローラーに前章で解説した"回転アイテム"の指定を使ってカーブオブジェクトを設置してもうまく機能しません。

(画像のようにカーブコントローラーを回転させてもボーンごと腕が付いてきません。)

 これは、Nullコントローラーをボーンに紐付ける方法が"回転アイテム"の指定(コンストレイン)ではなく"グラフ編集"パネルでボーンの回転チャンネルに対してエクスプレッションを使ってNullが紐付けられているためです。そのためカーブオブジェクトをNullコントローラーに紐付ける際もエクスプレッションを使う必要があります。

この章ではその方法について解説します。

グラフ編集パネルの基本情報

"グラフ編集"パネルには"エクスプレッションタブ"が2つあって紛らわしいので日本語マニュアルより"グラフ編集"パネルの各部名称画像を引用させて頂きます。この記事では左下を"エクスプレッション(リスト)"タブ。右下を"エクスプレッション(コントロール)"タブという表記にしてあります。

※上の画像は「Lightwave3D2020の日本語マニュアル」より抜粋

エクスプレッションを使ってNullコントローラーにカーブオブジェクトを紐付ける

エクスプレッションの編集を行う前に、カーブオブジェクトは前章までの方法を使って目的の場所に設置しておきます。

  1. Nullコントローラーと紐付けるカーブオブジェクトを選択

  2. グラフ編集パネルの"セレクション"メニュー"レイアウトで選択されたアイテムの取得"でチャンネルリストにチャンネルを追加する。

  3. 今回編集するのは回転のチャンネルだけなので"セレクション"メニュー"Rotationチャンネルのフィルタ"でチャンネルリストに表示される項目を回転チャンネルだけにする。

  4. グラフ編集パネル下部右"エクスプレッション(コントロール)"タブで"新規"を押して新しくエクスプレッションを追加する。"値"の欄にある"Value"は消しておく

  5. "チャンネルリスト"で値を取得する先であるカーブオブジェクトのチャンネルを選ぶ。この作業はH,P,Bの各チャンネルをひとつずつ行う必要があります。まずは"Heading"を選択。

  6. そのまま右クリックしてメニューより"エクスプレッションに付加"を選択。すると"エクスプレッション(コントロール)"タブの"値"の欄に同チャンネルを意味する文字列が追加される。"名称"欄はわかりやすい任意の名前に変えておく。

  7. "チャンネルリスト"で値を受け取るNullコントローラーのチャンネルを選択する。取得先を選んだときと同様に"Heading"を選択。

  8. "エクスプレッション(リスト)"タブで先程作成したエクスプレッションが選択されているのを確認した後、"適用"ボタンを押す。すると"チャンネルリスト"で選んでいたチャンネル名称の先頭に丸記号が付加される。これでエクスプレッションがそのチャンネルに適用され、カーブオブジェクトとNullコントローラーが紐付けられた。

  9. Pitch、Bankチャンネルについても同様の操作を行う。

エクスプレッションでの紐づけを解除する方法

前章の続きとしてカーブオブジェクトとNullコントローラーの"Hedding"チャンネルを紐づけた状態から解説を始めます。

  1. まず"グラフ編集"パネルの左下"エクスプレッション(リスト)"タブを選択しておきます。ここにはこのシーンで使用しているエクスプレションが全てリスト表示されており、このリストで選択することで右側の"エクスプレッション(コントロール)"タブに詳細が表示され、編集できるようになります。また、"アタッチ済"欄の数字を確認することで、そのエクスプレッションがいくつのチャンネルに適用されているのかを確認することができます。

  2. "チャンネルリスト"で丸記号がついているチャンネルのうち、エクスプレションの適用を解除したいモノを選びます。今回はNullコントローラーの"Hedding"チャンネルを選択します。

  3. チャンネルを選択した状態でチャネル名を右クリックします。出てきたメニューの最下部にエクスプレッション名があるのでそれを選択します。すると、左下の"エクスプレッション(リスト)"タブのリストで該当のエクスプレッションが選択され右側の"エクスプレッション(コントロール)"タブで編集ができるようになります。

  4. 右側の"エクスプレッション(コントロール)"タブにある"除去"を選択すると、"チャンネルリスト"のチャンネル名の先頭に付いていた丸記号が消えて、そのチャンネルに適用されていたエクスプレションが除去されます。

紐づけ結果

H,P,Bの各チャンネルの紐づけが完了すると下の画像のようにカーブオブジェクトを選択して回転させれば、Nullコントローラーで制御している腕のメッシュが付いてくるようになります。肘と手首についているコントローラーについても同様の作業を行います。

参考

コントローラー形状の参考

area.autodesk.jp

 

エクスプレッションについてより詳しく知りたい場合はLightwaveのマニュアルにある"スクリプト"の章を読むと共にこちらの記事も活用してください。

lunarbor.hatenablog.com

 

 

*1:この記事で使用しているLWcadのバージョンは"2020"です