プロシージャルマテリアルで数学的な図形を表現する方法[Blender×ProceduralMaterial]

Blender×Python

Blenderでマテリアルを編集する方法としてシェーダベースで操作ができるプロシージャルマテリアルと呼ばれる便利なものがあります

今回はそのプロシージャルマテリアルを使用することで数学的な図形を表現する方法を解説していきます

とりあえずシンプルな例として下の図のように平面に円を作成します

まずはマテリアルを適用するための平面をシーン内に追加します

その後マテリアルを新規追加し、Shadingタブに移動します

これでプロシージャルマテリアルを操作する準備が整いました

実際のノード

以下の図が実際のノードを組んだ状態です

順に説明します

1 Texture Coodinate

まずは1のTextureCoodinate、これはマテリアルを適用するオブジェクトに対してどの座標系を使用するかを決定します(今回の例では平面のオブシェクトのUV座標系を使用)

UV座標では座標の値が0~1の間で表現され、各座標は上の画像のようになります

今使用している平面のオブジェクトは正方形で、UV展開が自動的に行われており各頂点がUV座標の端に位置している(もう少しな複雑なオブジェクトを使用する場合は考えてUV展開する必要がある)

2 Separate XYZ

ここではTexture Coodinateから出てきたUV座標をそれぞれU成分、V成分に分割している

XからはU座標、YからV座標が出力されている

円の方程式

ここから今回表現したい円の方程式を考慮してノードを組んでいく必要がある

中心座標(0,0)、半径rの円の方程式は

$$x^2 + y^2 = r^2$$

で表されるUV座標上では座標(0,0)の位置を円の中心にすると円の4分の1しか見えないので平面の中心に円の中心を合わせるためには円の中心の座標を(0.5,0.5)に移動させる必要がある

3 円の中心位置を変更

そこで3のMathノードでSubtractを選択し、それぞれx,yの各座標から0.5を引いている

4

その後4で、MathノードでPowerを選択し、円の方程式通りにそれぞれx,yを2乗している

5

さらに5でMathノードのAddを使用し以上の2つの値を足している

ここまでで円の方程式の左辺が以下のようになっている

       $$(x-0.5)^2 + (y-0.5)^2$$

6

プロシージャルマテリアルを使用して方程式を表現したい場合、

$$x^2 + y^2 = r^2$$ のような ”=” に該当するノードはないので、

等式ではなく不等式を使う必要がある

そこで6ではMathノードのGreater Thanを使用し、円の方程式の内部と外部を分けている

内部→0(黒)  外部→1(白)

この例では

    $$中心(0.5, 0.5) 半径が \sqrt{0.2} の円を作成$$

7

7ではMixRGBを使用することで自由に色が変更できるようになる

そして8で全体のoutputが完了

以上のようなノードの組み方で様々な方程式をマテリアルとして表現することができる

作例

試しに、野球のボールのマテリアルを作ってみました

まだまだリアルにはほど遠いですが、簡単に表現したいときには使えそうです

Blenderを始めた頃はプロシージャルマテリアルにかなり難しいイメージを持っていて、なかなか取り組んでこなかったのですが少し使えるとかなり便利だと感じます。

コメント

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