シェーダー遊び①ObjectLocation
シェーダーの Color をオブジェクトの位置によって変化させる遊びです。
RGBノード
Add → Input → RGB を追加し Color を繋ぎます。
ブロックの色が変わります。
好きな色に変更できます。
MixRGBノード
Add → Color → MixRGB を追加します。
もう一つRGBノードを追加し、下図のように繋ぎます。
二色が混ざった色になります。
Fac の値で二色の混ざり具合を調整できます。
Object Infoノード
Add → Input → Object Info ノードを追加します。
Object Info ノードの Location は各オブジェクトの座標 (ワールド座標) です。
Separate XYZノード
今回はこの座標の値を MixRGB の Fac に繋ぎたいのですが、座標は xyz の三次元ベクトルなのに対し Fac は一次元のため変換が必要です。
Add → Converter → Separate XYZ を追加し Location と Vector を繋ぎます。
これで x 座標のみを取り出せます。
Map Rangeノード
さらにMixRGB の Fac は 0.0 ~ 1.0 の範囲でしか効果がないため、取り出した x 座標の値を Map Range で変換します。
Add → Converter → Map Range を追加し、Separate XYZ の X と Value、Result と Fac を繋ぎます。
上図のように設定すると、オブジェクトの x 座標が -20 ~ 20 の範囲で変化しても 0.0 ~ 1.0 に変換できます。
レンダリング
全体としては下図のような構成になります。
オブジェクトを原点に配置してレンダリングすると、Fac = 0.5 と同じ結果になります。
x = -30 ~ 30 で動かしてみると、青から赤へ徐々に変化します。
応用
このシェーダー遊びはもっと複雑なモデルでもできます。
Mecabricks 製シェーダーの場合、共通部分である Base Material を改造していきます。右上のグループ展開ボタンを押します。
下図のようにノードを追加します。先ほどと大体同じです。
違いは MixRGB の Color の出力先が多いくらいです。
共通部分を改造することで、別々の色のブロックも一度に変化させることができます。
カメラをモデルと一緒に動かせば、こんな感じにもできます。
Animation Nodesについて
このように Blender の標準機能だけでもノード遊びは楽しめますが、Animation Nodes というアドオンをインストールすればさらに自由に遊べるのでお勧めです。
ワールド座標だけでなく、他のオブジェクトとの距離などを入力として使えたり、オブジェクトのスケールを変更できたりもします。
この記事が気に入ったらサポートをしてみませんか?