Works - ----/--/--
----

キーワード

目次

はじめに



 ここではシェーダーエディタを用いてマテリアルを作るための基本的な考え方や,シェーダーエディタそのものの使い方について解説していきます.

 マテリアル触ってみたいけど,いざYouTubeでマテリアルのチュートリアル動画を検索したらぐちゃぐちゃなノードの画面が表示されて「難しそう……」って感じてしまった方にオススメのチュートリアルです.

 あらかじめ宣言しておきますが,本チュートリアルではフォトリアルな質感のマテリアルを設定していくことを目標とします.もしアニメ調のCGを作りたいということであれば,本記事ではなく"NPR表現"とかで検索すると良いかもしれません.

レンダラーを選択する

 マテリアルを作る前にレンダラーを指定しましょう.Blender2.91にはCyclesEeveeが搭載されています. いずれも物理ベースのレンダラー(PBR)でフォトリアルな画像を作るのに適しています.


 [プロパティ]ウィンドウ>[レンダープロパティ]タブからレンダラーを選択してください.本記事ではCyclesで説明を進めていきますが,どちらを選択してもいいです.



マテリアル? シェーダー?

 "マテリアル""シェーダー"という単語について,簡単に説明をしておきたいと思います.知っている方は読み飛ばしても大丈夫です.

 一昔前なら"マテリアル"とは「物体の色とか模様とか質感を定義するものです」って説明しておけば何も困ることはなかったのですが,最近は"何故か"Unityを使う人が増えて, しかもシェーダーを書く人が増えて,シェーダーという単語が広く一般(?)に使われるようになりました.

 上記のような経緯もあり,"マテリアル""シェーダー"という単語は何となくごちゃ混ぜに使われがちですが,厳密には意味が異なります.

シェーダーとは

 "シェーダー"という概念は3DCGが開発された当初から存在していたもので,ポリゴンが映っている部分をどのように描画するのかを記述するプログラムを指します.
 例えば,「何色で塗りつぶすのか」とか,「この方向から光が当たっているのでこんな影を落としたい」とか,みたいにどのように画面を塗りつぶすのかを記述するものです.



 もちろんシェーダーはプログラムなので言語で記述できる処理はなんでもできます.興味がある方は"GLSL"とか,"WebGL"について調べてみると良いでしょう.ただし線形代数の知識もガッツリ使うことになります.

マテリアルとは

 "シェーダー"はプログラムそのものだと説明しました.一方,"マテリアル"とはシェーダーを管理するための(ソフトウェア上の)仕組みを指します.

 例えばBlenderでは一つのオブジェクトに対して複数のマテリアルを割り当てることができます.マテリアルシェーダーを管理することで,一々シェーダーの中身を作り直さなくても, ポリゴン単位で別々のマテリアルを割り当ててみたり,マテリアルを他のオブジェクトに使い回せたりできます.

結局マテリアルとシェーダーって何?

 飽くまで私の解釈ですが,プロパティーウィンドウのマテリアル項目に並んでいるリストが"マテリアル",シェーダーエディターに表示されるマテリアルの中身が"シェーダー"ってことでいいんじゃないですかねえ.



マテリアルを作成する

 前置きが長くなりましたが,ここからマテリアルを作成していきます.対象のオブジェクトを選択した状態で[プロパティ]ウィンドウ>[マテリアルプロパティ]タブ>[新規]をクリックするとマテリアルを新規作成できます.



 マテリアルを新規作成すると[プロパティ]ウィンドウに作成したマテリアルの内容が表示されます.表示された項目からある程度の設定は行えますが, 複雑なシェーダーを作るには厳しいのでシェーダーエディターを使う必要が出てきます.



シェーダーエディターに慣れる

 ここからが本題です.まずはウィンドウ左上部の[エディタータイプ切替]ボタンから[シェーダーエディター]を選択しましょう.



 シェーダーエディターを開くと,選択しているオブジェクトに適用されているマテリアルの内容が表示されます.シェーダーを構成するパーツはノードと呼ばれます. シェーダーエディターでは下図のようにノードとノードを繋げてシェーダーを設定していきます.



 初めは戸惑うかもしれませんが,シェーダーエディターを扱うためには以下の基本ルールを知っておくだけで大体の流れはわかります.

シェーダーエディターの基本ルール


ノードの構造を理解する

 ノードについてもう少し詳しく見てみましょう.ノードの左側に入力ソケット,右側に出力ソケットが付いています.入力ソケットに何かの情報を入れると,出力ソケットから何かの情報が出る構造となっています.



 「何かを入れたら何かが出る」という体系は一般に"関数"と呼ばれ,数学やプログラミング言語を構成する重要な概念です.実は「ノードを組む」という行為は立派なプログラミングなのです.

ソケットの色と意味

 ノード同士を繋げることで受け渡しされる情報にはいくつかの種類(型)があり,ソケットの色で分類されます.ソケットの色と意味は以下の通りです.


 ……という感じで,ソケットに突っ込む情報が何か単体だったり,画像を突っ込んだり,よくわからんって感じた方は賢い方かもしれません.実はソケットに突っ込まれる情報は"場の情報"を含んでいます.

 つまり,ソケットに画像を入力することでテクスチャ情報を加えてみたり,ディスプレイスメントマップ画像や法線マップ画像を入力して凹凸を加えてみたりといったことができます.

ノードの追加方法

 ノードを追加するには[シェーダーエディター]ウィンドウ上にマウスカーソルを乗せた状態で,[Shift]+[A]を押下します.たくさん種類があるね.



BSDFの種類を見ていこう

 BSDF(双方向散乱分布関数)とは光の動きをモデル化した関数の一つです.難しいことは置いておいて,とりあえずシェーダーを構成するパーツみたいなものだと思ってください.

 ここではよく使われるノードを列挙していきます.単体で使用すると「なんとなくこんな感じになるんだなあ」くらいに眺めて貰えれば良いと思います.

プリンシブルBSDF

 マテリアルを作成するとデフォルトで設定されるシェーダーです.パラメータの多さを見るとわかると思いますが,このシェーダーは色々なシェーダーが合わさって1つになった万能なシェーダーです.

 お手軽に質感を設定できて便利ではあるのですが,初心者には余分なパラメータが多過ぎな気もするので,本チュートリアルでは扱わないこととします.



ディフューズBSDF

 最も基本的なベースとなるシェーダーです.単体で使用するとマットな質感になります.



光沢BSDF

 光沢(glossy)を持たせることができます.ディフューズBSDFと違い,比較的まとまった方向に光が反射するのでスペキュラ(艶々した明るい部分)を作ることができます. さらに,粗さ(ラフネス)を設定することでスペキュラの大きさが変わります.



グラスBSDF

 グラスのように光を屈折させることができます.IOR値を変更することで屈折率を調整できます.ただし,集光表現(コースティクス)はちょっと苦手なようです.



SSS

 SSSとはSubsurface Scatteringの略です.BSDFではないのですが,これもしばしば使われるので載せておきます.人肌のように薄っすら透けて物体内部に光が届くような計算をしてくれます.上手く使えばリアリティが上がりますが,ノイズの原因にもなるので扱いは難しめです.



放射

 面光源として光を発することができます.ちなみに物理的にはあり得ないですが,強さをマイナスにすると周りの光を吸い込んでくれます.



 次回はこれらのノードを組み合わせて実用的なシェーダーを作成していきます.
【入門編】Blenderのシェーダーエディターを使ってみよう(2/3)

こちらもおすすめ