ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Blender】Blender2.8で水面(海)を作ってものを浮かせる方法

 ものすごく久しぶりのBlender関連の記事になります。

 今回はタイトルにあるようにBlender2.8を使って水面(海)を作って、そこにオブジェクトを浮かせる方法の備忘録です。

 では始めます。


1:Blenderで海の動きを作る
 Blenderを起動させてデフォルトキューブを削除した後、「Shift+Aキー」を押して出てきた中から「Mesh」→「Plane」を選択してPlaneを追加します。
f:id:rikoubou:20190705144104p:plain

 追加したPlaneを選択した状態で「Modifier」アイコンのタブを選択し「Add Modifier」のプルダウンをクリックします。
f:id:rikoubou:20190705144311p:plain

 出てきたリストの中にある「Ocean」を選択します。
f:id:rikoubou:20190705144524p:plain

 モディファイアの各設定項目について、以下の赤枠で囲ってある部分のように入力します。(※Resolutionは解像度でこの値を大きくするときめ細かい波を再現できますが、処理はかなり重くなります)
f:id:rikoubou:20190705145130p:plain

 値の設定が済んだら、1フレーム目が選択されていることを確認してから「Time」の項目上にマウスカーソルを持ってきた状態で「i」キーを押してキーフレームの登録をします。
f:id:rikoubou:20190705145808p:plain

 登録するとTimeの項目が黄色くなり、1フレーム目にひし形のマークが追加されます。
f:id:rikoubou:20190705150023p:plain

 250フレーム目まで移動させ、Timeの値を5.10などの値に変更してから同じように「i」キーを押してキーフレーム登録をします。
f:id:rikoubou:20190705150414p:plain

 キーフレームの登録が終わったら「Editor Type」のプルダウンから「Graph Editor」を選択します。
f:id:rikoubou:20190705150711p:plain

 グラフエディタの画面に切り替わるので、下の画像の赤枠の部分をクリックして選択した後、ドラッグで移動させて直線になるように調節します。
f:id:rikoubou:20190705151012p:plain

 調節して以下のように大体直線になるようにします。
f:id:rikoubou:20190705151219p:plain

 プルダウンから再び「Timeline」を選択して戻します。
f:id:rikoubou:20190705151513p:plain

「Play Animation」ボタンをクリックしてアニメーションを再生してみます。
f:id:rikoubou:20190705151748p:plain

 実際にアニメーションを再生すると以下のようになります。
f:id:rikoubou:20190705153217g:plain

 PCスペックの関係でFPSは出ていませんが、波打っているような動きになっているのがわかると思います。

 これで海の動きは完成です。


2:海の見栄えをよくする
 海の動きはできたので、海の見栄えをよくするためにMaterialの設定をしていきます。

 Planeを選択した状態で画面のタブから「Shading」を選択します。
f:id:rikoubou:20190705153746p:plain

 Shadingの画面に切り替わるので、以下の赤枠にある「New」ボタンをクリックします。
f:id:rikoubou:20190705154020p:plain

 すると以下のように「Principled BSDF」というノードと「Material Output」というノードが追加されます。
f:id:rikoubou:20190705154241p:plain

「Principled BSDF」ノードのBase Colorを青っぽい色に変更し、その他赤枠の部分の値を変更します。
f:id:rikoubou:20190705154737p:plain

「Principled BSDF」ノードの変更が終わったら「Shift + Aキー」を押して出てきたメニューから「Input」→「Attribute」を選択します。
f:id:rikoubou:20190705155044p:plain

「Attribute」ノードが追加されるので、NameのところにOceanモディファイアで設定した名前と同じものを入力します。
f:id:rikoubou:20190705155456p:plain

「Shift + Aキー」を押して「Shader」→「Emission」を選択します。
f:id:rikoubou:20190705155753p:plain

 ノードが追加されるので「Attribute」ノードのColorと「Emission」ノードのColorをドラッグでつなぎます。
f:id:rikoubou:20190705160734p:plain

「Shift + Aキー」を押して「Shader」→「Add Shader」を選択します。
f:id:rikoubou:20190705160508p:plain

 ノードが追加されるので、ドラッグして各ノードを以下のように繋げます。
f:id:rikoubou:20190705160849p:plain

「Layout」タブに戻り、「Viewport Shading」のところから「Rendered」のアイコンをクリックすると、レンダリング結果の画面が表示されます。
f:id:rikoubou:20190705161602p:plain

 これで海のMaterialの設定が終わりました。

 この状態で再度アニメーションさせてみると以下のようになります。
f:id:rikoubou:20190705162636g:plain

 ちょっと荒々しい感じの海になったかと思います。

 これで海部分ができたので、オブジェクト名を「ocean」に変更しておきます。
f:id:rikoubou:20190705163432p:plain


3:ものを浮かべるためのオブジェクトを準備する
 海部分ができたので今度はものを浮かべるための準備をしていきます。

「Shift + Aキー」で「Mesh」→「Plane」を選択します。
f:id:rikoubou:20190705163657p:plain

 追加された「Plane」を選択した状態で左上のプルダウンから「Edit Mode」を選択する。
f:id:rikoubou:20190705163945p:plain

「Edit Mode」に切り替わるので「Edge」→「Subdivide」を選択して面を分割します。
f:id:rikoubou:20190705164232p:plain

 頂点が増えて「Subdivide」の項目が出てくるのでそこをクリックします。
f:id:rikoubou:20190705164604p:plain

「Number of Cuts」の項目を4に設定します。
f:id:rikoubou:20190705164739p:plain

 分割後「Edit Mode」で全頂点を選択したままの状態で「Modifier」アイコンの「Add Modifier」をクリックします。
f:id:rikoubou:20190705165046p:plain

 リストの中にある「Shrinkwrap」を選択します。
f:id:rikoubou:20190705165304p:plain

「Target」のところに海のオブジェクトをである「ocean」を設定します。
f:id:rikoubou:20190705165511p:plain

 次に「Context」アイコンを選択して「+」ボタンをクリックしてグループを追加します。その状態で「Assign」ボタンを押して頂点をグループに登録します。
f:id:rikoubou:20190705165827p:plain

 これで海面の動きに合わせてPlaneが動くようになりました。


4:ものを浮かべる
 浮かべるためのPlaneの準備ができたので、次は実際に浮かべたいものの設定をしていきます。

「Edit Mode」になっているので「Object Mode」に戻ります。
f:id:rikoubou:20190705185018p:plain

「Shift + Aキー」で「Mesh」→「Monkey」を選択してSuzanneを追加します。
f:id:rikoubou:20190705185246p:plain

 追加したSuzanneを選択した状態で「Object Constrains」アイコンの「Add Object Constraint」をクリックします。
f:id:rikoubou:20190705185711p:plain

 リストの中にある「Copy Location」と「Copy Rotation」の2つを選択して追加します。
f:id:rikoubou:20190705190013p:plain

「Copy Location」、「Copy Rotation」両方において、Targetに浮かべるためのオブジェクトである「Plane」、Vertex GroupにPlaneのグループである「Group」を設定します。
f:id:rikoubou:20190705190327p:plain

 ここまでできた状態でアニメーションを再生すると、以下のように波の動きに合わせてPlaneが動き、そのPlaneの座標に合わせてSuzanneが上下に動きます。
f:id:rikoubou:20190705191535g:plain


5:浮かべたものを動かす
 4まででPlaneとSuzanneが連動するように設定できているので、Planeの座標や回転をキーフレームとして登録して移動させれば以下のように動かすことができます。

 1フレーム目の時にLocationとRotationを「i」キーでキーフレーム登録します。
f:id:rikoubou:20190705192644p:plain

 同様に250フレーム目の時に値を変更したLocationとRotationを「i」キーでキーフレーム登録します。
f:id:rikoubou:20190705192855p:plain

 アニメーションの再生を行うと以下のようにSuzanneが移動と回転を行います。
f:id:rikoubou:20190705193434g:plain


6:Planeをレンダリング時に見えなくする
 これで動き全体は完成ですが、Planeは見えてほしくないのでレンダリング時は見えないようにします。

「Plane」を選択した状態で「Object」アイコンの「Visibillity」の項目にある「Show in Renders」のチェックを外します。
f:id:rikoubou:20190705193829p:plain

 これでレンダリング時にPlaneのオブジェクトが見えなくなります。

7:その他もろもろを設定して完成
 あとは照明やカメラ、SuzanneのMaterialの設定などをして出力した完成動画が以下になります。


 以上がBlender2.8で水面(海)を作ってものを浮かせる方法です。

 割と簡単に波などを作れることがわかったので、いろいろ遊んでいきたいです。


・参考資料