在本教程中,我将介绍我创建的一套节点设置,用于将带有 PBR 材质和纹理的 3D 模型转换为 NPR(Non-Photorealistic Rendering)效果。


本教程不提供中文配音。您可以在下方观看英语配音的视频,并选择中文、英文或其他语言的字幕。视频下方提供了翻译成中文的文字稿。


视频文字稿

大家好!在本教程中,我将介绍我创建的一套节点设置,用于将带有 PBR 材质和纹理的 3D 模型转换为 NPR(Non-Photorealistic Rendering)效果。具体来说,我们将使用一个电子电路的 3D 模型,得到类似我多年前阅读的电子杂志插图风格的渲染效果。

我将首先向大家展示两种渲染结果之间的区别:一种是导入 3D 模型后直接得到的渲染效果,该模型已经将其 PBR Textures 连接到一个 Principled node;另一种是非真实感渲染效果,它只使用 Base Color Texture,并配合一个经过适当设置的 Principled node。

本教程基于 Blender 4.1 创建,所使用的渲染引擎是 Cycles。

本教程将按照以下结构进行:

我们将禁用场景中已有的灯光;

我们将对 Principled node 的默认输入参数进行初步调整;

我们将禁用部分 Ray Visibility 选项,以消除 Color Bleeding 以及其他不需要的明暗效果;

我们将启用 Freestyle,在后期处理中为几何体添加轮廓线;

最后,我们将再次调整 Principled node 的输入参数,根据物体表面朝向相机的方向创建简单的明暗变化,使几何体的外观不再单调。

首先需要做的是禁用场景中的灯光。

初始的 PBR 渲染是通过在 World Background 中使用 HDR Texture 并配合一个 Sun 光源创建的,但在这里,我们将让对象本身作为发光体,以为对象的所有部分提供均匀的明暗效果。

因此,请删除场景中已有的光源,并将 World 的光照强度设置为 0。

在 3D 视图的 Rendered 预览模式下,我们将看不到任何内容,这正是因为场景中没有光源。

接下来,我们需要修改 Principled node 的连接方式。我们的目标是在保持 Albedo Texture 中颜色和文字信息的同时,实现对象的均匀照明效果。

将 Albedo 或 Base Color Texture 从 Principled node 的 Color 输入端断开,并将其连接到 Emission 输入端,同时保持发光强度为 1。

Metallic 和 Normal Textures 对我们来说不需要,因此可以将它们移除。

同时移除 Roughness Texture,并在 Principled node 中将该参数统一设置为 1。

这些操作需要应用到场景中的所有 Materials。在本例中共有两个材质:一个用于 printed circuit board,另一个用于 electronic components。

现在,在 3D 视图的 Rendered 预览模式下,我们可以清楚地看到所有元素呈现为平面化照明效果。不过此时的照明仍然过于均匀,邻近对象之间会出现彩色反射,也就是 Color Bleeding,而且还没有 Freestyle 轮廓线。接下来我们将逐一解决这些问题,首先从 Color Bleeding 开始。

在场景中选择任意一个对象,在 Properties editor 中打开其 Object 选项卡,并进入 Visibility 部分。

在该部分的 Ray Visibility 选项中,除 Camera 选项外,其余所有选项全部禁用。

这一操作同样需要应用到项目中的所有对象。

这样一来,场景中唯一存在的光线就是从物体表面发射并指向相机的光线,因此之前看到的令人困扰的 Color Bleeding 效果将不再出现。

在 3D Viewport 的 Rendered 预览中,我们现在已经得到一个本身就相当不错的结果,不过还可以通过添加一些轮廓线来进一步增强对象边界的表现。

Freestyle 模块非常适合完成这一任务。我们可以在 Properties editor 的 Render 选项卡对应区域启用它。在该选项卡中,还可以设置线条粗细的实现模式,以及在 absolute 模式下设置以像素为单位的线条粗细。

在 View Layers 选项卡中,现在会出现一个 Freestyle 部分,我们可以在那里设置许多其他参数,不过这里暂时不展开说明。我在教程开头展示的渲染结果,仅仅是启用 Freestyle 并保持默认设置得到的。

不过需要注意,Freestyle 是应用在最终渲染结果上的,因此它的效果不会显示在 3D Viewport 的 Rendered 预览中。因此,现在让我们进行一次初始渲染,以观察截至目前得到的效果。

为了实现基于物体表面相对于相机方向的简单明暗变化效果,我将使用 Layer Weight node 的 Facing 模式,作为两种不同版本 Base Color Texture 之间的混合因子。

在实现最终节点设置之前,我先通过一个示例演示 Layer Weight node 的 Facing 输出效果:使用两个颜色差异很大的 Emission nodes,将它们连接到一个 Mix Shader node,并使用 Layer Weight 的 Facing 作为混合因子。

请注意,应将 Layer Weight node 的 Facing 输出连接到 Mix Shader node 的 Factor 输入,而不是 Fresnel 输出。

如你所见,通过调整 Layer Weight node 的 Blend 参数,我们可以根据物体表面相对于相机的朝向使用不同的着色器。

不过,这两个着色器之间的过渡还不够清晰。为了获得更加明确的过渡效果,我们可以在 Facing 输出与 Factor 输入之间插入一个设置为 Greater Than 模式的 Math node。

Math node 的第二个参数将作为阈值,用于确定两个着色器之间的切换位置。

为了让 Layer Weight node 的 Blend 参数和 Greater Than node 的第二个 Value 输入使用相同的数值,我们从 Input 分类中添加一个 Value node,并将其连接到这两个输入端。

通过调整这个数值,即使是非常细微的变化,也可以得到一个良好的混合因子,从而为物体表面添加非渐变的明暗变化效果。

我们将使用这个混合因子,根据物体表面相对于相机的方向生成一个略微变暗的 Albedo Texture 版本。

现在,从节点设置中删除两个 Emission nodes 和 Mix Shader node,并将 Principled node 重新连接到 Material Output。

为了获得 Albedo Texture 的较暗版本,将 Base Color Texture 的 Color 输出连接到一个 Brightness Contrast node,并将 Brightness 设置为 -0.2。

插入一个 Color Mix node,将 Albedo Texture 的 Color 输出连接到其中一个图像输入端,并将 Brightness Contrast node 的输出连接到另一个图像输入端。

将 Greater Than node 的输出连接到刚刚添加的 Color Mix node 的 Factor 输入端。

最后,将 Color Mix node 的输出连接到 Principled node 的 Emission Color 输入端。

这一节点设置需要复制到场景中的所有 Materials。不过,在 3D Viewport 的 Rendered 模式下看到的预览仍然不是最终效果,因为其中还没有包含 Freestyle 的效果。

进行一次渲染,以查看真正的最终结果。

新的明暗处理方式既有优点,也有不足之处。

优点是,借助 Freestyle 和 Facing node,对象不再显得过于平面化,从而更容易感知其体积感。

不足之处是,这种明暗效果会随着对象相对于相机方向的变化而明显改变,因此可能需要花一些时间调整 Value node 的数值,或者调整对象的方向。

另外还需要注意的是,这里作为阈值节点使用的 Greater Than node,用于根据表面朝向对颜色进行明确分界,但在动画中可能会产生不太理想的效果。在这种情况下,可以考虑移除 Greater Than node,从而获得更加平滑的过渡效果。

好了,本教程到这里就结束了!希望对你有所帮助!我们下次再见!

搜索教程

输入短语,或输入多个用逗号分隔的关键词进行搜索。

本站提供 Francesco Milanese 制作的 3D 模型、教程及计算机图形相关资源。3D 模型的使用许可可通过各模型页面上的链接前往第三方商店购买,并须遵守适用的许可条款。 Francesco Milanese — 意大利增值税号:06321250877。 联系方式:info@francescomilanese.com


高级隐私策略信息和cookie文件的使用