blender 4.3 - 光沢をコントロールする
光沢のあるモノは、輝きを放つように見えて、ひとはそれを魅力的に思う傾向があるようです。そこで、シェーダー関連の「光沢」に関する値をかんたんに整理してみました。
環境 Blender 4.3.0 , Mac Mini M1 OS 14.4
光沢とは?
いわゆる光沢とは、3DCG の用語では スペキュラー(Specular 鏡面反射光)と呼ばれ、太陽光や照明などがモノの表面に当たって跳ね返り、われわれの目やカメラのレンズに捉えられた光だ。

細かくなるが、上の球の大部分はディフューズ(Diffuse 拡散反射光)による光を捉えて認識している。おもにモノの色を伝える光だ。


上の画像は、スペキュラーに関するマテリアルの値を極力少なくしたバージョン(上)と、現実に沿って適切な値を与えたバージョン。やはり光沢があった方が訴求力もあるし、よりリアルに感じられる。
以降、光沢が生じやすいパターンと、それに対応する、おもにプリンシプル BSDF シェーダー内の設定値を紹介する。
1.表面がなめらかである
経験的にも明白だが、なめらかな表面上には、より強い光沢を生じる。逆に、ざらついた粗い表面は光沢が少ない。
なだらかではない表面に当たった光は均一な角度で反射しないので分散し、結果的に、目やカメラに届く光が少なくなる。
Roughness - 粗さ
プリンシプル BSDF の、表面のなめらかさを指定する値。光沢に関するメインの設定値だ。

粗さの値が少ないほどなめらかになり、鏡面反射も強い。
2.素材の性質が光沢を生みやすい
モノの素材の特性によって、光を反射しやすい素材とそうでない素材がある。
IOR
IOR(Index of Refraction)は光の屈折率を表すとともに、その素材の光の反射の強さを示す指標で、素材によって固有の値がある。材料の屈折率一覧表
ほとんどの物質は、 1.2 〜 2.0 程度で、値が大きいほど反射も強い。

粗さは同じだが、IOR によって鏡面反射の強さが異なる。物理的な正確さを求めたい場合は、その素材のIORを適用することで、よりリアルな表現も可能だ。
Metallic - メタリック
メタリックはその素材が金属であるかどうかを示す値で、通常、0.0(非金属) あるいは 1.0(金属) で、中間の値をもつ材質は稀にしか存在しないが、金属は特性として強い鏡面反射率を持つので、光沢を調整する値としても利用できる。

メタリックの割合を上げると、急激に光沢や背景などの映り込みも強くなる。金属にはもともとそのような性質があるからだ。
やや色が黒めになるのは、おそらく鏡面反射光にベースカラーのグレイが反映されているためだろう。細かくなるが、「非金属」(上では左の球)の鏡面反射光には素材の色は反映されず、照明の色のみが反映される。
3.見る角度が浅い
光の反射率、その強さは、光が反射する角度によって異なり、角度が浅い(入射角が大きい)ほど反射率が高い。このため、下の場合、視点が低い位置にあると、強い反射光を捉えやすい。

仏の物理学者 ジャン・フレネル が導いた、光の屈折や反射を記述する「フレネルの法則」のひとつ。

https://refractiveindex.info/
フレネルカーブ。横軸の入射角(Angle of Incidence)が大きくなると、急激に鏡面反射率(Refrectance)も強くなる。
たとえば、上の立方体と床は同じなめらかな表面のマテリアルで、照明も同一だが、カメラの位置によって反射が異なる。


立方体の上面や床は、視点との角度が浅いため反射率が高くなり、照明の色の白系が多く反映され、白くみえる。
このような過度な反射を抑えたい場合は、通常、照明の量や角度を変えたり、マテリアルの「粗さ」を大きく、あるいは、IOR を少なめにすることで解決できるが、それらの値を変更したくないケースもある。

粗さを加えるだけでは、上面の過度な反射は抑えられたものの、全体的に映り込みもなくなり、金属感も失われた。
Fresnel
この場合、シェーダーエディターの、「フレネル」ノードを使うことで、視点との角度が浅く反射の強いエリアには、強い「粗さ」を与えることができる。


上述の「フレネルの法則」により反射率の高い面には「粗さ」に大きな値が与えられ、結果的に反射が減る。反射率の低い面はほぼなめらかな表面のままなので、全体として金属感が保たれた。
光沢の操作
たとえば、下のような円形のライトを球に当て、丸い光沢を作りたい場合。


丸い光沢はできたが、当然、床などほかのエリアにも影響するし、全体がすこし明るすぎる。この場合は、特定のオブジェクトのみライトを当てる「ライトリンキング」機能を利用する。

ライトオブジェクト(左の円型のエリアライト)のオブジェクトプロパティ > シェーディング > ライトリンキング で「新規」を押し、アウトライナー上の球(Sphere)オブジェクトをドラッグドロップする。

Glare
コンポジットノードの「グレア(Glare)」ノードを適用することにより、光沢により輝きを加えることができる。
通常は光源に適用することが多いが、強い光の反射にも適用できる。

Compositing ワークスペースに切り替え、フィルター > グレア ノードを接続する。




あまりおおげさな効果は必要ない場合でも、手軽にオーナメントなどの光沢にちょっとした強調を加えることができる。
映り込みの操作
Glossy Ray
なお、鏡面反射の強い表面には、当然、床などからの映り込みがあるが、すこし邪魔なこともある。

この場合は、床オブジェクト側のオブジェクトプロパティ > レイの可視性 > 光沢(Glossy)を OFF にする。


床オブジェクトは、他のオブジェクトに対して鏡面反射光を生じなくなるので、映り込みもなくなる。ただし、同じ床の上に異なるオブジェクトがあっても、すべてのオブジェクトの表面に床の映り込みがなくなるので、すこし注意は必要。
なお、映り込みを少しだけ残したい、などの場合は、「床オブジェクト」側に下のノードを組む。

シェーダーミックスノードに接続する 2 つのプリンシプル BSDF は同一だが、下の プリンシプル BSDFのみ、ややアルファの値を下げ半透明にした。

床オブジェクトの「光沢」による他のオブジェクトの影響は、半透明にして弱くしたプリンシプル BSDF が反映されるので、映り込みが弱くなる。
レイの可視性、ライトパスによる操作はすこしわかりづらいところがあるが、光の影響の調整等に便利。レイの可視性とは? の記事にすこし詳しく紹介しています。
まとめ
宝石に限らず、菓子などの食品なども、やはり光沢があったほうが、魅力的に感じます。
このため、適度な光沢を生じさせることは、レンダリングに魅力を与えるひとつの要素になるでしょう。参考まで。
性格のせいか、仕事で写真を撮るときも、すこし地味になる傾向があるようで、クライアントさんからは、もっと明るく! シズル感ください! と連呼されます。
