在这一期基础转台摄影测量系列教程中,我们将学习如何在 Blender 中去除照片的绿色背景以及绿色溢色(Color Spill)。
本教程不提供中文配音。您可以在下方观看英语配音的视频,并选择中文、英文或其他语言的字幕。视频下方提供了翻译成中文的文字稿。
视频文字稿
大家好!在这一期基础转台摄影测量系列教程中,我们将学习如何在 Blender 中去除照片的绿色背景以及绿色溢色(Color Spill)。
在这一流程结束后得到的图像将是带透明通道的 PNG 文件。这样,Meshroom 在特征提取阶段就能够只关注目标物体,而忽略背景区域。
本教程使用 Blender 4.3 录制,但这里使用的 Compositing 节点在多个早期版本中就已经存在,并且未来版本很可能也会继续提供这些节点。
所有工作都将在 Compositor Editor 中完成,因此场景中甚至不需要放置虚拟摄像机。实际上,我还可以删除新建 Compositing 设置中默认存在的 Render Layers 节点。

首先,我需要将项目的输出分辨率设置为照片的分辨率。在我的案例中,X 和 Y 分辨率分别为 4000 和 3000。
在 Properties Editor 的 Output 选项卡中,我还需要将输出格式设置为 PNG,并选择 RGBA,也就是包含透明通道,同时设置较低的压缩值。
在这个选项卡中,我还需要指定处理后文件保存到磁盘的位置。
作为导入图片之前的最后一个准备步骤,我需要将 End Frame 设置为待处理图片的数量。在我的案例中,这个数值是 146。

关于图片文件,只要文件名采用连续编号的方式,Blender 就能够自动识别文件夹中的图像序列。
在 Windows 环境下,实现这种连续编号的方法非常简单。选中存放原始照片的文件夹中的所有文件。右键点击第一个文件并选择 Rename。然后输入一个名称并按下 Enter。可以看到,Windows 会自动为文件夹中的所有文件添加连续递增的数字后缀。
现在,我可以将第一个文件拖入 Blender 的 Compositor Editor,并将节点类型修改为 Image Sequence。
在该节点中,我需要在 Frames 字段里输入要处理的文件数量。这个数值应当与之前在 Timeline 的 End 字段中设置的数值一致。

我将图像节点的 Image 输出连接到 Viewer 节点,这样就能在 Compositor Editor 的 Backdrop 中查看图像。
拍摄照片时,我有时会旋转手机,因此有些图片会出现上下颠倒的情况。这个问题可以通过 Rotate 节点轻松解决,并且 Degrees 参数可以制作动画,从而只在需要时启用该节点。不过,这些旋转并不会对 Meshroom 造成影响,因此现阶段并不一定需要处理。
接下来,我向节点网络中添加一个 Color Key 节点和一个 Color Spill 节点。
Backdrop 预览对于为 Color Key 节点选择绿色非常有帮助。我先点击 Color Key 节点中 Key Color 字段的默认颜色,然后点击吸管工具,从照片中选取一个绿色区域。

现在,我将图像节点的 Image 输出连接到 Color Key 节点的 Image 输入。
Color Key 节点的 Matte 输出应连接到 Viewer 和 Composite 节点的 Alpha 输入,因为它代表图像的透明度蒙版。
而 Color Key 节点的 Image 输出则应连接到 Color Spill 节点,用于去除在绿色背景拍摄时产生的绿色反射。随后,将 Color Spill 节点的输出连接到 Composite 和 Viewer 节点的 Image 输入。

在我们的案例中,节点的 Despill Channel 显然应设置为 Green。至于算法,则需要根据 Backdrop 预览效果,在 Simple 和 Average 之间选择结果更好的一个。
接下来,我可以开始调整 Color Key 节点中的 Hue、Saturation 和 Value 通道容差值。这些容差定义了像素颜色在这三个信息通道上相对于 Key Color 所指定颜色允许偏离的程度。

在 Blender 中执行这项操作的一个优点是,节点参数可以制作动画。这意味着我可以先为第一帧设置合适的参数,在这些参数有效的帧范围内保持不变,然后在某张图片不再适用时再进行调整。
不过需要特别注意:如果你发现当前参数对另一张图片效果不佳,那么必须先返回上一帧,并在那里插入关键帧,以锁定之前一直有效的参数。完成后,再移动到当前帧,根据新的需求调整参数,并为新参数记录新的关键帧。之所以要在修改前先给上一帧添加关键帧,是因为否则 Blender 会在帧之间自动插值,而这可能会对蒙版效果产生不良影响。
一般来说,Hue 参数最好保持较低数值,因为数值过高可能会误删本应保留的其他颜色。更好的做法是保持较低的 Hue 容差,然后通过调整另外两个参数来优化结果。大多数情况下,绿幕光照不均会造成亮度变化,但不会显著改变色相。
调整参数时,必须始终关注目标物体本身。因为虽然我们希望移除所有不需要的区域,但有时无法完全做到,而你也可能在处理过程中误删需要保留的物体部分。
为了清除更复杂的区域,可以使用一个或多个 Box Mask 节点,并将它们依次连接到 Color Key 节点的 Matte 输出。Compositor 中还有其他蒙版工具,但对于我们的用途来说,几个 Box Mask 节点已经完全足够。

这些节点会生成矩形蒙版,并且可以通过参数调整其位置、尺寸和旋转角度,从而在输入蒙版上进行定位。蒙版具有不同的应用模式。在本教程中,我会使用 Subtract 模式。不过需要注意,这会让受影响区域变成黑色,而不是透明。
为了解决这个问题,只需在连接到 Composite 和 Viewer 节点的 Image 输入之前插入一个 Set Alpha 节点。首先断开 Composite 和 Viewer 的 Alpha 连接。然后将 Color Spill 节点的 Image 输出连接到新建 Set Alpha 节点的 Image 输入。最后,将 Set Alpha 节点的 Alpha 输入连接到节点网络中最后一个 Box Mask 节点的输出。

现在,我直接跳到最终完成的 Compositing 设置,只是为了向大家展示,它本质上就是关键帧的组合,包括 Color Key 节点中的容差参数,以及所有使用到的蒙版的位置和尺寸参数。
蒙版的位置和尺寸参数同样可以制作动画,因此我们可以只在真正需要的时候让它们参与工作,避免在其他帧中遮挡目标物体。
之前关于 Color Key 节点关键帧的提醒在这里同样适用:在修改某一帧之前,务必要先插入关键帧,以防止蒙版位置在动画过程中产生错误插值。
分析并调整 Color Key 参数和蒙版的过程可能需要一些时间,但相比之后让 Meshroom 处理原始图片,这些经过清理的图片能够节省更多时间。
不过,即使无法彻底清除所有不需要的元素,也不是大问题。Meshroom 通常会将一些小型伪影视为噪声并自动忽略。我们在这个阶段优化得越充分越好,但也没有必要把事情弄得过于复杂。
在确认多个帧中的 Color Key 和蒙版质量都没有问题之后,我终于可以开始渲染整个序列,生成随后导入 Meshroom 的图像。这个渲染过程不会花费太长时间,因为它只是处理外部图片,而不是渲染完整的 3D 场景。生成的图片与免费资源包中提供的图片完全相同,因此你可以复现我们接下来教程中的所有步骤。本期内容就到这里!下期再见!