Blenderでアウトラインを作ったり、光沢などの表現によく使われるLayer Weightノードについてまとめていこうと思います。
Layer Weightノードはオブジェクトをある角度から見たとき、正面と側面を分け、シェーダーや色を切り分けるのに便利なノードですが、FresnelとFacing、Blendなどのパラメータが少しわかりづらいので、できるだけわかりやすく解説していこうと思います。
この記事は、BlenderのLayer Weightノードの説明、使い方を解説した初心者~中級者向けの記事です。
難易度
Layer Weight(レイヤーウェイト)ノード
Layer Weightノードは、シェーダーやカラーの合成で使うウェイト(ファクター)を出力するノードです。よくMix Shaderノードと組み合わせて使用されますが、Mixノードやその他のノードにも使えます。
Mix ShaderのFactor(ファクター)につなげた場合

Mix ノードのFactor(ファクター)につなげた場合

Layer WeightにはFresnel(フレネル)とFacing(正面度)の二つのモードの出力があり、どちらもこちらから見たときに正面か、側面か、を白黒2値の0~1で出力しています。この二つは似ていますが、微妙に出力される値が違うので、後から細かく解説します。
パラメータ

- Blend(混合度)
- 値の範囲:0 ~ 1(※-の値も入れることができるが、通常の値ではない)
- 出力をすべて 0 またはすべて 1 に偏らせる。シェーダーの不均一な混合に便利。0.5がその中間で、どちらにも偏らず白黒が分かれてる状態です。
- 0 → オブジェクト全体が黒(0)になります。
- 1 → オブジェクト全体が白(1)になります。
- Normal(ノーマル)
- バンプマップやノーマルマップを接続するための入力です。
- 接続すると、表面の微細な凹凸に応じて出力が変化します。
Fresnel(フレネル)とFacing(正面度)
Fresnel(フレネル)

Fresnel(フレネル)効果を数値化したものです。角度によって反射の強さが変わる効果を、0~1 の範囲で簡単に扱えます。(※マイナスなどの値も出力することができますが、フレネル効果の値としては使われることが少ない。)
特徴として中心部の多くの部分が黒やグレー(0~0.5)になり、表面やフチ部分がほんの少し白(1)くなります。中間部分が少ないです。
フレネル効果とは?
見る角度によって物体の表面の反射率が変わることです。

球形の物質に光が当たると、正面から光が入射した場合、入射光と物質の法線の差は0度に近くなり、入射角は約0度になります。物質の側面に光が当たった場合は逆に入射角が大きくなり、最大で90度に近づいていきます。
物質は入射角によって、光が反射する割合、屈折する割合が変わります。これをフレネル反射率といいます。

上図の中のガラス球のように側面は反射が強く、中心部は反射が弱いような効果がフレネル効果です。
Layer WeightノードのFresnel出力は、このグラフのように、中心部は反射率の値が弱く、フチ部分は反射率が一気に高くなるような値の変化をしています。
以下の記事でフレネル効果について詳しく書いています。
Fresnel(フレネル)ノードとの違い

フレネル効果を出力するノードは、他にもFresnelノードがあります。
このノードはIOR(屈折率)によってフレネル効果を再現できるので、より物質のマテリアル表現を再現するのに適したノードです。パラメータの値の入力の仕方が違うだけで、同じような出力を出すことができます。

差分をとって調べてみると、Layer WeightノードでのFresnel:Blend0.33とFresnelノードのIOR1.5の出力がほぼ同じ、Fresnel:Blend0.6とIOR2.5の出力がほぼ同じでした。
| Fresnelノード | Layer WeightのFresnel |
|---|---|
| IOR 1.5 | Blend 0.33 |
| IOR 2.5 | Blend 0.6 |
Blendでの変化

Blendのパラメータを変化させると、出力をすべて 0 またはすべて 1 に偏らせることができます。主に正面に向いている範囲の値が変化しています。0以下のマイナスの値もいれることができ、オブジェクトのフチの範囲が変化します。
- 0 → オブジェクト全体が黒(0)になります。
- 1 → オブジェクト全体が白(1)になります。
Normalでの変化

Normal入力は、テクスチャやBumpノードをつなぐと、出力のパターンを変化させることができます。
Facing(正面度)

Facing(正面度)は、フレネルとは違い反射率などは関係なく、ただ視線の方向とオブジェクトの面の法線との角度の差に応じて0~1の値を出力しているだけです。
面の法線が見る角度に向いているか向いていないかをシンプルに表しています。
中間部分が多く、0~1のグラデーションがバランスよく出ています。

上図の角度の差に応じて黒白(0~1)が出ているだけという感じです。
Blendでの変化

Blendのパラメータを変化させると、出力をすべて 0 またはすべて 1 に偏らせることができます。主に正面に向いている範囲の値が変化しています。フレネルと違い、0~1の範囲でしか変化がありません。
- 0 → オブジェクト全体が黒(0)になります。
- 1 → オブジェクト全体が白(1)になります。
Normalでの変化

Normal入力にテクスチャをつないで数値の広がりのパターンを変化させることもできます。
Layer Weightノードの利用法
アウトライン

オブジェクトの側面を検出してくれるので、この値を利用してアウトラインを描くことができます。
角度によって太さが変わってしまうので、一定の太さでアウトラインを描きたい場合は別の手法を使う必要があります。(アウトラインを表現する手法は他にも複数あります)
光沢表現

2Dでの光沢
アウトラインと似たような使い方ですが、明度の高い色でフチに色をのせると、光沢のような効果が出ます。
※Shader to RGBを使うと、光源の影響を加味して光沢を表現できます。

3Dでの光沢
Fresnel出力から、フレネル効果を利用して、反射と屈折シェーダーをMixするファクターに使うと、ガラスなどの物質を表現できます。(実際はFresnelノードの方がIORから設定できるので使いやすいです。)
グラデーションなどの模様

オブジェクトの正面、フチの違いや、法線が視線に向いているかに応じてテクスチャやグラデーションを変化させて模様やパターンを作ることができます。
まとめ
Layer WeightノードはFresnelとFacingの2つの出力があり、どちらも見る角度によって0~1の値を出していますが、内容は微妙に違います。
Fresnel(フレネル)の方は物体が光を反射するときのフレネル効果を元に値を出力しているので、リアルな光沢表現を作るときのファクターに使うのに適しています。
Facing(正面度)は単純に視線の角度、入射角の違いによって0~1の値を出力しているので、アウトラインを描いたり、範囲を検出するのに使いやすいです。


コメント