見出し画像

文系の blender 4.0 - 4.2 プリンシプル Principled BSDF 全解説

すこし偉そうなタイトルですが、ここでは、blender のマテリアル作成の中心機能である Principled BSDF について索引的にすべての機能を整理してみました。

なるべく専門用語を避け、可能なかぎり平易なことばで説明することを心がけました。

ただし、あくまで理系能力の極端に乏しいわたしの理解範囲内になります。間違いがある場合はお知らせいただければ幸いです。

サンプルはすべて cycles によるレンダリング。EEVEE については必要な場合のみ付記した。


環境 Blender 4.0.2 , Mac Mini M1 OS 14.2




プリンシプル BSDF とは


これまで種別に分かれていたシェーダーをひとつにわかりやすくまとめたblender の主要シェーダー。

光のふるまいを物理的にシミュレートするPBR(物理ベースレンダリング)の概念に基づき、現実に存在するほとんどすべての物質のリアリスティックな質感をこれひとつで表現できる。

4.0未満とはプロパティ項目が異なる。4.0からよりシンプルに整理され、使いやすくなった。




ベースカラー | Base Color


従来のディフューズシェーダーを引き継いだマテリアル表面のカラー情報。 単色を設定、あるいは画像等のテクスチャを接続できる。

中央は画像テクスチャを適用。右は金属(メタリック 1.0)にブルーを適用
※ 映り込みはベースカラーではなくHDRIの背景光。

ディフューズは物質の表面近くで起こる拡散反射光のこと。鏡面反射(いわゆる光沢)は含まれない。ベースカラーが赤いということは、赤以外の波長の色が物質内部に吸収されてしまい、赤の波長の色のみが反射しているため。


メタリック | Metallic


マテリアルの金属の性質をもつ割合を表す数値。デフォルトのゼロは非金属、値が大きいほど金属の(金属光沢と呼ばれる鏡面反射率の高い)性質を表現する。

左 メタリック 0.5  中央 1.0(粗さゼロ)強い鏡面反射が金属の特長
右 生成テクスチャをメタリックに接続
テクスチャの白寄りがメタリック、黒寄りが非メタリック

すべての無機物はほぼ金属か非金属に明確に別れ、中間の物質はごくまれにしか存在しない。このため、物理的には値はゼロあるいは 1.0 が正しいと思われる。
あるいは中間の値は、特殊な光沢のある布素材などSF的マテリアルには有効かもしれない。


粗さ | Roughness


マテリアルの表面のなめらかさを表す値。値が小さいほどなめらかになり、ゼロでは鏡のような表面になる。また、値が大きいほど粗くなり、1.0 の場合、表面での乱反射のため、鏡面反射がまったく起こらない。

左 粗さゼロ 中央 粗さ 1.0
右はノイズテクスチャを、粗さ に接続した

現実には、完全に粗い、あるいはなめらかな表面は存在しないため、フォトリアルなマテリアルの場合、ノイズテクスチャ等で表面のなめらかさの不均一性を加えることにより、より現実感のあるマテリアルを表現できる。


IOR | Index of Refraction


光の「屈折率」を表す数値。光は物質の内部を通る際、速度を大きく落とし、そのため内部で折れ曲がる。この屈折率(光の曲がる角度)は、物質によってそれぞれ異なる。

左 IOR 1.33(water) 中央 1.6 右 2.5 (diamond)

手前は伝播(Transmission)のウェイトを 1.0 としたガラス球。屈折率の違いから、同じ位置にある背後の球のみえかたが異なる。また、IORが高いほど光の反射も強い。

このため、おもにマテリアルの鏡面反射の強さを操作したり、素材に合った物理的に正しい屈折率を設定する際に用いられる。

左 IOR 1.2 中央 1.6 右 2.5

球の周辺で反射が高いように見えるのは、表面の向きと視線との角度「入射角」が大きいほど反射率が高くなるというフレネルの法則によるもの。
なお、金属物質は、もともと高い反射率を持つため、IORによる鏡面反射の操作の効果はごく限られる。


アルファ | Alpha


物質の透明度を表す数値。値が低いほどマテリアルは「透明」になる。

EEVEEではデフォルトではアルファは機能しない。マテリアルプロパティの「設定」プロパティ - プレンドモードを、アルファブレンド等に設定する。

左 アルファ 0.1 中央 ボロノイ 右 透過PNG画像
中央 ボロノイテクスチャ を アルファ に接続
右 透過PNG画像のアルファ情報をもとに、透過BSDFとミックスした
画像は シルエットデザイン からダウンロード

ガラスなどの透明物質はどれだけ透明であっても光の屈折があったり、影ができたりするが、アルファの場合は、その物質が存在しなくなる割合といっていいかもしれない。

おもに、透過PNG画像のように、マテリアルの一部を非表示状態にするために利用される。



ノーマル | Normal


ノーマル(法線)は、面の向きを示すベクトルのこと。

通常は、ノーマルマップやバンプノードを接続し、画像やテクスチャの白黒/青赤の情報をノーマルの情報に変換する。

左 Normal map 中央 Bump 右 Displacement
左 )ノーマルマップ画像を、ノーマルマップ - ノーマル に接続
中央 )ハイトマップ画像を、バンプ - ノーマル に接続
右 )ハイトマップ画像を、ディスプレイスメント - ディスプレイスメント に接続


上のマテリアルでは、ジオメトリ(形状)上はまったく平らな面であっても、あたかもそこに起伏があるような擬似的な操作を加えている。

ジオメトリ上で面を細分化し細かな起伏をつくるのは処理の負担が大きいため、負担を軽くしながら表面の凹凸、起伏を表現するために用いられる。

3DCGゲームなどのリアルタイムレンダリングでは、処理速度を重視するため、ゲーム内の地面や壁などの細かな起伏はほぼすべてこの機能によって表現されている。


サブサーフェス | Subsurface


サブサーフェス(Subsurface Scattering)では、人の肌などの有機的物質内部での光の散乱をシミュレートする。

メソッド | Method


  • ランダムウォーク | Random Walk  - デフォルトの物理的に忠実な方式。

  • Christensen-Burley  - 物理的再現性には劣るが負担が軽い。

  • ランダムウォーク(スキン) | Random Walk (Skin) - ひとの肌に特化した方式で、下の半径(Radius) はベースカラーによって自動設定される。

EEVEEではChristensen-Burleyのみ。下のスケール(散乱の深さ)の値を多めに与えないと効果がなく、表現もかなり限られるようだ。
※ 4.2 では、機能のアップデートが行われた。

左はサブサーフェスなし。高さ約50cm。どれもベースカラー#E7CEAC
背後から400Wの強めのエリアライトで照らした。
中央(ランダムウォーク) と 右(ランダムウォークスキン)

ウェイト | Weight


サブサーフェスが適用される割合。通常は、1.0 かそれに近い値を設定することが多い。

半径 | Radius


光がマテリアル内部で散乱する平均距離を表す。上から、X、Y、Z はそれぞれ、Red、Green、Blue の散乱の深さを表し、表面下で散乱して返ってくる光の色調を指定できる。

ランダムウォーク。左 X(R)のみ 1、中央Y(G)のみ 1、右 Z(B)のみ 1 
あくまで単純化された模式図

スケール | Scale


散乱の深さを m 単位で指定できる。このため、オブジェクトのスケールも影響する。直径 1m の球オブジェクトならば、中心まで散乱させたい場合は 0.5 m とするなど。

IOR


Random Walk (Skin)のみ設定可。人の肌のIORは 0.57 。

異方性 | Anisotropy


Random Walk、Random Walk (Skin)のみ設定可。値がゼロは全方向に散乱し、値が大きい場合は散乱の方向が限定される。ひとの肌の平均的な異方性は 0.8。



スペキュラー | Specular


スペキュラーは物質の表面の鏡面反射のこと。この反射により、そのマテリアルには光沢がある、と認識できる。

分布 | Distribution


CGX および Multiscatter GGX を選択できる。CGXの方が処理が軽いが、物理的再現性に劣る。

IORレベル | IOR Level


鏡面反射の強さを調整できる。デフォルトの 0.5 は影響なしの値。ゼロの場合、鏡面反射はまったく起こらない。1 の場合は、強さが2倍になる。

左 IORレベル ゼロ 中央 0.5 右 1.0

あくまでIORの値ではなく、鏡面反射の強さの調整値と思われる。IORの値を変更し鏡面反射の強さを設定した場合との違いはよくわかっていない。おそらくIORの補助的な設定。

チント | Tint


鏡面反射光が帯びる色を設定できる。ただし「非金属」マテリアルの場合は、鏡面反射光は色を帯びることがないので、物理的には正しくなく、またここでも正しい効果を得ることができない。

金属 左 ホワイト 中央 黄 右 ボロノイ(カラー)

鏡面反射が球全体に及んでいても、影響は周辺に限られる。IORやIORレベルの影響もみられない。

異方性 | Anisotropic


CD やフライパンの表面にみられるような微細な溝の影響による独特な反射をシミュレートする。通常は 1.0 とする。

EEVEEでは異方性は機能しない。

中央のみ、タンジェントを X 軸に変更(デフォルトはZ軸)

異方性の回転 | Anisotropic Rotation


異方性の方向を回転できる。1 は360度、0.25 は90度など。

タンジェント | Tangent


入力 > タンジェント ノードを接続し、異方性の方向軸を指定できる。

異方性はオブジェクトのローカルZ軸を基点とする。異方性が思ったように現れない場合は、平らな面に置かれた状態で、オブジェクト > 適用 > 回転 でオブジェクトの回転軸をリセットする。
また、放射線状の中心はオブジェクトの中心から。表面に適度に粗さがないと効果が現れないようだ。


伝播 |  Transmission


物質の内部で光が伝わる割合を指定できる。値が大きいほど透明になる。ガラスや水などは通常、ウェイトを 1.0 とする。

アルファと異なり、同じ「透明」でも、光の屈折や、表面の反射、影などの物理的影響を伴う。

EEVEEについては、4.0 EEVEEグラスマテリアル設定4.2 EEVEE NEXT グラスマテリアル設定 を参照してください。

左 ウェイト 0.8 中央 1.0 右 ウェイト 1.0 粗さ 0.2

ガラスのようなクリアな材質は設定もわかりやすいが、たとえばハチミツやミルクなどそれぞれ微妙に半透明なマテリアルを作る場合は、ウェイトを細かく調整したり、サブサーフェスやボリュームといった他の要素を組み合わせる必要があるだろう。


コート |  Coat


塗装膜やワックスといったオブジェクト表面のコーティングの影響を表現する。ウェイトの値が大きいほど影響が大きい。

中央 ワックスがけフロア 右 ノイズテクスチャで起伏の不均一性を適用

粗さ(Roughness)、IORチント(Tint)、ノーマル(Normal)は前述の各プロパティと同じ。ほぼ異なるマテリアルで表面が覆われる、と考えてよいかもしれない。


シーン |  Sheen


絹やベルベット生地などにみられる色彩の変化をシミュレートする。ウェイトの値が大きいほど影響が大きい。以前の名称はベルベットだったが、布以外にも使える、という改称だろう。

EEVEEではシーンは機能しない。

粗さ | Roughness


すこし紛らわしいが、表面のなめらかさを示す数値ではなく、チント色の影響を示す数値。1 = 100%

チント | Tint


ウェイトの値によって、おもに周辺部の色調を指定できる。左はウェイトゼロ。そこへ、中央はやや青を加え、右は多めに白を加えた。

中央 ウェイト 0.2 粗さ 0.4  右 ウェイト 0.8 粗さ 0.6 

物理的には布以外に大きく適用するのは正しくないと思われるが、アーティスティックな効果には使えるかもしれない。


放射 |  Emission


LEDのようなマテリアルからの発光を表現する。
カラー(発光色)、および、強さを設定できる。

左 暖色 強さ 5.0 中央 寒色 強さ 30
右 グラーデーションテクスチャを 強さ に接続。上半分のみ発光
テクスチャの値は上限 1.0 なので、数式(乗算)ノードで 30 倍とした。 

EEVEEでは、レンダープロパティの スクリーンスペース反射をオンにし、必要に応じ、間接照明をベイクする必要がある。また、レンダープロパティの、ブルーム をオンにし、擬似的に発光を表現する。blender 4.0 EEVEE ライティング基本設定
4.2 では、上の操作は必要ない。cycles 同様、照明として機能する。


Thin Film |  薄膜


マテリアル表面に、ナノメートル(10億分の 1 )単位の非常に薄い膜を設置できる。

シャボン玉マテリアル。上では、400〜800nmの厚さの膜をランダムに生成させている。表面に虹色風の変化が現れるのは、実際のシャボン玉と原理は同じ。ごく薄い油膜などにも応用できるか。 4.2 以降の cycles のみ適用される。

薄膜の IOR | IOR


薄膜の光の屈折率。大きいほど反射色の変化も大きいようだ。



まとめ


このプリンシプルBSDFが導入される以前は、シェーダーノードは細かく機能別に分かれていて、すこし特殊なマテリアルになると、大量のノードが複雑に絡み合い、わたしを怯ませていました。

しかし、とくに4.0以降、プリンシプルBSDFはよりコンパクトに、ユーザーフレンドリーになりました。

プリンシプルBSDFの設定値のなかには、IOR、サブサーフェス、異方性など、これまで耳にしたこともないものもありますが、それらがなにを表現する際に使われるのかを軽く頭にいれておくだけで、無駄なトライアンドエラーも減り、マテリアル作りはとても楽になります。

参考になれば幸いです。


この記事が気に入ったらサポートをしてみませんか?