ライトベクトルを利用したトゥーンシェーダーの作り方を紹介する。
Blenderでのアニメ風の質感を作るには、「シェーダーのRGB化」ノードを利用するのが一般的で、作り方も楽ではある。
ライトベクトルを利用した方法では、より詳細に陰影やハイライトのコントロールができ、Cyclesでも利用できるためベイクができる。
もくじ
ライトベクトル式の利点・難点
利点
- ライトを個別に指定できる。
- 影響させたいライトのみを利用して陰影を作れる。
- 影用ライトとハイライト用ライト・パーツごとにも個別に設定できるので、絵によって欲しい影やハイライトの印象を細かく変えることができる。
- EeveeでもCyclesでも利用できる。
- 「シェーダーのRGB化」ノードに依存しない。
- ベイクができる。
- 「シェーダーのRGB化」ノードを利用する手法だとEeveeでしか使えないためベイクができないが、こちらはできる。
- 軽い。
難点
- 複数のライトの併用が手間。
- できなくはないが、複数のライトを併用するには個別にドライバー設定が必要のため手間。
- 基本的にはメインのライト1つを基準にした陰影を得るための構造なので、良し悪しではある。
- 影が出ない。
- 他のオブジェクトから受ける影を出せない。
- 少々複雑。
- ライトを参照するためのドライバー設定が少々手間で、マテリアルのみで構造が完結していない。
構造
上画像のノードは、下から上にベース・ハイライト・リムライトのように要素を重ねている。
構造解説
ベースのノード構造を解説する。
- XYZ結合ノード (ライトベクトル)
- ドライバーでリンクさせたライトの回転X/Y/Zを、XYZ結合ノードに設定している。
- ドライバーの作り方は下記。
- ジオメトリーノード
- マテリアルが設定されているメッシュのノーマル。
- (本来このノードの出力ソケット表示はもっと多いが、簡略化しているだけなので気にしなくてよい)
- ハイライトの場合は、ここをテクスチャ座標の「反射」にしている。
- ベクトル演算ノード 内積(dot product)
- ライトベクトルとノーマルを内積で計算して、陰影を得る。
- 数式ノード (積和算)
- ベクトル演算ノードを0.5/0.5で計算する。
- 陰が暗い範囲を持ち上げ滑らかにして、陰の暗い領域を調整しやすくする。
- カラーランプノード
- 得た陰影のグラデーションに色を付ける。
- グラデーションではなくパキッとした絵にしたい場合は、「リニア」ではなく「一定」に変更すること。
- シェーダーをより再利用しやすくしたい場合は、「数式ノード(大きい)」とミックスノードで作った方がノードグループ化した時に数値を外部からいじれて便利。
ノードグループ化しないならカラーランプの方が使いやすい。
ライトベクトル用のドライバーの設定
ドライバーを利用することで、ライトのトランスフォームの値をシェーダーノードの値と同期させることができ、ライトの動きをシェーダーノード内でも扱えるようになる。
1. XYZ結合ノードにドライバーを追加
XYZ結合ノードの値に、「#var」と入力して、エンターを押す。
値入力フィールドが紫色に変わる。
入力した#以外の部分(var)が式として使われる。
今回は入力値の初期値のvarだけ使うのでvarでよい。
右クリックから「ドライバーを追加」(Ctrl+D)からやってもいいが、ポップアップ表示の状態でするのは手間なので、先にドライバーだけ作ってからドライバーエディターで編集する。
2. ドライバーエディターに切り替え
ドライバーエディター画面を表示する。
もし追加したはずのドライバーが表示されない場合は、ノードエディターの方でドライバーを設定したノードをアクティブ選択しているか確認すること。
ドライバーエディターのヘッダーの「選択物のみ表示」が有効だとアクティブなデータのドライバーしか表示されない。
3. ドライバーの設定
入力値を追加をクリックし、下記の設定をする。
プロパティを、ライトオブジェクトに設定する。
タイプをトランスフォームチャンネルに切り替えて、X回転 / Y回転 / Z回転 とそれぞれ設定する。
ライトオブジェクトを回転してみて、値が変わっていれば成功。
タイプ設定のより早いやり方
タイプをトランスフォームチャンネルではなく「単一プロパティ」にし、パスを下記のように設定する。
- Xなら「matrix_world[2][0]」
- Yなら「matrix_world[2][1]」
- Zなら「matrix_world[2][2]」
Matcap式
Blenderに内蔵されているMatcap(「basic_1.exr」と「check_rim_light.exr」)を利用して作ったシェーダー。
これらのMatcapを、ディフューズBSDFのカラーとして利用した後カラーランプで調整している。
Matcapは、見る角度によって陰影が常に変わるが、常に一定の見た目が得られるのが利点。
正方形の球体絵ならなんでもいいので、自作することもできる。
特にイラスト的な反射はMatcapで描いた方がいいかも。
Matcapのノード構造
- テクスチャ座標
- ノーマル。
- ベクトル変換
- ベクトル。
- オブジェクト。
- カメラ。
- マッピングノード
- タイプをテクスチャーにする。
- 位置を1,1,0にする。
- スケールを2,2,1にする。
参考
プロジェクトスタジオQ流 BlenderでつくるアニメCG
第3回:トゥーンシェーダのつくり方(後篇)
より実践的で詳細な解説はこちら。