工业光魔
星球大战II:克隆人的进攻,于 2002 年 5 月上映,是工业光魔 (ILM) 去年将其工作站和渲染农场转换为 Linux 后制作的第一部电影。ILM 位于加利福尼亚州圣拉斐尔,旧金山以北,成立于 1975 年,旨在为星球大战制作视觉特效。虽然 ILM 归乔治·卢卡斯所有,但它制作的视觉特效不仅仅用于卢卡斯影业的作品,例如星球大战和夺宝奇兵系列电影。许多其他寻求在特效前沿有所突破的 студии 也使用 ILM。ILM 已获得 14 项奥斯卡金像奖,包括因其在阿甘正传、侏罗纪公园、终结者2、谁陷害了兔子罗杰?和E.T.外星人中的工作而获得的奖项。
研发主管 Andy Hendrickson 说:“Linux 正在提高我们工作的质量,而不是数量。” 大量的处理能力使更多用户可以进行控制。他解释说,
我们经常在开始一个项目时就知道我们想要什么,但由于缺乏处理能力,不得不通过捷径来降低真实感。使用 Linux,我们可以增加更多真实感。我们指导特效。仅仅拥有一个 NOAA 精确模型的云是不够的。艺术人员指导特效,例如“让那朵云更蓬松”。或者,如果我们模拟整个海洋,就像在完美风暴中一样,“让那个海浪更大”。
ILM 大胆地在一部主要电影制作过程中进行 Linux 转换,在星球大战II正在制作时进行切换。“我们认为转换为 Linux 会比实际情况困难得多,”Hendrickson 说。“Linux 非常像我们以前使用的系统。我们在 2001 年 11 月推进了部署,并将在星球大战II之后完成转换。” 在转换期间,ILM 正在支持现有的 SGI IRIX 机器和 Linux PC,以避免用户因过多的更改而感到不知所措。
序列主管 Robert Weaver 是星球大战II的技术指导。Weaver 的桌子左侧有一台 Linux PC,右侧有一台 SGI O2。由于 Linux 桌面配置为看起来像 SGI O2,因此除非 Weaver 演示速度差异,否则无法立即分辨哪个屏幕是哪个。他说,
旧系统非常慢,以至于克隆人士兵发射激光看起来像是在投掷标枪。我们在 Linux 上看到了大约五倍的速度提升,这非常令人感激! 我想说 Linux 是我们最成功的努力之一。我对它的赞美之词说不尽。它直观、非常稳定,我们可以随时修复问题。我们的渲染器尚未移植,但将在夏季完成。这就是让我继续使用 O2 的全部原因。
所有 ILM 3D 粒子模拟都在 Alias|Wavefront Maya 中完成。“我想说,我们 90% 的 Maya 用户都在使用 Linux,”Weaver 说。“它在 Linux 上似乎非常稳定。我已经好几个月没遇到 Maya 崩溃了。我正在评估是否已投入正确的周期。我在线框模式下执行此操作。” 为了扩展 Maya 的功能,Weaver 编写了插件。“Maya 使编写插件相当容易。我向 shelf 添加内容。” shelf 是一组插件选项卡,在 Maya 中可见于顶部。 完美风暴中的海洋是 ILM 通过 Maya 插件实现的效果的一个例子。
“我们的合成软件 CompTime 已移植到 Linux,”Weaver 指出。ILM 创建了自己的合成器,其中包含用于进行电影编辑的插件架构,而不是选择商业软件包。Weaver 也编写合成器插件。“合成器插件是用 Python 编写的,”他指出。“我们是一家大型 Python 商店……以及 MEL。” MEL 是 Maya 脚本语言。
ILM 认为 Maya 是 TD(技术指导)的最佳工具;ILM 的动画师使用 SOFTIMAGE。转换为 Linux 触发了公司范围内的升级,从 SOFTIMAGE 的 3.8 版本(在 IRIX 上)升级到最近可用于 Linux 的 4.0 版本。
自从第一个星球大战三部曲以来的几年里,动画软件已经能够实现更丰富的面部表情。ILM 创建了自己的漫画面部动画应用程序,该应用程序直接读取和写入 SOFTIMAGE 场景,而不是作为插件。高级数字模型主管 Geoff Campbell 使用此软件为星球大战II中的动画设置面部表情。

ILM 模型主管 Geoff Campbell 和动画总监 Rob Coleman 正在制作星球大战中尤达角色的动画。
“面部有 11 块肌肉是表演的关键,”Campbell 说。“我可以随意在 SOFTIMAGE 中拉伸面部。当我喜欢我所做的时,我会将其保存为新形状。在我的桌子上,我有一个小相机和一面镜子,我用它们来观察我真实的表情。你会在每个角色中投入一些自己的东西。” Campbell 说,角色表演中的一个重要细节是“眼神闪烁”,即表演者在互动时彼此给予的小小暗示。在星球大战II中,尤达即使闭着眼睛也有眼神闪烁。“Linda Bell 开发了眼睛在睡眠时的动画,即在闭着的眼睑下眼睛在 REM 睡眠中移动。”
“我希望尤达看起来比木偶更好,嘴唇的动作能更好地匹配台词,”Campbell 说。她解释说,
尤达的有趣之处在于乔治不希望我们远远超出木偶的局限性。《星球大战II》中尤达说话时,他有很多台词,他以非常简单的方式使用音素。我们试图模仿的许多形状是弗兰克·奥兹用橡胶手移动创造的木偶形状。
后来的 CG 尤达与该系列其他电影中的角色相符,但他具有更精确的嘴唇音素,嘴唇会卷曲以发出“M”或“B”音,这是木偶无法实现的。

对于星球大战中的尤达,ILM 使用了他们专有的面部漫画动画软件,该软件设计为与 SOFTIMAGE 文件兼容。ILM 的内部开发方法包括专有应用程序(如这款软件和 CompTime)以及用于 Maya 和 SOFTIMAGE 等商业软件包的自定义插件。
尤达的头发是另一个使用 ILM 面部动画软件操纵的角色特征。由于移动单根头发会过于繁琐,因此存在影响周围头发的单个控制头发。为了交互式地为尤达的头发造型,速度非常重要。在 SGI O2 上运行 ILM 的面部动画软件时,每次更改后都需要几秒钟才能重新绘制屏幕,延迟使工作变得困难。“使用 Linux,我们可以实时操作高分辨率模型,这是我们在 SGI 系统上无法做到的,”Campbell 说。
ILM 仍然构建一些物理模型,但主要用于背景或比 CG 更容易创建的有机外观事物。尽管 ILM 不再构建许多宇宙飞船模型,但他们的计算机化运动控制相机仍在不停地拍摄背景板。
研发首席工程师 Phil Peterson 报告说,ILM 的 Linux 软件转换已完成约 80%。他说:“一个三人团队将超过一百万行代码移植到 Linux。”
“我们移植过程中遇到的最大问题是编译器和其他工具,”Peterson 说。“较新的 C++ 代码相当依赖于 STL。” Red Hat 附带的 gcc 2.96 编译器不支持 C++ 标准模板库 (STL),因此 ILM 使用 gcc 3.01 代替。他们的多平台构建环境是基于 Python 与 GNU make 协同工作而定制的。
ILM 必须适应一些 CPU 差异,例如浮点实现和数字精度。“在某些情况下,我们手工优化了内联汇编,以充分利用 Linux,”Peterson 说。一个问题是如何在 Linux 中跟踪每个线程的内存访问,Linux 处理线程 ID 的方式与 IRIX 不同。另一个令人烦恼的问题是,不允许浮点异常抛出 C++ 异常(因为 FP 异常是异步的)。
在集成旧版 Motif 应用程序时,ILM 必须克服一些小部件差异问题。“我们主要使用 Motif,”Peterson 说,“但在我们最新的应用程序中使用 FLTK”。ILM 使他们基于 SGI 的应用程序在 Linux 上看起来相似,包括字体和颜色。ILM 软件项目可能包含 80 或 90 个库。对于声音,ILM 使用 OSS,但 Peterson 说他们可能会切换到 ALSA。SGI 提供了 dMedia 库,但在 Linux 上,ILM 必须创建自己的一些媒体库来填补缺失的功能。为了播放电影,其尺寸为 2k x 1k,比典型的 320 × 240 PC 视频大 27 倍以上,ILM 创建了自己的 QuickTime 兼容库,用于他们的翻页书播放器。
“使用 Linux,速度的提高是每个人都注意到的,”Hendrickson 说。他说速度的提高
……不仅仅是 20% 或 30%,而是快了五倍。我们在这里对计算有着难以置信的需求。这是限制因素。如果艺术家可以获得更多的迭代,结果就会好得多。我们有很多绝地武士,很多长袍要建模。如果没有硬件带来的速度,我们将无法做到这一点。以前我们不得不手动制作近似值。星球大战II使用数字替身工作,在真人演员和 CGI 表演者之间无缝融合。我们正在使用 CGI 来取代演员身上的橡胶假体。我们正在进行更多的模拟,更多的刚体动力学。当机器人被光剑切碎时,碎片会以逼真的方式飞散。
乔治·卢卡斯在最初的星球大战中使用了 400 个镜头,在星球大战II中使用了 2,000 个镜头。创建这些镜头需要三位视觉特效主管,就像在制作三部电影一样。“预计在星球大战II之后,我们能够做的事情将会有飞跃,”Hendrickson 说。
部分归功于 Linux。
Robin Rowe (Robin.Rowe@MovieEditor.com) 是电影技术公司 MovieEditor.com 的合伙人。他曾在一家财富 500 强 IT 公司领导视频研发,在两所大学教授 C++,并且曾是 NBC-TV 的技术总监。他领导两个用户组:LinuxMovies.org 和 OpenSourceProgrammers.org。