布などの柔らかい形状に対して部分的に動きを付けるには
https://www.youtube.com/watch?v=5VhOShjnvmw
今回はダイナミクスのソフトボディ機能を用いて、布などの柔らかい形状に対して、部分的に動きを付ける方法をご紹介します。
このサンプルシーンでは四角い布の四隅が固定されており、ソフトボディ機能で揺らぎが表現できていますが、さらにその四隅を動かし、それに合わせて布が引っ張られるような表現が可能になっています。これをいちから作ってみましょう。
まずは板ポリゴンを作って、細かくセグメントを分割します。ではこの板を布と見立ててソフトボディを適用してみましょう。ソフトボディを適用するには、セットアップツールバー > ダイナミクス > ソフトボディをクリックします。そのままの状態で、シミュレーションボタンをクリックして、シミュレーションさせてみます。
そうすると板ポリゴンはただ単に落下していくだけです。これは布をそのまま手を放して落としたような状態なので、部分的に固定しておかないと、ただ落下するだけになってしまいます。部分的に固定させるためには、固定させたい場所にウェイトマップを作成します。
板ポリゴンの四隅の頂点を選択したら、頂点マップタブ > ウェイトマップ > (新規マップ)でウェイトマップを作成します。名称はAnchorにしておきましょう。
それではソフトボディの設定に戻ります。ダイナミクスのタブを開き、ソフトボディのカテゴリの中にあるゴール一致を100%に設定し、ゴールマップに先ほど作成したAnchorというウェイトマップを指定します。もう一度、シミュレーションボタンをクリックしてみると、全体が落下するのではなく、四隅がピン止めされたように、布がたわんだ状態になるのが確認できます。
ではこれからこの四隅をそれぞれ独立して動かしてみます。ジオメトリを動かすには、移動ツールを使えばよさそうですが、頂点モードで移動ツールを使えば、形状は変わるけれども、自由に動かせるわけではありません。またアイテムモードで移動ツールを使えば、メッシュ全体が動いてしまいます。今回のように特定のジオメトリだけを動かすには、トランスフォームのデフォーマを使います。
トランスフォームのデフォーマでは、移動する部位をウェイトマップで指定することが可能です。まずは、四隅の一つの頂点を選択し、頂点マップを作成します。そのままの状態で、デフォーマ > トランスフォームを適用します。そうすると、Transform Effectorというロケータが生成され、このロケータを移動することで、現在選択されている今作成したばかりのウェイトマップの範囲だけが移動するようになります。シミュレーションしてみると、布がたわみながら、Transform Effectorの動きに合わせて、変形するようになります。
同様に、あとの三つのコーナーに対してもトランスフォームのデフォーマを適用します。これで四隅を移動させながら、ソフトボディの影響も及ぼすことが可能になります。
この状態だと板ポリゴンは厚みがない状態で、裏から見ると見えなくなっていますので、厚みを付けてみます。最初から厚みを付けたメッシュに対してソフトボディを適用してもよいのですが、それだと計算負荷が高くなり、また望むような正確さを求めるのが難しくなるケースがあります。このため、厚みのあるメッシュに対してソフトボディを適用したい場合には、適用した後に厚みを付けることをお勧めします。
これを実現するにはプロシージャルモデリングを使います。オペレーションリストからルートとなる板ポリゴンを選択し、オペレータ追加 > ポリゴン > Polygon Extrudeで厚みを付けます。必要であれば、さらにオペレータ追加 > ポリゴン > Set Polygon Typeでサブディビジョンへと変換し、滑らかさを足してもよいでしょう。
このように設定したあとでも、シミュレーションボタンをクリックし、トランスフォームのエフェクタを操作すれば、簡単に厚みのついた滑らかな布に対して、同じような処理を行うことが可能です。
こういった一連のメッシュやトランスフォームエフェクタをひとまとめにして、シーン内の別の場所に配置したいといったときには、メッシュをトランスフォームエフェクタをグループ化し、セットアップモードに入ってからグループロケータで配置を行います。セットアップモードに入らずに配置してしまうと、初期位置が狂ってきてしまうので、必ずセットアップモードに入ってから配置するようにしてください。そうすることで正しくシミュレーションを行うことができます。