blender の箱を消したら

blender を覚えたい蜂砂の発見や操作メモです。オブジェクトの動かし方は覚えたので中級者を目指したい。

Dynamic Paint をレンダリングする

Dynamic Paint がレンダリングできない?

Dynamic Paint を試してみる。ブラシとキャンバスを設定すればいいことは知っているので、まずはセッティング。 キャンバスには、板をしいて、Subdivide で超分割。分割するときは、Subdivide のオプションで数値設定するより、分割後に Shift + R(繰り返し)で思う存分やる方が楽。Dynamic Paint は頂点ペイントになるようなので、だいぶ細かめに分割した。

その上に、CurveFollow Path を設定してぐるぐるまわるサルを乗せた。

オブジェクトセッティング

このサルを板に少し触れるようにして Brush にする。サルに、[物理演算タブ]Dynamic Paint を押して、Brush を追加。パラメタはこんな感じ。SourceMesh Volume + Proximity を選んだ以外は、デフォルトのまま。Proximiy は周りを少しぼかしてくれるぽい。

サルの Dynamic Paint パラメタ

そして、板の方には、同じく[物理演算タブ]Dynamic Paint で、Canvas を追加した。パラメタはデフォルトのままだが、一番重要なのは Output。ここが赤くなっているはずなので、右側の+ボタンを押して追加する。これが、ダイナミックにペイントされた際の出力になるらしい。これに気づくまでかなり時間がかかってしまった。

板の Dynamic Paint パラメタ

あと、表示で頂点ペイントが有効になるようにビューポート右上のアイコンで、ColorからVertexを選ぶ。

ビューポート設定

これで、アニメーションさせてみると、おぉ、色がついた。

ビューポートに色がついた

よし、じゃあ早速レンダリング

レンダリング失敗

あ・・・れ?色がついてない。 どうもビューポートに反映されたところで、レンダリングに反映されるわけではないみたい。 そう、マテリアルの設定をしなければいけない。

マテリアルにVertex Paint結果を反映する

マテリアルに反映させるにしても、Vertex Paint用のノードが用意されているわけではなく、Attribute ノードにVertex Paintにつけた名前を設定して、シェーダーにつなぐものらしい。

まずは、板の[オブジェクトデータタブ]にあるVertex Colorsを開く。ここに、さっきOutputで+ボタンを押した時に新しく頂点ペイントが設定されている。この名前をコピーする。

コピーはテキストを選んでもよいのだけど、マウスオーバーした状態で Ctrl + C するだけでちゃんとできる。D&Dでまとめてパラメタの数値変更とかもだけど、こういう細かい UI の便利なところが、Blender は素晴らしいと思う。

Vertex Colors をコピー

そして、ノードエディタでシェーダーにつなぐ Attribute ノードを追加し、そこの Name に貼り付ける。

Vertex Paint 反映ノード

これでいける!レンダリングしてみる。

レンダリング失敗2

あ・・・れ?いや、色はついた、けども。なんでサルの周りだけ?そして暗いし。正しい方法があるのかもしれないけど、いろいろ試した結果、どうもこれ、キャッシュを効かせないとうまく塗れないみたい。

で、キャッシュを効かせるには、キャンバスの[物理演算タブ]Cacheが関係するのだけど、ここのBakeは一旦ファイルとして保存しないと使えない。なので、一旦 .blend ファイルとして保存する。そしてBake。ついでに、Inicial Colorが暗いので、少し色をつけてみた。

Bakeしてみた

今度こそ!レンダリングしてみる。

レンダリング成功

やっと成功しました。あとで気づいたのだけど、Bakeしなくても、ファイルを一旦保存した時点でキャッシュが効いて(?)、このようにレンダリングできてた模様。いまいちよくわからない...

ペイントのしかたもいろいろ

Brush の、Particle Systems をブラシにすることもできる。パーティクル設定したオブジェクトを走り回らせると、そこから吹き出すパーティクルがちゃんと反映される。

まわるさる

雨の表現なんかで使えるのだと思う。 ノードに設定した、Attributeの先に、ColorRampなど設定すれば、いろいろおもしろい表現もできそう。今後何かに使ってみたい。

ColorRamp追加

Canvas に設定した方も Surface TypePaint の他に、WavesDisplaceWeightが選べて、WavesDispalceは、めんどくさいノード設定なんてしなくても、選ぶだけで有効になるし、面白い動きをする。雪原の足跡、海原をヨットが進む、砲丸が土にめりこむ、とかいろいろ使えそう。