はじめに
ここではシェーダーエディタを用いてマテリアルを作るための基本的な考え方や,シェーダーエディタそのものの使い方について解説していきます.
マテリアル触ってみたいけど,いざYouTubeでマテリアルのチュートリアル動画を検索したらぐちゃぐちゃなノードの画面が表示されて「難しそう……」って感じてしまった方にオススメのチュートリアルです.
あらかじめ宣言しておきますが,本チュートリアルではフォトリアルな質感のマテリアルを設定していくことを目標とします.もしアニメ調のCGを作りたいということであれば,本記事ではなく
"NPR表現"とかで検索すると良いかもしれません.
レンダラーを選択する
マテリアルを作る前にレンダラーを指定しましょう.Blender2.91には
Cyclesと
Eeveeが搭載されています.
いずれも物理ベースのレンダラー(PBR)でフォトリアルな画像を作るのに適しています.
-
Cycles
前述の通り,物理ベースレンダラーです.時間はかかりますが,カメラに入る光はしっかり計算してくれます.
-
Eevee
近年のゲームエンジンにも使われるような手法で超高速でレンダリングしてくれます.Cyclesと比較してもほとんどクオリティが変わらなかったり,
Cyclesのマテリアルをそのまま使い回せたりと,割と優秀です.
ただし,物体表面に反射して像が移りこむようなシーンでは画面外の計算が省略されるので注意が必要です(スクリーンスペースリフレクションの特性についてあらかじめ知っておくと良いでしょう).
[プロパティ]ウィンドウ>[レンダープロパティ]タブからレンダラーを選択してください.本記事では
Cyclesで説明を進めていきますが,どちらを選択してもいいです.
マテリアル? シェーダー?
"マテリアル"と
"シェーダー"という単語について,簡単に説明をしておきたいと思います.知っている方は読み飛ばしても大丈夫です.
一昔前なら
"マテリアル"とは「物体の色とか模様とか質感を定義するものです」って説明しておけば何も困ることはなかったのですが,最近は
"何故か"Unityを使う人が増えて,
しかも
シェーダーを書く人が増えて,
シェーダーという単語が広く一般(?)に使われるようになりました.
上記のような経緯もあり,
"マテリアル"と
"シェーダー"という単語は何となくごちゃ混ぜに使われがちですが,厳密には意味が異なります.
シェーダーとは
"シェーダー"という概念は3DCGが開発された当初から存在していたもので,ポリゴンが映っている部分をどのように描画するのかを記述するプログラムを指します.
例えば,「何色で塗りつぶすのか」とか,「この方向から光が当たっているのでこんな影を落としたい」とか,みたいにどのように画面を塗りつぶすのかを記述するものです.
もちろん
シェーダーはプログラムなので言語で記述できる処理はなんでもできます.興味がある方は
"GLSL"とか,
"WebGL"について調べてみると良いでしょう.ただし線形代数の知識もガッツリ使うことになります.
マテリアルとは
"シェーダー"はプログラムそのものだと説明しました.一方,
"マテリアル"とは
シェーダーを管理するための(ソフトウェア上の)仕組みを指します.
例えばBlenderでは一つのオブジェクトに対して複数の
マテリアルを割り当てることができます.
マテリアルで
シェーダーを管理することで,一々
シェーダーの中身を作り直さなくても,
ポリゴン単位で別々の
マテリアルを割り当ててみたり,
マテリアルを他のオブジェクトに使い回せたりできます.
結局マテリアルとシェーダーって何?
飽くまで私の解釈ですが,プロパティーウィンドウのマテリアル項目に並んでいるリストが
"マテリアル",シェーダーエディターに表示されるマテリアルの中身が
"シェーダー"ってことでいいんじゃないですかねえ.
マテリアルを作成する
前置きが長くなりましたが,ここからマテリアルを作成していきます.対象のオブジェクトを選択した状態で
[プロパティ]ウィンドウ>[マテリアルプロパティ]タブ>[新規]をクリックするとマテリアルを新規作成できます.
マテリアルを新規作成すると
[プロパティ]ウィンドウに作成したマテリアルの内容が表示されます.表示された項目からある程度の設定は行えますが,
複雑なシェーダーを作るには厳しいので
シェーダーエディターを使う必要が出てきます.
シェーダーエディターに慣れる
ここからが本題です.まずはウィンドウ左上部の
[エディタータイプ切替]ボタンから
[シェーダーエディター]を選択しましょう.
シェーダーエディターを開くと,選択しているオブジェクトに適用されているマテリアルの内容が表示されます.シェーダーを構成するパーツは
ノードと呼ばれます.
シェーダーエディターでは下図のようにノードとノードを繋げてシェーダーを設定していきます.
初めは戸惑うかもしれませんが,シェーダーエディターを扱うためには以下の基本ルールを知っておくだけで大体の流れはわかります.
シェーダーエディターの基本ルール
-
処理の進行方向は左から右
-
基本的には同じ色のソケット同士を繋げる
(必ずしも同じ色で繋げる必要はない)
-
最後は[マテリアル出力]ノードに繋がる
ノードの構造を理解する
ノードについてもう少し詳しく見てみましょう.ノードの左側に
入力ソケット,右側に
出力ソケットが付いています.
入力ソケットに何かの情報を入れると,
出力ソケットから何かの情報が出る構造となっています.
「何かを入れたら何かが出る」という体系は一般に
"関数"と呼ばれ,数学やプログラミング言語を構成する重要な概念です.実は「ノードを組む」という行為は立派なプログラミングなのです.
ソケットの色と意味
ノード同士を繋げることで受け渡しされる情報にはいくつかの種類(型)があり,ソケットの色で分類されます.ソケットの色と意味は以下の通りです.
-
●灰色
実数(正確には実数の近似)の数値情報を扱います.要するに"数"の受け渡しをします.ミックスの割合を指定したり,単純に数を代入するときに使用します.
-
●黄色
色情報を扱います.本質的にはベクトル情報(R, G, B, A)ですが,色を扱うための専用の型として扱われます.それぞれの要素は0~1の値を持ちます.単体の色指定だけではなく,黄色の入力ソケットにテクスチャを繋げることもできます.
-
●青色
ベクトル情報を扱います.空間座標,方向,スケール,法線ベクトル,UV等,色々扱います.(何かとっつきづらいよね)
-
●緑色
シェーダーの情報を扱います.シェーダー同士をミックスしたりするときに使います.
……という感じで,ソケットに突っ込む情報が何か単体だったり,画像を突っ込んだり,よくわからんって感じた方は賢い方かもしれません.実はソケットに突っ込まれる情報は
"場の情報"を含んでいます.
つまり,ソケットに画像を入力することでテクスチャ情報を加えてみたり,ディスプレイスメントマップ画像や法線マップ画像を入力して凹凸を加えてみたりといったことができます.
ノードの追加方法
ノードを追加するには
[シェーダーエディター]ウィンドウ上にマウスカーソルを乗せた状態で,
[Shift]+[A]を押下します.たくさん種類があるね.
BSDFの種類を見ていこう
BSDF(双方向散乱分布関数)とは光の動きをモデル化した関数の一つです.難しいことは置いておいて,とりあえずシェーダーを構成するパーツみたいなものだと思ってください.
ここではよく使われるノードを列挙していきます.単体で使用すると「なんとなくこんな感じになるんだなあ」くらいに眺めて貰えれば良いと思います.
プリンシブルBSDF
マテリアルを作成するとデフォルトで設定されるシェーダーです.パラメータの多さを見るとわかると思いますが,このシェーダーは色々なシェーダーが合わさって1つになった万能なシェーダーです.
お手軽に質感を設定できて便利ではあるのですが,初心者には余分なパラメータが多過ぎな気もするので,本チュートリアルでは扱わないこととします.
ディフューズBSDF
最も基本的なベースとなるシェーダーです.単体で使用するとマットな質感になります.
光沢BSDF
光沢(glossy)を持たせることができます.
ディフューズBSDFと違い,比較的まとまった方向に光が反射するのでスペキュラ(艶々した明るい部分)を作ることができます.
さらに,粗さ(ラフネス)を設定することでスペキュラの大きさが変わります.
グラスBSDF
グラスのように光を屈折させることができます.IOR値を変更することで屈折率を調整できます.ただし,集光表現(コースティクス)はちょっと苦手なようです.
SSS
SSSとはSubsurface Scatteringの略です.BSDFではないのですが,これもしばしば使われるので載せておきます.人肌のように薄っすら透けて物体内部に光が届くような計算をしてくれます.上手く使えばリアリティが上がりますが,ノイズの原因にもなるので扱いは難しめです.
放射
面光源として光を発することができます.ちなみに物理的にはあり得ないですが,強さをマイナスにすると周りの光を吸い込んでくれます.
次回はこれらのノードを組み合わせて実用的なシェーダーを作成していきます.
【入門編】Blenderのシェーダーエディターを使ってみよう(2/3)