Blender 中的开源合成
Linux 正在迸发出多媒体的潜力——至少,人们从近年来涌现的大量面向多媒体的发行版中得到了这样的印象。DeMuDi、Planet CCRMA、Ubuntu Studio、64 Studio 以及更多不胜枚举。然而,多年来,“多媒体”这个词被证明具有欺骗性。GIMP 和 Inkscape 以及其他图形工具意味着 2D 图形已得到覆盖,而具有实时优先级的各种音频工具意味着用户在录音和音频处理方面的需求得到了满足。视频工具则落后了,因为视频处理既更加困难,也更容易受到专利的限制。在过去的几年里,情况开始好转,以至于现在完全可以使用 Linux 工具从概念到执行来创作电影或卡通片。
大象之梦,就是这样一部卡通片,它为开源视频的重大突破奠定了基础。大象之梦通过预售当时尚未面世的卡通片进行融资,是一种为开源 3D 套件 Blender (www.blender.org) 的开发和提高知名度筹集资金的策略。为了实现这一目标,创作者们必须开发出以前从未有过的东西:一个开源的合成器。
合成是将多个图像源(无论是来自 3D、矢量图形、照片、视频还是程序纹理)结合在一起,创建无缝、集成图像的艺术。一个好的合成程序提供了访问图像处理领域中所有可用数学函数的手段,而一位优秀的艺术家需要能够不时深入图像的内部,在界面之下,并使用数学函数直接对其进行调整。
由于 Linux 在后期制作公司中的持续普及,Shake、D2 Nuke 和 Eyeon Fusion 等几种高端合成系统已经存在多年,但每个席位的价格高达数千美元,维护和渲染节点许可证还需要额外付费。对于预算较少的人来说,Linux 合成一直遥不可及,除非有人有耐心在 ImageMagick 中进行手工脚本编写,但这对于大多数艺术家来说过于技术性,通常需要向流程中添加黑客(另一个成本点),或者在 GIMP 中逐帧工作,这既费力又不值得为任何小型项目付出努力。
因此,对于小型工作室来说,唯一经济实惠的解决方案是 Adobe After Effects 或 Apple Motion,这意味着需要在流程中添加 Windows 或 Mac OS 机器。两者都是功能非常强大、有用的工具,可以产生专业的结果,但两者都不是开源的。
这两类合成器围绕两种不同的界面范例构建,这会极大地影响工作流程。第一种范例是 Photoshop 范例。它在 After Effects 中最为突出,并在 Apple Motion 的修改形式中出现,其工作方式是将 Photoshop 的界面约定与基本的多轨编辑器界面相结合。在这种范例中,合成是通过堆叠在彼此之上的图像层来实现的,每一层都由其自己的效果堆栈进行操作。这种范例的主要优点是对于简单和中等复杂的效果而言工作速度快,并且对于已经熟悉 Photoshop 的新用户而言易于导航(图 1)。
第二种范例,“节点式”范例,是高端专业合成器中出现的一种。它的工作方式是将各种图像功能链接在一起以创建复杂的效果。图像功能是对图像应用数学变换以某种方式更改图像,它们位于 GIMP 或 ImageMagick 或视频合成中所做的任何操作的基础。这些功能通过节点封装在界面中。节点的工作方式有点像吉他效果器——它接受输入并生成输出,这些输出可以路由到无限数量的其他节点。因此,在节点式合成器中,人们使用节点链来实现自己的目标,并且通常有两种类型的节点可供选择。一种类型是熟悉的、用户友好的预封装效果插件,例如在 Photoshop 宇宙中可以找到的那种。另一种类型是一组数学界面,允许您自己构建自定义效果。它的缺点是视觉上更加复杂,对于某些人来说,学习起来也更加困难。然而,对于这种更陡峭的学习曲线,艺术家可以获得更通用的工作流程,这更适合进行高度复杂的工作。可用于 Linux 的节点式合成器包括:Shake(现已停产)、Eyeon Fusion、D2 Nuke(以前属于 Digital Domain,现在归 Foundry 所有)和 Blender(图 2)。
Blender 本身长期以来一直有一个基本的基于轨道的合成系统,自大象之梦以来受到了很多关注,并且已经变得非常有用,既可以作为视频编辑器,也可以作为合成器。唉,由于其主要目的是视频编辑,因此它缺乏像 After Effects 和 Motion 那样嵌套合成或分层效果的能力,使其在合成工作中仍然属于快速而粗糙的类别。
然而,在 2.43 版本中,Blender 推出了其节点式合成器,这是大象之梦改进中的皇冠上的明珠。专业级的开源合成已经到来,并且它与另一个非常强大的 3D 内容创作套件集成在一起。
为了演示它的功能,让我们逐步完成一个相当简单的五层合成。
要进入合成器,请启动 Blender 并将主 3D 窗口更改为节点编辑器(图 3)。切换到“使用节点”按钮。由于 Blender 使用节点进行材质和纹理创建以及合成,因此您需要按下图片图标。默认情况下,将弹出一个渲染场景和一个合成节点。在本项目的案例中,我正在使用的元素之一是 Blender 中的 3D 场景,因此我保留此节点并将其分配给我的主摄像机(图 4)。
接下来,我将底部视图分成两个窗口,并在最右侧的窗格中,拉起图像编辑器窗口,其中有一个列表框,允许您从合成器窗口中选择输出节点。这就是您检查进度的方式(图 5)。
接下来,我添加更多源。在每种情况下,按空格键都会弹出一个菜单,允许我添加节点。我想要三个额外的输入节点,并从每个节点中分配适当的类型。对于这个项目,我正在处理两个静态图像(镜头光晕和背景照片)和一个图像序列(绿幕剪辑,从 DV 渲染为图像序列,以便于使用)。
为什么是图像序列而不是视频?
与视频相比,使用图像序列具有三个明显的优势。首先,使用图像序列可以更轻松地修饰单个帧上的问题,而无需重新处理整个剪辑。其次,各种支持 Alpha 通道的无损格式为操作员提供了比视频格式更大的灵活性,视频格式中很少有无损格式或允许嵌入 Alpha 通道。第三,坦率地说,视频编解码器非常麻烦。它们在不同程序之间的支持差异很大;但是,图像格式是通用的且相对开放的。在将视频通过合成器或运动跟踪器之前将其转换为图像序列,意味着您在工作流程中在各种程序之间移动时会遇到更少的问题。
对于 Blender,使用图像序列还有另一个优势,这与该程序的缺点有关。Blender 不支持 NTSC 丢帧或非丢帧编码,这两者都以每秒 29.97 帧 (fps) 的速度运行。由于它是一个欧洲程序,并且历史上一直是一个动画程序,因此它可以达到的最接近的近似值是 30fps。虽然 0.3fps 看起来似乎是一个微不足道的差异,但这足以使您的声音同步超出可理解的范围,因此最好使用图像序列,然后在视频编辑软件(例如 KDENLIVE 或 OpenMovieEditor)中重新混合音频和视频。
首先,我为背景图像构建节点链(图 6)。从左到右移动,第一个节点是我们的源节点——照片本身。第二个是缩放节点,我用它将我相当大的数码照片缩小到接近 SD 视频分辨率的水平。接下来,我使用了 RGB 曲线节点来突出照片中的高光,以帮助营造出我们的角色从阴凉的庭院望向阳光直射的狂野花园的错觉。
接下来,我获取柱子元素,它是 Blender 本身内部渲染的图层,向其添加程序发光层,并将发光层和柱子与背景结合起来。为此,我从源中获取一个输出,并将其通过曲线通道以切除除最亮高光之外的所有内容(图 7)。
我将曲线节点的输出管道输入到模糊节点,在其中进行 40 像素 x/y 帐篷模糊,然后将其定向到屏幕节点,在该节点中,发光层被合成回柱子的源图片之上。然后,将此结合的图像管道输入到 AlphaOver 节点,该节点将柱子和发光层粘贴到照片的顶部。
现在我们来谈谈颜色键控。在节点式合成器中进行颜色键控有多种方法,其中最重要的方法之一是使用基本数学函数构建自己的键控器。虽然这种方法非常出色,并且可以产生最佳效果(即使在 DV 素材上也是如此,DV 素材在颜色键控方面存在一些非常特殊的问题),但这需要比我在此处拥有的空间更多的墨水。因此,为了简洁起见,我选择了 Blender 的三个原生键控节点之一,通道键,来完成这项工作(图 8)。
首先,素材需要一些准备,我以两种不同的方式准备了相同的素材——一种用于拉取遮罩,另一种用于颜色匹配。我首先通过缩放节点运行素材以校正我以 16:9 宽高比拍摄的素材——由于我的其余元素都是 4:3,因此我正在预先校正素材,而不是在渲染时进行校正。然后,我通过平移节点运行它,这使我可以将素材重新定位到左侧,以便我们实际上可以越过女演员的肩膀看,而不仅仅是盯着她的后脑勺。从那里,我将输出发送到两个平行的子树——键控和颜色校正。
键控子树从曲线节点开始,该节点将绿幕中的绿色推入一个窄带,以便键控器更容易锁定。然后,输出链接到通道键控器的输入,设置为拉取最干净的遮罩(我通过将查看器节点连接到图像输出来完成此操作,这样我就可以在调整设置时看到我在做什么)。然后将生成的遮罩通过模糊节点运行。通常,在键控 DV 素材时,我会应用 4x2 模糊来柔化遮罩并补偿由 DV 压缩引入的边缘伪影。但是,在这种情况下,由于我照亮原始场景的方式,我的边缘是暗的,我需要一些额外的羽化,以便背景的亮度会溢出。然后,将此模糊节点的输出管道输入到 AlphaOver 节点的 Fac 输入中,该节点将绿幕素材与图像的其余部分结合起来。但是,我超前了。
让我们回到键控树的另一半。这从平移节点获取一个额外的输出到曲线节点,该节点设置为抑制绿色通道以消除绿色溢出并帮助营造前景与背景的不同光照条件。然后,将此曲线节点的输出运行到 AlphaOver 上的底部输入。现在,为了完成前景与背景的结合,我们从背景子树末尾的 AlphaOver 节点运行一个额外的面条到键控器 AlphaOver 节点的顶部图像输入。
我可以将事情停在这里,但是这个镜头可以使用一点额外的润色来将所有图层捆绑在一起。为了实现这一点,我创建了一个漂亮的镜头光晕并将其带入 Blender。我通过平移节点运行它以将其放置在正确的位置,然后从那里进入另一个屏幕节点,该节点将其放置在先前合成的顶部。为此,镜头光晕进入顶部图像输入,先前的 AlphaOver 节点进入底部图像输入,我调整了 Fac,因此我获得了正确的效果——只是略微增加的亮度和变形涂抹,这有助于营造不同图层的集成感(图 9)。
现在,剩下的就是连接合成节点,这是 Blender 从中提取输出的节点。这可以在添加节点菜单的输出下找到查看器节点旁边,您可以通过按空格键来访问该菜单。将合成节点连接到输出后,转到屏幕底部的渲染按钮窗口,按下“执行合成”按钮,然后单击“渲染”,或者,如果是动画,则单击“动画”(图 10)。您的辛勤工作成果将出现在渲染窗口中,您可以从中保存它(如果它是静止图像,则使用 F3)。或者,您可以在硬盘驱动器上的临时目录或您在渲染按钮窗口中设置的另一个输出目录中找到它。
虽然这个项目很简单,但它很好地奠定了节点如何工作以及它们为何有用的基础。包含了对基本图像处理功能的足够访问权限,因此功能非常深入和广泛,并且由于 Blender 支持 HDR 格式(例如 OpenEXR)并且对分辨率没有限制,因此它完全属于专业合成阵营,尽管处于频谱中不太复杂的末端(正如人们对一个全新的项目所期望的那样)。它正在快速发展。在未来的版本中,计划推出更用户友好的键控工具和颜色工具,并且希望也能更直接地访问平移和垃圾遮罩功能,这些功能目前既晦涩又很不方便。在这些工具出现之前,我强烈建议任何想要将 Blender 用作主力合成器的人都投资购买一本教授合成工作原理(包括理论和实践)的书籍。最好的书籍是数字合成的艺术与科学(摩根·考夫曼计算机图形学系列丛书)。
将 Blender 用于合成工作也具有显着的优势,因为它是一个 3D 内容创作套件的集成部分,粒子系统、流体系统、程序纹理以及所有传统的 3D 建模和动画工具都可供合成系统使用,这对于任何数量的高度复杂的镜头都非常有用,这些镜头通常需要结合使用多个程序才能正确完成。
希望桃子计划,即目前正在制作中的大象之梦的续集作品,能够为我们带来更多此类创新,将合成系统推向新的高度。在那之前,还有很多东西需要探索、学习和使用。
开源合成终于到来了。尽情享受吧!
Dan Sawyer 是 ArtisticWhispers Productions (www.artisticwhispers.com) 的创始人,这是一家位于旧金山湾区的小型音频/视频工作室。自 20 世纪 90 年代末他创立 Blenderwars 电影制作社区 (www.blenderwars.com) 以来,他一直是自由和开源软件的热情倡导者。当前的项目包括独立科幻故事片狩猎红隼和索菲亚计划,这是一本以神话中坚强女性为中心的艺术摄影集。