Principle BSDF 是 Blender 默认的材质 shader 节点。
如果你刚接触 Blender ,或者对材质还不太了解,那么见到 Principled BSDF 的选项一定有点懵:
这么多参数到底都是啥?要怎样调出想要的玻璃或泥土材质?
今天我们就来仔细了解一下这个「万能」材质shader。(如果你对 Material、shader、texture 还感到茫然,建议先看一下 一文看懂材质/纹理 Material, Texture, Shading, Shader 的区别)
什么是 Principled BSDF?
Principled BSDF 将多个层组合成一个易于使用的节点。 它基于迪士尼原理模型,也称为“PBR”着色器,使其与其他软件兼容,如皮克斯的 Renderman®和虚幻引擎®。 从 SubstancePainter® 等软件绘制或烘焙的图像纹理可以直接链接到此着色器中的相应参数。
这是 Blender 官方文档中对 Principled BSDF 的说明。
可以说,这是一款综合型的材质生成着色器(shader),跟时下普遍使用的 PBR (Physically based rendering) 是原理类似的技术。
那么,BSDF 又是什么?跟 BSDF 相似的还有一个 BRDF :
BRDF - Bidirectional reflectance distribution function
BSDF - Bidirectional scattering distribution function
它们是 「双向 反射/散射」分布函数的缩写。
想要正确模拟真实世界中的光照,需要理解光遇到物体表面时发生的反射和散射。
Non metals will exhibit both reflection and refraction.
Metallic materials only have reflection. All refracted light is absorbed.
BSDF 就是帮助我们实现更逼真的光散射效果的函数。
在 Blender 的旧版本中,默认的材质节点是 emission。为什么后来改成了这个看似很复杂的 Principled BSDF 呢?Blender guru 在这个视频 中分析了 Principle BSDF 的优势,包括:
- 默认处理 fresnel:渲染引擎自动处理物体边缘反光强于中心的光照效果
- 更合理的粗糙度:粗糙度增加,fresnel 相应减弱
- 金属和绝缘体的区分:金属反光有颜色,绝缘体没有
- 其他一些技术细节
Principled BSDF 的参数
大致了解了 Principled BSDF 之后,我们再来熟悉一下它哪些看似眼花缭乱的参数。
作为材质 shader 的头牌,它的能耐一定不容小觑。下面这张官方文档中的图,十分直观地展现了 Principled BSDF 的能力:
图片左侧就是 BSDF 的主要参数,右侧展示了设置为0~1不同数值时材质的效果。
看似非常 overwhelming,对吧?别晕,我们仔细来观察一下,哪些行的最左侧和最右侧差别最大?
其实只有这几行:metallic,specular,roughness,transmission。
这个观察结果非常重要,它提示我们,BSDF 中最重要也是最常用的参数,其实只有几个:
- Base color
- Metallic:大多数情况只取 0 或 1,绝缘体为0,金属为1,不需要取中间状态
- Roughness
- Normal(bump mapping)
为什么没有把 Specular(反光)列在里面?因为反光程度跟材质的关系很大。如果是金属,反光会较强,而非金属的反射较弱。所以一般不调 Specular,而是设置 Roughness 是 0 (非金属) 还是 1 (金属)。
更多的参数说明,可以参考官方文档。
如何使用 Principled BSDF?
接下来以 Suzanne 为例,看看如何使用 Principled BSDF 调节材质。
首先,寻找并下载自己喜欢的材质包(图片分辨率最好2k以上),将材质包中不同的图片连接到节点的对应参数。一般来说,图片(从文件名可以判断)对应的参数如下:
- Base color 基础色 —— 连接到 BSDF 中的 basecolor
- Metallic 金属 —— 数据源为 Non-color data,连接到 BSDF 中的 metallic
- Roughness 粗糙度—— 数据源为 Non-color data,连接到 BSDF 中的 roughness
- Normal 法线 —— 数据源为 Non-color data,新建 Vector - normal map 节点,新建 Vector-bump node 节点,连接到 normal,再连接到 BSDF 中的 normal
- Height/displacement 等高线 —— 数据源为 Non-color data,连接到 BSDF 中的 metallic
- Ambient occlusion 环境光遮蔽—— Blender已经自动处理了,不过在游戏引擎里需要用到
Node editor 的连线如下:
在图片节点上游,还有两个用于修改贴图位置的节点
- Vector-mapping 节点,连接 vector 到导入的素材
- Input-texture coordinates 节点,连接 uv 出口到 Mapping 的 Vector 入口
Ref
Principled BSDF — Blender Manual
Physics and Math of Shading
Bidirectional scattering distribution function - Wikiwand
BSDF and BSSRDF - Udacity
BSDF and BSSRDF - Interactive 3D Graphics - YouTube
Blender 2.8 How to use PBR textures with principled bsdf Cycles/Eevee - YouTube
How to Use Blender's New "Ultimate" Shader: The Principled BSDF - YouTube
cycles - Add a transparent image on top of a material - Blender Stack Exchange
00 的文集
- HackYourself
- Art & Code
- 产品设计思维训练营
- FabAcademy 创客炼成记
- Make Noise
- 历史大杂烩