【blender4.2】シェーダーエディターで使用するノードについて

シェーディング

私が使用したノードの中で理解した内容のみ更新していきます。

簡略的ではなくなるべく詳細に記載していこうと考えていますので記事の1つ1つの項目が長くなるかもしれませんがご了承ください。

なるべくノード別で記載しますので目次を活用して必要な情報へアクセスしてください。

入力(Input)

テクスチャ座標(Texture Coordinate)

オブジェクト(Object)

テクスチャ座標のオブジェクトをマテリアル出力に接続した結果が下記の動画になります。

オブジェクトをマテリアル出力に接続するとなぜこの配色になるのかを理解するには下記の内容を理解する必要があります。

  1. 原点の位置
  2. オブジェクト出力と色の関係
  3. 座標値の正規化
原点の位置

原点の座標を基準に反映される色が決まっていきます。

原点の座標がなぜ大事なのかは後半の説明にある正規化の話で分かると思います。

原点と色が関係しているを視覚的に知る方法は下記の動画を参照してください。

<やり方>
 1.3Dビューポートの右上にあるオプション内の原点にチェックを入れます
 2.対象のオブジェクトを選択し、Gキーで原点を移動

動画のように原点を移動させると配色も変化することがわかると思います。

ここで一番大事なのは原点の位置を基準としたXYZ値になります。

原点の値を0とした時、XYZ値は以下のようになります。

  • X軸:原点より左は負の値、右は正の値
  • Y軸:原点より手前は負の値、奥は正の値
  • Z軸:原点より下は負の値、上は正の値

3Dビューポートの右上に表示されているギズモからも正負の確認を行うことができます。

今は「へぇー、そうなんだ」程度で大丈夫です。

オブジェクト出力と色の関係

オブジェクト出力は、オブジェクト上の各点のX、Y、Z座標点を出力します。

カラー情報はR(赤)、G(緑)、B(青)の値で表され、座標と色の関係は下記のようになります。

  • X座標:赤(R)
  • Y座標:緑(G)
  • Z座標:青(B)

これはBlender内全般同じ認識です。

座標値の正規化

<正規化とは>

時間で考えると簡単にイメージできるかもしれません。

例えば、

「A点からB点までは60秒かかり、B点からC点までは2分かかりました。合計何分かかりましたか?」

という問題があった時、秒を分に直し、2つの時間を足して答えを求めると思います。

この異なる基準や単位を持つ値を共通の基準に合わせる行為が正規化するということになります。

では、座標値の正規化とは何をしているかの話に戻ります。

まず、Blenderで使用する色の値とテクスチャ座標から出力される値は異なる値となっています。

詳細は下記になります。

  • Blenderでの色の値:0~1の範囲
  • テクスチャ座標の値:-1~1の範囲

テクスチャ座標の値をBlenderの基準に正規化する時には下記のような式が使われます。

(座標値×0.5)+0.5=正規化された値

この式を使ってRGB座標を算出すると立方体の配色の説明ができます。

立方体を正面から見たときの色は画像のようになっています。

画像は正面図になるので、原点から見て右、上、奥が正の値となります。

正と負の位置関係を認識出来たら、今度はテクスチャ座標の値を考えます。

  • X軸:右の辺が+1で左の辺が-1
  • Y軸:手前の面が-1で奥の面が+1
  • Z軸:上の辺が+1で下の辺が-1

これらを踏まえて式に代入すると青の場合

  • X軸:(-1×0.5)+0.5=0
  • Y軸:(-1×0.5)+0.5=0
  • Z軸:(+1×0.5)+0.5=1

となります。

各軸の色成分に当てはめると

  • 赤(X軸):0
  • 緑(Y軸):0
  • 青(Z軸):1

となるので左上の配色は青になるということです。

厳密には左に向かうほど青になるという言い方が正しいですね。

正規化した値を確認したい場合は、シェーダーのコンバーター内にあるXYZ合成または、カラー合成をマテリアル出力に接続して確認してみてください。

コンバーター(Converter)

数式(Math)

加算・減算・乗算についてはわかりやすい説明をしていた下記の動画の説明を引用させてもらってます。

01という概念を持って読んでください。

また、共通機能のClampについても説明します。

範囲制限(Clamp)とは

数式ノード(Math)の出力値を0~1の範囲に制限する機能です。

無効/有効それぞれの計算結果については下記を参照してください。

無効の場合の計算結果
  • 0 + 0 = 0
  • 1 + 0 = 1
  • 1 + 1 = 2
  • 0 – 1 = -1
有効の場合の計算結果
  • 0 + 0 = 0
  • 1 + 0 = 1
  • 1 + 1 = 1
  • 0 – 1 = 0

というような感じで無効の場合は通常の数式計算のままですが、有効の場合は0以下は0に1以上は1に制限されます。

視覚的に試したい場合は、加算(Add)の具体例で試してみるとわかりやすいと思います。

どんな時に有効にするのか

シェーダー内での計算結果が予期せず極端な値(非常に大きい値や負の値)になるのを防ぎたい時に有効にしましょう!

加算(Add)

役割

入力Aと入力Bの値を加算した結果を出力します。

具体例

縦縞と横縞のテクスチャを加算した場合で説明します。

画像の左側にある真ん中のテクスチャが加算結果になります。

なぜ、このような結果になるかというと

  • 0(黒)+ 0(黒)= 0(黒)
  • 1(白)+ 0(黒)= 1(白)
  • 0(黒)+ 1(白)= 1(白)
  • 1(白)+ 1(白)= 1(白)

縦縞と横縞の白と黒それぞれ重なった部分で上記の計算が行われ、その結果として白が基調の網目模様になっています。

0(黒)+ 0(黒)= 0(黒)の組み合わせ以外白になるというのも特徴ですね。

Clampが無効になっている場合は、1(白)+ 1(白)= 2(白)となるので、周りの白よりも明るい白で表示されます。

減算(Subtract)

役割

入力Aの値から入力Bの値を減算した結果を出力します。

具体例

縦縞と横縞のテクスチャを減算した場合で説明します。

画像の左側にある真ん中のテクスチャが減算結果になります。

なぜ、このような結果になるかというと

  • 0(黒)- 0(黒)= 0(黒)
  • 1(白)- 0(黒)= 1(白)
  • 0(黒)- 1(白)= 0(黒)
  • 1(白)- 1(白)= 0(黒)

縦縞と横縞の白と黒それぞれ重なった部分で上記の計算が行われ、その結果として黒が基調の網目模様になっています。

1(白)- 0(黒)= 1(白)の組み合わせ以外黒になるというのも特徴ですね。

Clampが無効になっている場合は、0(黒)- 1(白)= -1(黒)となるので、計算上周りの黒よりも暗い黒で表示されるはずですが視覚的には変化を感じないと思います。

乗算(Multiply)

役割

入力Aと入力Bの値を掛け合わた結果を出力します。

具体例

縦縞と横縞のテクスチャを減算した場合で説明します。

画像の左側にある真ん中のテクスチャが減算結果になります。

なぜ、このような結果になるかというと

  • 0(黒)* 0(黒)= 0(黒)
  • 1(白)* 0(黒)= 0(黒)
  • 0(黒)* 1(白)= 0(黒)
  • 1(白)* 1(白)=1(白)

縦縞と横縞の白と黒それぞれ重なった部分で上記の計算が行われ、その結果として黒が基調の網目模様になっています。

1(白)* 1(白)=1(白)の組み合わせ以外黒になるというのも特徴ですね。

また、Subtractと似ていますが、出力結果としては微妙に差があるので注意しましょう。

除算(Divide)

役割

入力Aと入力Bの値を割った結果を出力します。

具体例

縦縞と横縞のテクスチャを減算した場合で説明します。

画像の左側にある真ん中のテクスチャが減算結果になります。

なぜ、このような結果になるかというと

  • 0(黒)/ 0(黒)= 0(黒)
  • 1(白)/ 0(黒)= 0(黒)
  • 0(黒)/ 1(白)= 0(黒)
  • 1(白)/ 1(白)=1(白)

縦縞と横縞の白と黒それぞれ重なった部分で上記の計算が行われ、その結果として黒が基調の網目模様になっています。

1(白)* 1(白)=1(白)の組み合わせ以外黒になるというのも特徴ですね。

また、出力結果は乗算と同じ結果となります。

より小さい(Less Than)

役割

入力Aの値が入力Bの値より小さいかどうかを判断します。

  • 条件が真(入力A < 入力B)の場合:1を出力
  • 条件が偽(入力A >= 入力B)の場合:0を出力
具体例

模様無しと縦縞で説明します。

まず、単純な模様が無い状態で動きを確認しましょう。

事前準備として数式ノードをより小さいしきい値を0.8に設定しましょう。

役割で説明した内容と照らし合わせると、0.79以下が白0.80以上が黒で出力されるはずです。

実際に値を入力して確認した結果が以下の動画になります。

言っていた通りの結果となりましたね。

タイトルとURLをコピーしました