見出し画像

シェーダー遊び①ObjectLocation

シェーダーの Color をオブジェクトの位置によって変化させる遊びです。

画像1

画像4

RGBノード

Add → Input → RGB を追加し Color を繋ぎます。

画像2

画像3

ブロックの色が変わります。

画像5

好きな色に変更できます。

画像6

画像7

MixRGBノード

Add → Color → MixRGB を追加します。

画像8

もう一つRGBノードを追加し、下図のように繋ぎます。

画像9

二色が混ざった色になります。

画像10

Fac の値で二色の混ざり具合を調整できます。

画像11

画像12

Object Infoノード

Add → Input → Object Info ノードを追加します。

画像13

Object Info ノードの Location は各オブジェクトの座標 (ワールド座標) です。

画像14

Separate XYZノード

今回はこの座標の値を MixRGB の Fac に繋ぎたいのですが、座標は xyz の三次元ベクトルなのに対し Fac は一次元のため変換が必要です。

Add → Converter → Separate XYZ を追加し Location と Vector を繋ぎます。
これで x 座標のみを取り出せます。

画像15

画像16

Map Rangeノード

さらにMixRGB の Fac は 0.0 ~ 1.0 の範囲でしか効果がないため、取り出した x 座標の値を Map Range で変換します。

Add → Converter → Map Range を追加し、Separate XYZ の X と Value、Result と Fac を繋ぎます。

画像17

画像18

上図のように設定すると、オブジェクトの x 座標が -20 ~ 20 の範囲で変化しても 0.0 ~ 1.0 に変換できます。

レンダリング

全体としては下図のような構成になります。

画像19

オブジェクトを原点に配置してレンダリングすると、Fac = 0.5 と同じ結果になります。

画像20

x = -30 ~ 30 で動かしてみると、青から赤へ徐々に変化します。

画像21

応用

このシェーダー遊びはもっと複雑なモデルでもできます。

Mecabricks 製シェーダーの場合、共通部分である Base Material を改造していきます。右上のグループ展開ボタンを押します。

画像22

下図のようにノードを追加します。先ほどと大体同じです。
違いは MixRGB の Color の出力先が多いくらいです。

画像23

共通部分を改造することで、別々の色のブロックも一度に変化させることができます。

画像24

カメラをモデルと一緒に動かせば、こんな感じにもできます。

画像25

Animation Nodesについて

このように Blender の標準機能だけでもノード遊びは楽しめますが、Animation Nodes というアドオンをインストールすればさらに自由に遊べるのでお勧めです。

ワールド座標だけでなく、他のオブジェクトとの距離などを入力として使えたり、オブジェクトのスケールを変更できたりもします。

この記事が気に入ったらサポートをしてみませんか?