- パスジョイントを使用したクローラーの動き
- 「検索」で特定のジョイントだけを選択
- モーションウィンドウでの「コーナー」を使用して直線的な動きにする
- シャドウキャッチャー
前回は本体の旋回部、アームのモーション対応まで行いました。
今回は足回りのモーションを割り当てていきます。
今回の解説ではShade3D Ver.22.1.1 を使用していますが、以前から存在する機能を使用するため古いバージョンのShade3Dでも作業できます。
ただし、一部の機能でStandard/Professional版の機能を使用します。
この部分は注意書きを記載することにしました。
足回りは以下のようになっています。
クローラーシューの回転
チュートリアルの「スプロケットとローラーチェーンを動かす」を参考に、パスジョイントに沿って1つ1つのクローラーシューの部品を移動させます。
クローラーシューをモデリングした時の「閉じた線形状」をパスジョイントのために使うことにしました。
クローラーシューの部品ごとに、閉じた線形状のコントロールポイントを追加
クローラーシューでのパスジョイントによる移動処理は、部品1つに対して「閉じた線形状」「パスジョイント」「クローラーシューのベルト1つ分」が1組となって動きを与えます。
1組は以下の動画のような動きになります。
この場合「閉じた線形状」の始点に部品の形状が存在する必要があります。
そのため、部品の中心ごとにコントロールポイントを新たに追加していきました。
線形状へのコントロールポイントの追加はナレッジベースの「線形状やポリゴンメッシュの稜線にポイントを追加して分割 (コントロールポイントを追加)」をご参照くださいませ。
パスジョイントを追加
形状編集モードで「閉じた線形状」のコントロールの始点を確認します。
この始点と対応するベルト1つ分が同一位置にあるようにします。
このときの線形状の始点は、コントロールポイントを1つ選択してメインメニューの「スクリプト」-「選択した点を始点に」を選択することで変更できます。
「閉じた線形状」をブラウザで選択した状態で、ツールボックスの「パート」-「ジョイント」-「パス」を選択。
「閉じた線形状:移動パス」と表示されます。
パス内に「ベルト1つ分」を入れます。
「閉じた線形状」の始点に「ベルト1つ分」の中心が必要があります。
以下が1組分になります。
パスジョイントの方向を制御
この機能はShade3D Standard/Professional版で使用できる機能になります。
ブラウザでパスジョイントを選択し、形状情報ウィンドウの「パスジョイント属性」で
「方向制御する」チェックボックスをオン、「上方向」を「Z」としました。
これで前述の動画のような動きになりました。
それぞれのベルト1つ分ごとにパスジョイントを与える
「閉じた線形状」と「パス」を複製し、すべての「ベルト1つ分」にパスジョイントを与えていきます。
パート内に「閉じた線形状」と「パス」を入れて、これを複製して使用することにしました。
メインメニューの「スクリプト」-「選択した点を始点に」を使って、線形状上のコントロールポイントの指定を変更。
その位置を中心としている「ベルト1つ分」をパスに入れます。
この作業をすべてのクローラーシューの部品に対して行いました。
もう片側にクローラーシューごと複製
これで半分のクローラーシューのモーション用のパスジョイント指定ができました。
上面図で、Z軸方向に反対側のクローラーシューを削除しパスジョイントを与えた側のクローラーシューを複製、-Z方向に平行移動させます。
親のパートで面反転を行っている場合この操作でクローラーシューの面が反転してしまうことになるため、
ブラウザでクローラーシューを入れているパートの面反転をオンにします。
まとめてパスジョイントを動かす
このクローラーシューには、それぞれの「ベルト1つ分」ごとにパスジョイントが指定されています。
このパスジョイントのモーション情報をまとめて変更して動作を確認します。
複数のパスジョイントをブラウザで選択し、形状情報ウィンドウの「パスジョイント属性」の「パス」のスライダを調整するとパスジョイントの値をまとめて変更できます。
パスジョイントだけを一括して選択
ブラウザ上で手動でパスジョイントを選択してもいいですが、一括して選択します。
この作業は検索機能を使うのが便利です。
ブラウザで対象のパートを選択し「検索」ボタンをクリックします。
検索ウィンドウが表示されるため「対象」で「ジョイント」「パス」を選択。
検索ウィンドウの「検索」ボタンをクリックします。
すると、ウィンドウ下のリストにパスジョイントが列挙されます。
「全て選択」ボタンをクリックします。
これで、ブラウザでは選択したパート内のパスジョイントだけが選択されます。
検索ウィンドウは不要になったため閉じておきます。
パスジョイント値を変更
形状情報ウィンドウの「パスジョイント属性」で「パス」のスライダを変更することで、クローラーシュー全体が動くことを確認できます。
ただ、計算負荷が高いからかプレビューの更新に時間がかかります。
そのため、ここでは仮キーフレームを与えてクローラーシューが回転しているのを確認しました。
※ なお、キーフレームを与えて一括でキーフレームを追加する際はクローラー内のパスジョイントより親に、別のジョイントを与える(今回はボールジョイントを与えます)必要があります。
キーフレームについては後々与えていくため、ここでは解説は後回しにします。
アイドラとスプロケットの回転
クローラーシューのベルトの回転が確認できたため、次にクローラーの前後のアイドラとスプロケットを回転ジョイントで回転できるようにします。
以下のように4か所に回転ジョイントを入れました。
この4つ以外に上下に複数のローラーがありますが、回転しても見えにくいためそれらは回転ジョイントを入れないようにしました。
ルートのボールジョイントを追加
現状は以下のような構成になりました。
大きく「足回り」と「回転_本体」の2つに分かれ、
足回りではクローラーシューやアイドラ、スプロケットが入っています。
「回転_本体」には本体部とアーム部が入っています。
それぞれにジョイントがある状態です。
ショベルカー自身の移動のため、形状のルートにボールジョイントを加えます。
ショベルカーの中央下部にボールジョイントを配置。
「ボールジョイント_ショベルカー」という名前に変更しました。
ブラウザでは以下のようにルートにボールジョイント「ボールジョイント_ショベルカー」がある状態です。
ボールジョイントを使用することで、ショベルカー自身の回転や前進はこれ1つで行うことができます。
ショベルカーのキーフレームを割り当て
それでは、ショベルカーのキーフレームを割り当てていきます。
ジョイントは「ボールジョイント_ショベルカー」をルートとして、階層構造で
ボールジョイント/回転ジョイント/パスジョイント/直線移動ジョイントが存在する構成になっています。
アニメーションの動きは、以下のストーリーを与えることにしました。
- アームを振り上げる
- 少し前進
- その場で旋回
- 本体部を旋回し、アームを下ろして土を掘る動作を行う
モーションを行うためのジョイントは階層構造にはなっていますが連動しているわけではない、という点に注意してください。
クローラーのアイドラとスプロケットが回転しても、クローラーシューが連動するというわけではありません。
アーム部を動かしても、油圧シリンダーが連動するというわけではありません。
「連動して見えるように、個々に動きを与える」ことになります。
アームを振り上げる
ジョイントモードに移行し、モーションウィンドウで「シーケンス」チェックボックスをオンにします。
一番始めの姿勢はモデリング直後の現在の状態としました。
ブラウザでルートのボールジョイントを選択しモーションウィンドウの0フレーム目に移動、
モーションウィンドウ上の「+」ボタンを押してキーフレームを登録します。
モーションウィンドウでフレーム位置を移動し(ここでは50フレーム目としました)、正面図でジョイントを選択して回転させます。
この操作はジョイントモードで行っています。
油圧シリンダーを連動させるため、透視図で油圧シリンダーの向きを調整。
直線移動ジョイントをドラッグして先端を伸ばします。
他のアームのジョイントも同様に調整します。
これらはすべてジョイントモードを使い、透視図または三面図上で操作できます。
ルートのボールジョイントを選択し、モーションウィンドウの「+」ボタンを押してキーフレームを登録します。
ルートのジョイントでキーフレームを割り当てることで、子のジョイントもまとめてキーフレームが割り当てられます。
モーションをプレビューすると以下のようになりました。
少し前進
足回りのクローラーを動かして、前進させるモーションを与えます。
クローラーを動かすには、アイドラとスプロケットの回転、クローラーシューのパスに沿った移動、が連動しているように見せる必要があります。
モーションウィンドウで80フレーム目に移動し、ここに少し前進したときのキーフレームを登録します。
アイドラの回転ジョイントを選択し45度の回転を行いました。
アイドラとスプロケットの合計4つとも同じ回転量とするため、形状情報ウィンドウの「回転」スライダで45と入力しています。
まずは4つ分の回転ジョイントですべて45度回転を行いました。
いったんルートのボールジョイントをブラウザで選択し、80キーフレーム目でキーフレームを登録します。
50フレーム目から80フレーム目をモーション再生すると以下のようになりました。
次にクローラーシューを動かします。
モーションウィンドウで80フレーム目に移動しておきます。
ルートのボールジョイントを選択し検索ウィンドウを表示。
検索ウィンドウで「対象」を「ジョイント」「パス」として「検索」ボタンをクリック、「全て選択」ボタンをクリックします。
これで、パスジョイントがすべて選択された状態になりました。
この検索ウィンドウからのパスジョイントの選択操作は頻繁に行うため、検索ウィンドウは表示したままにしておきます。
形状情報ウィンドウの「パス」のスライダを変更すると、クローラーシューが回転するのを確認できます。
パスジョイントの値を0.05として、ルートのボールジョイントをブラウザで選択しキーフレーム登録することになります。
ただ、今回の配置では向きが逆になっていました。
そのため、以下の調整を行いました。
逆向きに回転する場合は、0フレーム目のパスジョイントの初期値を1.0として追加でキーフレーム登録し(既存キーフレームがあるため上書きされます)、
80フレーム目のパスジョイントは0.95のように1.0よりも小さい値を指定します。
なお、パスジョイントのジョイント値は、パスの元となる線形状のコントロールポイントの並び順に左右されます。
モーションウィンドウで再生して動きを確認します。
今回のモーションの動きは非常に重い作業になります。
そのため、そのままの状態だと確認しづらいです。
モーションウィンドウの時計マークのボタンをクリックし「フレームスキップ」「簡易表示」をオフにすることで、
再生速度は低速になりますがフレームを飛ばすことなく再生されます。
モーション再生した結果は以下のようになりました。
もしアイドラとスプロケットの回転とクローラ―シューの回転がずれている場合は、
80フレーム目にどちらかのジョイントを変更してキーフレームを上書き登録するようにしてください。
このとき、キーフレーム登録する際は常にルートのボールジョイントを対象に行うようにします。
これでクローラーは前進の動き(回転)ができたため、ルートであるボールジョイントを使って-X方向に前進させます。
ジョイントモードとなっていることを確認します。
80フレーム目に移動し、ブラウザでルートのボールジョイントを選択。
上面図でマニピュレータで-X方向に移動させました。
これはボールジョイントの形状情報ウィンドウで「オフセット」のX値でマイナス値を入れても同様の操作を行えます。
ここではオフセットのX値を-300としました。
現在はルートのボールジョイントが選択された状態であるので、そのままモーションウィンドウでキーフレーム登録します。
50フレーム目からモーション再生すると以下のようになりました。
最初と最後のほうは、アイドラとスプロケットの動きが止まって滑ったような動きになっています。
これはモーションウィンドウのグラフが滑らかになっているのが原因になります。
スプロケットの回転ジョイントを1つ選択し、
モーションウィンドウの縦方向のスケールを+ボタンを押して拡大すると、カーブの末端が滑らかになっているのを確認できます。
80フレーム目のキーフレームが選択された状態で「コーナー」チェックボックスをオンにすると、このモーションカーブの選択のハンドルが折られました。
手前の50フレーム目も同じ処理を行いました。
アイドラとスプロケットの4つの回転ジョイントは1つ1つこの処理を行います。
修正後に再生すると以下のようになりました。
これで前進の動きを与えることができました。
正確にはクローラーシューのパスジョイントも個々にこの処理を行ったほうがいいのですが、数が多いためここではスキップしました。
その場で旋回
ショベルカーを旋回させるためには、足回りのクローラーは左右で逆回転することになります。
旋回は110フレーム目にキーフレームを与えて、80フレーム目から110フレーム目の30フレームで行うとしました。
+Z側のクローラーは前進、-Z側のクローラーは後進とします。
+Z側のクローラーは110フレーム目でアイドラとスプロケットの回転ジョイント値は45.0から+75.0度分の120.0に移行。
パスジョイントは0.95から-0.15分の0.8に移行。これは連動しているように微調整して合わせるようにしました。
-Z側のクローラーは逆回転となるため、アイドラとスプロケットの回転ジョイント値は45.0から-75.0度分の-30.0に移行。
パスジョイントは0.95から+0.15分の1.1に移行。
0.0-1.0の範囲を超えるため、形状情報ウィンドウで「範囲」チェックボックスをオフにしてジョイント値1.1を指定しました。
パスジョイントの場合は範囲チェックボックスをオフにした場合は、プラス方向の値を指定することで線形状上を繰り返す動きになります。
マイナス値は指定できません。
110フレーム目であることを確認し、ルートのボールジョイントでキーフレームを登録しました。
80フレーム目から110フレーム目までをモーションウィンドウで再生しました。
これで、クローラーの左右で逆の動きとなりました。
モーションウィンドウで110フレーム目になっているのを確認、ジョイントモードになっているのを確認します。
ルートのボールジョイントを選択、Y軸中心に-50.0度回転させました。
これは形状情報ウィンドウのボールジョイント属性の「回転」のY値を変更しています。
110フレーム目でキーフレーム登録してモーション再生すると以下のようになりました。
これで、クローラーが回転しつつ旋回する動きになりました。
本体部を旋回し、アームを下ろして土を掘る動作を行う
110フレーム目から130フレーム目にかけて、「回転_本体」の回転ジョイントを選択しY軸中心の回転を行いました。
130フレーム目で本体部を旋回させてから、ルートのボールジョイントを選択してキーフレーム登録。
140フレーム目でアームを少し振り上げた状態でキーフレーム登録。
170フレーム目でアームを振り下ろしてキーフレーム登録、としました。
本体部の旋回やアーム部のモーション割り当ては回転ジョイントと油圧シリンダーの調整のみになるため、作業内容は今までのキーフレーム割り当てと同じです。
以上の0フレーム目から170フレーム目までをモーション再生しました。
ただし描画の負荷に左右されるため、再生速度は一定ではありません。
そのため、Shade3Dのアニメーションの場合はアニメーションレンダリングしてみないと
最終的にどうなるか把握しづらいかもしれません。
アニメーション設定でフレーム数を170と変更しました。
アニメーションレンダリング
170フレーム分をアニメーションレンダリングしました。
手法「パストレーシング」、大域照明「パストレーシング」、イラディアンスキャッシュなし、
AIノイズ除去有効、としてレンダリングしています。
すでに一回静止画として背景含めてレンダリングしているため、後はアニメーションレンダリングするだけになります。
なお、AIノイズ除去はShade3D Ver.22以降のStandard/Professionalで使用できる機能になります。
アニメーションレンダリングを行うと以下のようになりました。
クローラーシューのプロシージャルテクスチャの模様がついてきていません。
後、少し全体的な動きが早い感じですね。少し速度を落としたほうがよさそうです。
地面もせっかくですので消して影だけ落とすようにし、背景の芝生を活かしてみましょう。
クローラーシューのプロシージャルテクスチャが不正になった原因
マッピング時にプロシージャルテクスチャの「スポット」や「雲」を使った場合、
初期状態では「ローカル座標」を基準にマッピングされます。
そのため、モーションで動いてもずれることはありません。
クローラーシューのマスターマテリアルを選択し「その他」ボタンを押して「ローカル座標系」を確認しても、
チェックボックスが付いていてローカル座標で処理されています。
次に、ブラウザで「ベルト1つ分」のマテリアル割り当てを確認するとここにはマテリアルが割り当てされていませんでした。
親の「ベルトとクローラーシュー」パートにクローラーシューのマテリアルが割り当てられており、ここがプロシージャルテクスチャのローカル座標のベースとなってしまったようです。
この場合、「ベルト1つ分」ごとにマテリアルを割り当て直す必要があります。
「ベルトとクローラーシュー」で割り当てられていたマテリアルを表面材質ウィンドウの「削除」ボタンを押して削除します。
「ベルト1つ分」をそれぞれ選択し、表面材質ウィンドウの「使用」からクローラーシューのマスターマテリアルを与えました。
これは1つ1つ手作業で行います。
複数選択した形状に対して、マスターマテリアルをまとめて割り当てることはできません。
アニメーション速度を下げる
アニメーション設定で「ステップ」を1.0から0.7としました。
これで30%低速になります。
これにより、レンダリングフレーム数やレンダリング時間は増加することになります。
背景の地面に影を落とす
Shade3Dでは「シャドウキャッチャー」を使用することで、背景の地面に対して直接照明の影を落とすことができます。
地面の形状をブラウザで選択し、形状情報ウィンドウのバウンディングボックスで十分なサイズになるようにXとZ値を調整します。
ブラウザでオプションを表示し、地面の「シャドウキャッチャー」をオンにします。
静止画レンダリングを行い、影の落ち具合やクローラーシューのマテリアルの再割り当てで漏れがないか確認します。
直接照明の影が濃いため、少し薄くします。
無限遠光源ウィンドウの「詳細設定」で「影」を0.8としました。
静止画レンダリングを行います。
これで問題なさそうです。
準備ができたら、アニメーションレンダリングを行います。
2回目のアニメーションレンダリング
再度アニメーションレンダリングを行いました。
これでかなりいい具合になりました。
ケーブル類を配置
アニメーションはここまでになりますが、1つ装飾としてのケーブル類を配置していませんでしたので追加でモデリングしました。
線形状に対して「掃引 円」機能を使用してチューブ状のケーブルを配置していきます。
この機能はShade3D Standard/Professional版で使用できる機能になります。
なお、ケーブルについてはモーション対応しません。
モーション対応する場合は、ボーン+スキンもしくはボールジョイント+スキンを使うことになります。
チュートリアルの「ロボットアームを動かす」でケーブルを使ったモデリングの場合のモーション指定を行っているため、
自信がある方は試されるのもいいかもしれません。
ケーブルとなる線形状を配置しました。
対象となる線形状をブラウザで選択し、ツールボックスの「生成」-「プラグイン」-「掃引 円」を選択。
「掃引 円」ダイアログボックスでOKボタンを押した後、半径を指定。
ここでは10(mm)としました。
以下のように形状化しました。
マスターマテリアルを与え「ケーブル」という名前に変更。
黒寄りのマテリアルとしました。
他の線形状も「掃引 円」で半径を与えて形状化し、マテリアルマスターマテリアル「ケーブル」を割り当てました。
少し太めの半径20(mm)としました。
レンダリングして確認します。
後は汚しを部位ごとにテクスチャで与えていったり、本体部でロゴのペイントを入れたりと装飾は追加していけそうです。
ショベルカーはここまでです。
手順は多いですが、モデリングからモーション設定、アニメーションレンダリングまで一通り行いました。
次回は別テーマの解説に入る予定です。