22/5/2023

Blenderで水面にモノを浮かべるには?コンストレイントで悩まないヒント

水面にモノを浮かべると言っても今回は物理シミュレーションではなく、海洋モディファイアーによる水面の動きに自動的に追従するようにしてみます。
要は水面上のオブジェクトに対し、マニュアルではなく自動でアニメーションを付けることが目的です。

前回作ったループする水面を元に作業して行きます。

Blenderで水面をループさせる

1. 全体のフレーム数を前回の24から、この例では240に増やします。

海洋モディファイアーの設定:フレーム0

2〜5.『海洋』モディファイアーのアニメーションキーフレームを下記のように設定します。

『海洋』モディファイアー1「生成」
フレーム0240
時間5.0010.00
スケール3.0000.000
『海洋』モディファイアー2「ディスプレイス」
フレーム0240
時間0.005.00
スケール0.0003.000

6. キーフレームを変更したら「補間モード」を「リニア」にします。

海洋モディファイアーの設定:フレーム240

『海洋』モディファイアーのその他の設定は任意です。2つの『海洋』モディファイアーで「時間」と「スケール」以外の数値が全て一致していないと滑らかにループしません。
もしループがぎこちない場合は2つの『海洋』モディファイアーの設定が一致しているか確認してみてください。
逆にループさせる必要がない場合は『海洋』モディファイアーは一つで大丈夫です。

新規グリッドを追加

「追加」↓「メッシュ」→「グリッド」、
または Shift+A で新規メッシュから「グリッド」を追加。

グリッドに新規頂点グループの追加と割り当て

  1. タブキー等で編集モードにします。
  2. オブジェクトコンストレイントから、
  3. 全てが選択されている状態で新規「頂点グループ」を追加します。
    任意の名前に変更。今回の例では「Gridグループ」という名称にしています。
  4. 「割り当て」ボタンを押します

重要ポイント

このとき「割り当て」ボタンを押すのを忘れないでください。
期待通りにならない場合、この「割り当て」を忘れている可能性が高いです。
「割り当て」がちゃんと設定されたかどうか確かめるには、選択解除しておいて「選択」ボタンを押してみれば判ります。
グリッドが全て洗濯されればOKです。

シュリンクラップ・モディファイアーを追加

オブジェクトモードに戻り、

  1. 「モディファイアー」タブから、このグリッドに
  2. 「シュリンクラップ」モディファイアーを追加します。
  3. ターゲットに水面オブジェクト(この例ではCube)を指定します。

水面に浮かべるオブジェクトにコンストレイントからトランスフォームコピーを設定

水面に動きをシンクロさせるオブジェクトを用意します。
船とか漂流物などが考えられますね。
この例ではアヒルちゃんを使用しています。

原点の位置より下が水面下になります。

オブジェクトコンストレイント→トランスフォームコピーの設定

  1. プロパティウィンドウのオブジェクトコンストレイントから、
  2. トランスフォームコピー*」を追加
  3. ターゲットを「グリッド」、
    頂点グループを「Gridグループ」にそれぞれ指定。
  4. 「ターゲットのせん断を除去」にチェックします。

重要ポイント

*「位置コピー」だと文字通り位置しかコピーされないため、水面の状況に応じた傾きが反映されません。
「トランスフォームコピー」なら傾き等も含めて反映させることができます。
ただ、ターゲットオブジェクトを変形させたくはないので「ターゲットのせん断を除去」にチェックしておきます。

これで設定完了です。
アニメーションさせると水面に自動的に追従するようになります。

もしアニメーションさせてもオブジェクトが動かない、つまり追従しない場合は……、
ええい、もう言い切ってしまおう!
上記のグリッドで頂点グループ割り当てボタン押し忘れています。
自分もこれを忘れており初め動かずに悩みました。

また、オブジェクトが意図せず拡大されてしまう場合等は、「ミックス」の設定を「置き換え」から「オリジナルの前(フル)」等に変えてみてください。

同じ悩みで検索している誰かのお役に立てれば幸いです。