この記事の概要
プロシージャルテクスチャをご存知でしょうか。
3DCGでテクスチャというと、物体の質感を再現するために、3Dデータに貼り付ける画像と捉えることが多いです。
ですが、昨今の3DCGソフトでは計算により質感を再現する手段もあり、それがプロシージャルテクスチャです。
そして、Blenderにおけるプロシージャルテクスチャ作りが実質ビジュアルプログラミングである1ことに気がつきました。
というわけで、エンジニアとプロシージャルテクスチャは親和性が高いと考え、試しにQiitaにて記事にしてみました。
今回はテラゾータイルと呼ばれる人工大理石風のテクスチャを作成します。
完成形は次のような見た目です。
環境
Blenderのバージョンは3.5.0です。
制作
まずはテクスチャの適用先としてSphereとPlaneを配置します。
次にShader Editorを開き、Materialの編集に入ります。
最初はこのようになっていると思います。
RGBノードを追加し、Principled BSDFのBase Colorへ繋ぎます。
ここでは色を#569D6Bにしました。
現段階ではノードを追加する意味はないのですが、この後模様を増やすときにやりやすいため、追加しています。
特定の連想配列の中身を毎回取得するのは面倒だから変数として宣言しておく、みたいなイメージで捉えてください。
現時点ではこうなります。
次は、以下の工程を一気に説明します。
-
Volonoi TexutureとMappingとTexuture Coordinateを追加し、それぞれをつなぐ-
Node Wranglerを有効にしている場合、Volonoi Texutureを選択してCtrl + Tを押すだけでOK - このとき
Texuture CoordinateはObjectソケットから引っ張るようにする
-
- 先ほど追加した
RGBとVolonoi TexutureをMixで合成する-
Node Wranglerを有効にしている場合、2つのノードをCtrl + Shift + 右ドラッグでなぞるだけでOK
-
現時点ではこうなります。
以下の2つのテクスチャを、Mixによって50%ずつ重ね合わせているため、このような模様ができあがります。
Mixは、2つの引数を合成してreturnする関数と捉えてください。
ちなみにFactorが0だとAのソケットの色、1だとBのソケットの色、0.5だと50%ずつ混ざります。
この仕組みも後に使用します。
| RGB | Volonoi Texuture |
|---|---|
![]() |
![]() |
次に、Volonoi Texutureの設定をF1からN-Sphere Radiusに変え、Scaleを40とします。
これにより合成結果も変わります。
次にVolonoi TexutureとMixの間にColorRampを挟みます。
- グラデーションの仕方を
LinearからConstantに変える - バーの左側の色を以下に変える
- H:0, S:0, V:1, A:0
- Position:0.000
- バーの右側の色を以下に変える
- Hex:C4D9DA
- Position:0.450
-
ColorRampのAlphaをMixのFactorにつなぐ
仕組みは次のようになっています。
ColorRampは、あるグラデーションを別のグラデーションに置き換えるようなものです。
配列を受け取ったら処理を加えて別な配列を返す、mapな関数に近いでしょうか。
今回は、閾値より明るいなら透明(H:0, S:0, V:1, A:0)に、暗いなら#C4D9DAとバッサリ分けていたためこのように2値化されました。
| 元々 | ColorRampによる変換後 |
|---|---|
![]() |
![]() |
また、ColorRampのAlphaソケットが出力するのは透明度の分布です。
透明が0で不透明が1のため、それが白黒に置き換わり、このような柄が生成されます。
この白黒の分布をMixのFactorに繋ぐことにより、以下のように合成されます。
-
Volonoi Texutureの図柄がある場所 = 白黒の白 =Factorが1 =Volonoi TexutureにつないだColorRampで指定した色が描画される - それ以外 = 白黒の黒 =
Factorが0 =RGBで指定した色が描画される
つまり、#569D6Bをベース色に、#C4D9DAの模様が描かれます。
ここから色を足すには同じ仕組みを繰り返せば良いだけです。
Volonoi TexutureとColorRampを複製し以下のように設定を変え、もう1つMixを繋ぎます。
-
Volonoi Texuture- Scale:50.000
-
ColorRamp- Hex:2C6358
- Position:0.480
ScaleやPositionは実際に作るオブジェクトを見ながら触るようなパラメーターです。
載せてはいますが、参考程度に見てもらえれば問題ありません。
白っぽい柄だけでなく、少し濃い緑の柄も加わりました。
表情を増やすため、もう1つ色を追加します。
-
Volonoi Texuture- Scale:60.000
-
ColorRamp- Hex:050F12
- Position:0.510
かなり暗い色の柄が増えました。
ここで終わっても良いですが、今だと単に色を塗り分けたように見えるので、もう一手間加えてみます。
ベース色の部分と、柄の部分とでツヤツヤ感を変えて、柄の部分を少しだけ凹ませましょう。
仕組み的には先ほどまでと変わりません。
- 追加した2つの
Mix-
ColorRampのAlphaを合成し、柄がある部分すべてを足し合わせた形状を取得
-
-
ColorRamp-
Roughnessは値が小さい方がツヤツヤで、大きいとマットになる -
Alphaの白黒に、それぞれ違う値を指定して材質の違いを表現する -
Roughnessにつなげる
-
-
Bump- 表面に凹凸をつける
- 今のままだと柄の部分が飛び出るので、
Invertにチェックを入れて、Strengthを少し下げる -
Normalにつなげる
これで、冒頭に示したものと同じテクスチャが完成しました。
最後に
理屈上の正しさというより「結果論でいい感じの見た目になっている」ようなテクスチャもたまに見かけます。
もちろん問題はありませんが、コードと同じで将来のバグの危険性を含んでいると言えるでしょう。
不要なノードを減らし、入出力の理屈をシンプルにしたい……と考えている最中に「コードを書いているときと同じような脳の使い方をしている」と気づきました。
そのため、もしかしてエンジニアの皆さんの方がテクスチャ作りが上手いのかもしれない、と思い半ば実験的に投稿してみました。
あと、一連の変化を載せておきます。
最後まで読んでくださってありがとうございます!
Twitterでも情報を発信しているので、良かったらフォローお願いします!
Devトークでお話してくださる方も募集中です!
-
Blender以外の3DCGソフトを使ったことがないため、他のソフトがどうなのかは分かりません。Blenderのご了承ください。 ↩










