top of page

[C4D]XPressoでシンプルなCar Rigging

From "C4D XPresso car tutorial 1" https://vimeo.com/115767919

1. CubeとCylinderで簡素な車オブジェクトを作成

2. サスペンションを作成

 ・Simulate → Dynamics → Connector

 ・ConnectorのType(Connectorの"Object"内のエディターから)を"Wheel Suspension"を選択

 ・ConnectorオブジェクトのX軸を90度回転させる

 ・Connectorオブジェクトを複製し4つ(タイヤの数分)作成する。それぞれタイヤの中心に移動させる

 ・Connectorオブジェクトのエディター内"Object"にある、「Object A」「Object B」に以下のオブジェクトを割り当てる。

   Object A → Bodyオブジェクト

   Object B → それぞれのタイヤオブジェクト

 ・さらにエディター内"Object"にある"Suspension Stiffness"の値を1から増加(とりあえず10ぐらい)させる。

・TireオブジェクトとSuspensionオブジェクトでそれぞれNullオブジェクトを作りグループ化する。さらにその2つのNullをBodyオブジェクトの子にする。

 ・上記BodyオブジェクトとWheelsのNullにそれぞれRigid BodyのTagをつける。   ※WheelsはNullなのでそのままではその中のWheelsオブジェクトにはダイナミクスが反映されない。なので、Tag内の"Collision"にある"Inherit Tag"を"None"から"Apply Tag to Children"に変更する。

 ・Fieldオブジェクトを作り"Collider Body"Tagをつけて、アニメーション再生してみる。サスペンションを効かせてオブジェクトがFieldに着地する。

3. モーターを作成

 ・Motorオブジェクトを90度X軸に回転させる。

 ・Motorオブジェクトを4つ(タイヤの数)複製し、Nullでグループ化する。さらにBodyオブジェクトの子にする。

 ・

 ・X軸&Z軸を0cm、Y軸(Cood.)を1cmにする。

 ・Motorオブジェクトのエディター内"Object"の「Object A」「Object B」にそれぞれ下記を割り当てる。

   Object A → Body

   Object B → それぞれのWheel

 ・上記内の"Angular Target Speed"と"Torque"の値を調整する(とりあえず両方とも500)

 ・この時点でアニメーション再生をしてみる。タイヤが回転しながら車が前進すればOK。

・ただ、この状態では車がFieldに着地した瞬間もタイヤが回転している。つまり、摩擦力が発生していないことになる。

   → Fieldオブジェクトのエディター内"Collision"の"Friction"の値を300に変更する。

4. Xpressoとコントローラーの作成

 ・Nullオブジェクトを作成し、XPressoタグをつける。とりあえず一旦Xpressoは後でやるので置いておく。

 ・さらにもう1つNullオブジェクトを作成する → 車を操作するコントローラー用のオブジェクト

 ・ControllerのNullオブジェクトの"User Data"から"Manage User Data"を選択。

 ・現れたウィンドウから"Add Data"をクリック。

 ・Speed用のData:下記写真のように変更する。

   Name → speed

   Data Type → Float

   Unit → Real

   Unit Min → 0

   Unit Max → 50

 ・さきほど作ったXpressoを立ち上げる。

   ControllerオブジェクトをXpressoに入れる。Outputにさきほど作ったSpeed用コントローラー("User Datta"→ "speed")を指定する。

   4つのMotorオブジェクトをXpressoに入れる。Inputに"Angular Target Speed"("Object Properties" → "Angular Target Speed")を指定する。

   さらにControllerのOutputとMotorのInput(4つとも)を紐づける。

この時点でアニメーション再生してみると、Speedの値に応じてスピードが変化する。Speedの値をスライダーで変更することで速度が変化する。

 ・ステアリングのコントローラーを作成する。

   すでに作成したControllerのNullオブジェクトのエディターから"User Data"から"Manage User Data"を選択する。現れたウィンドウから"Add Data"をクリックする。

   下記のように設定する。

    Name → steer L_R

    Data Type → Float Slider

    Unit → Percent

    Unit Min → -100

    Unit Max → 100

さきほどのSpeedと同じ要領でXpressoを構成させていく。

    Xpresso内にSuspensionオブジェクトを2つ(モーターと違ってステアリングは2つ(前と後ろ)で1組とするため)入れる。InputにはSteering Angle("Object Properties"→''Steering Angle")を指定する。

 ControllerのOutputに、"steer L_R"を追加する("User Data"→"steer L_R")

  現在ステアリングの値は%に指定しているが、よりSensitiveに値をいじれるように、"Range Mapper"(New Node → Xpresso → Calculate → Range Mapper)を間に挟む("steer L_R"の値と"Steering Angle"の値をConvertする)。

   "Node Properties"の"Input Range"を"Percent"に変更。

   "Parameter"の"Input Lower"を-100に変更。"Output Lower"を-0.5に、"Output Upper"を0.5に変更。

  下記にように紐づける。

この状態でアニメーション再生すると、スライダーの-の値で右に、+の値で左に車が曲がるが、Range Mapperの"Reverse"にチェックを入れると反転させることができる。

5. より詳細なセッティング

 ・0F〜5Fまではハンドルはまっすぐで、6Fからハンドルが曲がるようにする。

   Xpressoにて、"Time"ノードを追加する(New Node → Xpresso → General → Time)。

   デフォルトの状態では、値がフレームではなく秒になっているため、フレームに変更する。デフォルトのOutputを削除し、Outputに"Frame"を追加する。

   "Compare"ノードを追加する(New Node → Xpresso → Logic → Compare)。エディター内の"Function"を">"に変更する。さらに"Name"を"Compare >5"に変更する。"Parameter"の"Input 1"を0に、"Input 2"を5にする。

  "Time"のOutput(Frame)と"Compare > 5"のInput 1を紐づける。"Result"ノード(New Node → Xpresso → Genaral → Result)を追加すし、Inputを"Compare > 5"のOutputと紐づける。

上記画像の"Animation Refresh"がオンになっていれば、Resultの値がリアルタイムで変化する。アニメーション再生してみて、6Fから値が変化することが確認できれば、Resultノードは確認用なので削除する。

  "Condition"ノードを追加する(New Node → Xpresso → Logic → Condition)。このConditionノードは"Compare > 5"の値が0(0〜5Fの時の値)であれば2つあるうちの上部のInputの値に、1(6F〜の値)であれば下部のInputの値が反映してくれる役割をもつ。

  紐付けを下記のように行う。

6. コントローラーの作成その2:後進・ストップ・前進ボタン

 ・先ほどと同じ要領で、Contorollerオブジェクトのエディターから"User Data → Manage User Data"でUser Dataウィンドウを開く。

 ・"Add Data"をクリックし、下記のように設定する。

   Name:gear

   Data Type:Integer

   Interface:Quicktab Radio

   Cycle Option:0;reward

          1;stop

          2;forward

・Xpressoを立ち上げる。

  ControllerノードとMotorノードの間にノードを挟み、-1、0,+1をかけることによってreverse、stop、forwardを切り替える仕組みを作る。

  ControllerノードとMotorノードの紐付けを切り離し、ControllerノードのOutputに先ほどのgearノードを追加する(User Data → gear)。

  Conditionノードを追加(さきほど作ったものを複製)し、Inputを2つから3つに追加する(gearのreverse,stop,forward用)。Conditionノードのエディターにて、3つのそれぞれのInputの値を-1,0,1と変更する。

 "Controller"のOutput"gears"とConditionの"Switch"を紐づける。

 上述の-1,0,+1を掛け算するための"Math"ノードを追加する(New Noder → Xpresso → Calculate → Math)。Mathのエディター内のFunctionを"Multiplay"に変更する。

 下図のように紐づける。

これでアニメーション再生しながら、reverse・stop・forwardボタンを押すとそれに応じて車が後進・ストップ・前進する。

※CINEMA4Dではstopして2秒以上stopしたままにすると、その後reverserやforwardを押してもDynamicsが働かなくなるので注意。その問題を解消させるには以下の数値をいじる。

 WheelsとBodyオブジェクトのエディター内、"Dynamics"の"Deactivation"の"Linear Velocity Threshold"と"Angular Velocity Threshold"の値を0にする。


Featured Review
後でもう一度お試しください
記事が公開されると、ここに表示されます。
Tag Cloud
まだタグはありません。
bottom of page