トップ
>CG_TIPSメニュー
>現ページ
新"Light Wave 3D"への対応2:Node(ノード)編集編2&モーション編1
(記事記載:2020年 2月12日)
このコーナーは、"Light Wave 3D"限定のヒント用にオープンしました。
僕も長年 Light Wave ユーザーですが、他の3DCGソフトと比べて、情報はホントに少ないです。
日本語表記はとても少なく、ググって出てくる情報はほとんど英語を初めとする外国語の情報ばかりです。
そんな状況なので、LightWaveに関する情報を求めている方々は多いのではないかと思い、
日本の"LightWave 3D"ユーザーのためにこのコーナーを設けました。
とは言っても、私はCG専門学校講師でもないし、そうそう暇でもないので、手取り足取りの詳細リファレンスは作れませんので、
制作のキーポイントのみ記載します。細かい点は、色々試行錯誤で探ってくださいませ。
ノード編集編2&モーション編1:レイキャストジオメトリーを使用して凸凹道で車を走らせる
更なるハイエンドソフト化に向けて、大きく進化した(設計思想が変わった)LightWave3Dに慣れるシリーズ2回目。
前回は、「ノード編集とは何ぞや」に触れて、質感設定の例に、その便利さについて書きました。
今回は、更に一歩推し進めて、アニメーションのモーション機能でノードを使用する例を解説いたします。
今回は、凸凹道に合わせて車が走るシーンを構築してきまます。
Ⅰ.地面と車体の設定
平らで真っ直ぐな道を車が走るシーンであるならば、シーンの設定にさほど苦労はしないと思います。
しかし、オフロードのような凸凹道ならどうでしょうか?タイヤが地面にめり込んだり、逆に浮いたりしてレンダリングされます。
もし、道の凸凹に応じて、車体やタイヤも動きをフレーム毎に設定したら途轍もない作業と手間で、修正まで考えたら地獄です。
LightWave3Dのモーション機能を使用すれば、そのような地獄の作業から解放されます。
まず、車が走る地面と車を用意しましょう。
地面は、レイアウト画面のジオメトリーの地面作成で作っても、モデラ―で作っても、どちらでも良いです。
今回は、レイアウト画面で
「レイアウト>モデル・タグ>編集メニュー>ジオメトリー>地面」
で作成しましょう。
大きさは取り敢えず25m×25m、分割はXZそれぞれ25にします。質感設定は今回は重要でないので、テキトーに。
次に地面に凸凹を作ります。オブジェクトプロパティーの変位マップを使用します。
「オブジェクト・プロパティー>プリミティブ・タグ>ジオメトリ>モディファイヤ>変位マップ」
にチェックを入れます。
変位マップのテクスチャ編集を開いて、プロシージャルを選んで、種類を選びます。今回は「乱流」をチョイスしました。
各数値は、車のサイズを考慮して決めてください(※乗り越えられないような不自然な凸凹はNGです)。下記の値を参考に。
凸凹の地面ができたら、車を配置します。動きのテストなので、手元に車のデータがなかったら、BOXに4個の円柱でも良いです。
ただし、タイヤ4個は別レイヤーにして、タイヤは全て0,0,0の位置にセンタリングしておいてください。
今回は、2年前にモデリングした4WD車両を使います。車体は、Null(今回、Car_Nullとした)の「子」となるようにペアレント設定します。
タイヤは後々回転させる予定なので、モデラー上で全てセンタリングしておき、レイアウト上で車体の4角に配置してください。
その際、タイヤもタイヤ用のNullの「子」となるようにそれぞれ設定して、そのNullを移動して配置します。
タイヤには2つのNullを設定しています。理由は、後々述べます。タイヤのNullは、車体にペアレントします。
階層組織構造は、下記右図のようになります。
次に車体(Car_Null)を移動させます。60フレームで8m程度移動させてみましょう。その際、車体(Car_Null)を情報に1m車体を浮かせます。
アイテムの原点が凸凹地面にめり込んだままだと、地面との距離計測ができないからです。アイテムを浮かせると、正しい距離計測ができます。
Ⅱ.レイキャスト・ジオメトリ・ノードを適用する
さて、ここからいよいよ「レイキャスト・ジオメトリ」の登場です。
ちなみにレイキャストとは
「物体の位置を計測する」
といった意味合いです。光線を放って距離を計測するイメージです。
車体の親である「Car_Null」を選択して、セットアップからモーションオプションと選択(もしくはmキーを押す)します。
「モディファイヤの追加」から「ノードモーション」を追加し、ノードを開きます。
ノードを開いたら、ノード一覧から「Ray Trace」の
「Ray Cast Geometry」
を選びます。
「Input」の「Item Position(アイテムの位置)」アウトプットを「Ray Cast Geo Metry」の「Ray Origin(光線の原点)」インプットに結びます。
続いて、「Ray Cast Geometry」の「Intersect(交差)」アウトプットを「NodalMotion」の「Position(位置)」インプットに結びます。
「Rau Cast Geometry]をクリックして、設定画面を開きます。地面との距離を計測したいので、「地面」のオブジェクトを選択します。
これで、地面との距離計測が「ON(有効)」になりました。
ちなみに下方(Y軸方向)の地面との距離を測るので、光線方向のY軸に「-1」を入力しています。
これで、車体の設定は終えました。パネルを閉じると、地面の凸凹に応じて、きちんと車体が上下に移動しています。
ワイヤーフレームだと分かりにくいので、VRモードで確認しましょう。GIFアニメ化したのが、下記動画です。
さて、ここで問題があることが分かります。車体はきちんと上下動しているのですが、タイヤが地面にめり込んだり、逆に浮いたりしています。
車体の原点を計測地点として地面との距離を計測しているので、タイヤの位置はなんら考慮されていません。
タイヤにも、タイヤ毎に独立懸架の設定をする必要があります。
Ⅲ.タイヤにも、レイキャストジオメトリを設定する
車体に続いて、タイヤ4本にもレイキャストジオメトリを適用します。ここで一つ注意点があります。
Rayによる計測は、地面から対象オブジェクトの原点に対して行われます。
車体は、本来の正しい位置に置かれた(車体が地面から離れた)原点だったので問題ありませんでした。
しかしタイヤは回転させるため、原点は0,0,0の位置にあり、そのまま適用するとタイヤは半分地面に潜ることになります。
そこで、タイヤには2つのNullを設定しています。
1つ目のNullは、RayCastの原点測定用で、もう一つはタイヤが地面に潜らないようにするためのタイヤ位置設定用です。
親子関係は、「Car_Null>Tire_Null1>Tire_Null2>Tire」となります。(それぞれ前後左右があるので、名前は変更します)。
階層構造は、下記図のようになります。
4本とも設定を終えたら、車体同様、レイキャストジオメトリの設定をしていきます。
Ray Cast Geometryを設定するのは、光線計測用に設定した1の方の(親の方の)「Null」です。
今回も地面との距離を測るため、親のNullの1を1m上方に移動させておきます。(子であるNull2及びタイヤも当然移動します)。
Nullの1を選択し、再びモーションオプションを開き、モディファイヤの追加から、ノードモーションを開きます。
ノードモーションを開いたら、車体と同じように、Ray Cast Geometyを選択して、同じようにノードをつないでいきます。
地面との距離を測るので、設定画面で再び地面のオブジェクトをONにして有効にします。
ここまでは、車体の設定と同じです。パネルを一旦閉じます。
すると、なんとタイヤが車体から遠く離れたところに移動してしまい、更に地面に潜っています。
Nullの位置が初めから原点から車体の前後からずれているためと、NullがまたCarNullにペアレントされて、
そのCarNullがレイキャストジオメトリによって、下方の移動させされているので、その分下に移動してしまうのです。
それを回避するために、2つの設定を行います。
まずは、CarNullの上に、もっと大元のNullを作ります。AllNullとでもしておきましょう。
このAllNullに車両の移動を担わせて、CarNullには、レイキャストジオメトリの機能だけを担わせます。
AllNullを親として、CarNullやTireNullを子に設定します。階層構造はこうなります。
これで、タイヤのNullは、CarNullの位置の影響を受けなくなります。
ところがこの設定だと、大元のAllNullを移動しても、車体もタイヤもの位置からピクリとも動きません。
そこで、次に車体やタイヤを適切な位置に配置するノードを組みます。
CarNullを選択して、再びノードモーションのパネルを開きます。
ノードの選択肢から「Displacement」の
「Falloff: Axis」
を選び、「Imput」と「Ray Cast Geometry」の間に挟みます。
「Falloff: Axis」をクリックして設定画面を開き、軸の種類を
「ベクトル(方向)」
、フォールオフ種に
「リニア(直線)」
を選びます。
「Input」の「Item Position」アウトプットを「Falloff: Axis」の「Point Position」につなぎ、
「Falloff」
アウトプットを「RayCast」のインプットの
「Offset」
につなぎ、後は前回と同じように「NodalMotion」につなぎます。
これでタイヤや車体は、「軸方向(ベクトル)」に「直線(リニア)」で「離れ(オフセット)」て本来の位置に配置されます。
これを4本のタイヤの親Nullに、同じように設定します。
パネルを閉じると、車体もタイヤもALLNullに追従し、かつ凸凹の地面にそれぞれ対応しているのがわかると思います。
4WDビークルが、デコボコ道を4輪独立懸架で走行していく様子です。
さて、今回は解説が分かりにくくなるのを避けるため、タイヤの回転についての方法は記載しませんでした。
次回は、
「車の移動距離に応じてタイヤの回転数も自動的に変わるモーション」
の設定の解説を行います。
「凸凹道への自動的な追従」と、「移動距離に応じたタイヤの回転の設定」で、次回この4WDアニメを完成させます。