在这个简短的基础教程中,我们将通过一个实际示例讲解两个不同的主题:如何在 Blender 4.1 场景中将对象放置到两个或更多不同的 View Layers 中,以及如何在 Compositing 中使用 Z-Combine 节点对它们进行混合,从而在最终渲染中获取每个 View Layer 中距离虚拟摄像机最近的像素。
本教程不提供中文配音。您可以在下方观看英语配音的视频,并选择中文、英文或其他语言的字幕。视频下方提供了翻译成中文的文字稿。
视频文字稿
大家好!在这个简短的基础教程中,我们将通过一个实际示例讲解两个不同的主题:如何在 Blender 4.1 场景中将对象放置到两个或更多不同的 View Layers 中,以及如何在 Compositing 中使用 Z-Combine 节点对它们进行混合,从而在最终渲染中获取每个 View Layer 中距离虚拟摄像机最近的像素。
View Layers 允许我们在场景中分别渲染对象。我们还可以选择哪些 View Layers 需要渲染,哪些不需要渲染。这也使我们能够优化资源和渲染时间,特别是在非常大型或元素很多的场景中。
Z-Combine 节点允许我们根据对象距离虚拟摄像机的远近,对来自两个或多个 View Layers 的对象,甚至带有 Z 通道或距离贴图的不同图像进行排序,从而得到一个单一的渲染结果,其中元素会按照它们与虚拟摄像机之间的距离进行显示。
这是一个基础教程,因此我们会逐步讲解场景中的 View Layers 是什么、如何将对象 Collections 关联到不同的 View Layers、如何决定哪些 View Layers 需要渲染,以及如何在 Compositing 中使用 Z-Combine 节点将它们混合。
在我用于本教程的场景中,有两个网格对象:一个围栏和一片草地。特别是,草地的草同时位于围栏的两侧,因此有些部分会被草叶遮挡,反之亦然。

一开始,这两个对象以及虚拟摄像机都位于同一个 Collection 中。
在菜单栏中,我们还可以看到当前只有一个 Scene 和一个 View Layer。尤其是,View Layers 允许我们决定场景中的哪些元素显示、哪些不显示,因此可以在场景中创建元素组。它们在可视化和渲染方面与 Collections 类似。

默认情况下,当前的 Collection 会被包含在基础 View Layer 中,因此始终会显示。我们可以通过查看 Collection 名称旁边的 Checkbox 来验证这一点。这个 Checkbox 的提示信息告诉我们,可以决定是否将对应的 Collection 从当前 View Layer 中排除。

现在让我们看看如何将草地和围栏放入两个不同的 View Layers 中,以便在 Compositing 中分别渲染和修改它们,然后再合并为一张图像。
首先要做的是重命名默认的 View Layer,让它有一个更有意义的名称。比如我们将它命名为 “Grass”。
同样地,我们将默认的 Collection 重命名为 Grass。

现在点击 “Add View Layer” 图标添加另一个 View Layer,并选择 “Blank” 选项,这样就可以创建一个新的 View Layer,并且初始状态下所有 Collections 都是禁用的。

这个操作立刻让我们明白了一件事:不同 View Layers 中元素的可见性是由它们所在的 Collections 决定的。
此时,Grass Collection 并没有被包含在新的 View Layer 中,我们甚至无法看到其中包含哪些元素。
将新的 View Layer 重命名为 Fence,然后返回 Grass View Layer。

选择 Fence 对象并按下 M 键打开 “Move to Collection” 菜单,然后选择 “New Collection” 选项,并创建一个名为 Fence 的新 Collection。

在 Outliner 窗口中,我们可以看到新的 Collection 已经创建,并且和 Grass 一样,以 Scene Collection 作为 Root。

由于我们不希望在当前 View Layer 中显示围栏,因此取消勾选 Fence 旁边的 Checkbox。

现在切换到 Fence View Layer,执行相反的操作,也就是只在渲染中包含 Fence Collection,同时排除 Grass。
这样一来,我们就把对象分离到了两个不同的 Collections 中,并且每个 Collection 都会在两个不同的 View Layers 中进行渲染。
不过,在开始渲染并进入 Compositing 之前,我们需要激活 Fence View Layer 的 Z 通道,这样在 Compositing 时 Render Layer 中才会包含 Depth 信息。操作方法是切换到 Fence View Layer,然后在 Properties 编辑器中打开 View Layers 标签,并勾选 Z Checkbox。

在新项目的基础 View Layer 中,这个 Checkbox 默认是启用的,因此通常不需要特别记得激活它,但对于新建的 View Layers,它默认是关闭的。和所有 Render Passes 一样,它必须在渲染之前启用,否则在 Compositing 中将无法获得这些信息。
完成这个操作后,我们就可以开始渲染了。
正如你可能已经注意到的那样,Blender 会为每个 View Layer 分别执行渲染。
不过,在进入当前场景的 Compositing 之前,我还必须告诉你,你可以将某些 View Layers 排除在渲染之外,这样就只渲染你正在修改的 View Layers,而不会浪费时间渲染其他部分。
要决定某个 View Layer 是否参与渲染,请选择它,然后在 Properties 编辑器中打开 View Layers 标签,并勾选或取消勾选 Use for Rendering。

不过在我们的案例中,我们需要两个 View Layers 的渲染结果,因此现在可以切换到 Compositing 窗口并继续本教程。
在 Render Layers 节点中,我们会注意到底部存在一个 View Layers 选择器。因此,让我们复制默认节点,并在新的节点中选择项目中的第二个 View Layer。

根据与摄像机距离对两个 View Layers 进行混合的方法其实非常简单,只需要在编辑器中插入一个 Z-Combine 节点,并将每个 Render Layer 的 Image 和 Depth 信息分别连接到 Z-Combine 节点的 Image 和 Z 输入端口即可。

将两张原始图像连接到节点两个 Image 输入端口时,连接顺序非常重要,因为如果两个像素具有相同的 Z 值,那么来自第二个输入端口的像素会被显示。因此,第一个输入端口被称为 Background,第二个则称为 Foreground。
你可能还注意到了 “Use Alpha” 选项。
Z-Combine 节点的 Image 输入同样会接收来自 Render Layers 的 Alpha 信息。混合会基于 Z 值进行,但如果启用了 “Use Alpha” 选项,并且第二个 Image 输入端口中的某个像素(Foreground)是半透明的,那么第一个 Image 输入端口中的对应像素(Background)也会部分可见,具体可见程度取决于前景像素的不透明度。
现在,我们就可以使用节点分别修改两个 Render Layers 的信息,同时仍然能够正确查看经过 Z-Combine 节点混合后的最终合成结果。

两张图像的 Image 和 Z 输入彼此独立,这也意味着我们可以使用某个 Render Layer 的 Z 信息来混合纹理或其他图像,把 Z 信息作为混合遮罩来使用。

节点存在一个整体 Z 输出,这也意味着我们可以通过多个依次连接的 Z-Combine 节点,连续混合多个 Render Layers 或图像。

在结束本教程之前,我想指出,即使对象属于不同的 Collections 和 View Layers,也仍然可以建立父子关系。
这个操作将成为我即将发布的另一个教程的基础,下面我会给大家展示一个预览……

……不过,正如我所说的,这部分我们下次再谈!本教程就到这里!下次见!