国内的CG行业,最普遍的从业门槛可能就是学会相关软件的上手操作。
而不同软件的学习难度其实有着不小的弹性,Houdini代表着这种弹性的上限,它使创作过程不再是频繁操作鼠标在视窗中左拉右拽,而是以类编程的方式从系统内部去生成3D内容。
不同的软件各有优势,本篇则主要侧重于特效模块的对比。对很多人来说,广义上的特效包括所有非实拍的动态视觉效果,但是在影视或动画领域,特效(Effects/Fx)只是CG数字视觉效果制作流程中的一个环节,特指那些涉及到动力学模拟或程序化的视觉内容制作。
其它像场景/角色设定、建模、绑定、动画或渲染等等就都不属于特效环节。场景特效-海浪
角色特效-毛发
接触特效之前,我最早是以合成工作为主,除了Nuke这款合成软件,接触最多的三维工具是Maya。对行业稍有了解的人会有一个印象,Maya更多是被用作建模和动画工具,在动力学特效上似乎没有什么优势。
其实Maya本身的特效系统还是很不错的。比如“N系列”的粒子和布料系统,nParticles的逐粒子处理逻辑可以灵活地满足各种相对复杂的效果需求,结合粒子表达式和mel命令,可以进行相当自由的操控。著名的群集插件Golaem,就是基于maya自身的nParticles粒子系统,为群集提供导航和各种行为依据。
Maya特效模块一个很方便的地方在于,不同的解算器都可以共用相同的约束和力场,nConstraints又提供了可控性极强的约束功能,如果不考虑程序化和更强的拓展性,Maya仍然可以胜任一些常规的特效任务。
程序化
你可以用mel表达式提高与软件交互的效率,也可以用这些命令语言批量创建和操控对象的几何元素——但你始终只是作为一个“第三者”从外部对它进行修改,并不是作为“开发者”参与到对象的生成过程中去。最简单的例子,就是在模型表面上生成随机起伏的简单变形。程序化的思路是为模型上的每个元素基于其空间位置计算出一个噪波值,然后根据这个噪波值对每个元素的位置进行沿法线方向的位移,更新它的原始空间位置。
这个过程大概需要两三个步骤,其结果是一连串的代码,以及和这些代码相关的若干个调节参数。而非程序化的思路则是一次性的,你必须提前确定好相应的参数设置,一旦改变模型形状并应用后,本次的编辑任务就结束了,这里有一个常见的专有词汇——“破坏性编辑”。程序化参数调节
破坏性编辑
除了上述的建模工作,特效模拟尤其依赖程序化生成,比较常见的是动力学几何体之间约束关系的构建——物体A和物体B之间相互约束,使得其中一个受到碰撞后带动另一个物体运动。原始的方式是选中两个物体,执行一个约束创建命令,而当在成千上万个物体之间建立类似的甚至更复杂的约束关系时,这显然是不现实的,于是通过程序化的方式批量创建自定义条件和判断机制,从而实现较大程度的自动化控制,就明显要高效多了。
程序化(Procedural)还有一个翻译叫做过程化,编程中有一个对已存在的函数进行“重构”的概念,程序化的思维就是让用户亲自参与几何对象的内部重构过程中,而并不仅仅在对象的输出结果上雕琢修改,前者是程序化工具软件的核心,后者则是以Maya为代表的传统软件的工作方式。
有鉴于这个短板,后来的Maya引入了一个外部插件Bifrost,它本来是独立的程序化生成工具,现在被内置到了Maya中,成为了一个单独模块。但与其说这是一个模块,不如说是一个“楔”在Maya中的套娃软件,它有自己独立的特效系统、几何数据格式、缓存流程等,和Maya自带的n系列动力学系统基本没有多少直接交互,这让软件变得有些怪异臃肿——像是一个人为了比汽车跑得快,放弃了还算健硕的两条腿,给自己也装上了颠簸颤抖的四只小轮子。总之,Maya通过Bifrost为用户提供了程序化生成的入口,和与之配套的特效解算框架,尽管这个入口是第三方的。
在特效方面,Maya在引入Bifrost之前,市面上也有很多其它的外置特效插件,它们基本上都是针对特定的模拟模块,比如专门制作破碎的Pulldown,专门制作烟火流体的FumeFx,专门制作群集的Goleam、Miarmy等等,但是外置特效插件的一个很大的弊端,就是相互之间很难进行直接的动力学交互,这也正是各个三维软件内置的特效系统的优势;其次涉及到老生常谈的成本问题,如果一个公司必须使用正版工具,那么大量依赖插件的制作流程显然是不划算的,宿主软件本身的费用并不低,加上有些插件的价格甚至比宿主软件还要高,成本无疑会陡然上升。除了Maya之外,我对其它的三维软件接触较少,但是估计大体情况应该相差不远。在这些问题的对比下,Houdini的光芒就显得耀眼多了。
在Houdini中,从几何创建到不同的动力学解算模块,其基础数据格式都是统一的,无论刚体碎块、软体毛发、流体烟雾,它们的几何数据源都遵循着相同的处理规则、共用着相同的生态系统——同样一个几何源,通过不同的属性定义,可以针对完全不同的目的进行调用。比如,一个多点连成的线段,它既可以是毛发,也可以是骨骼,也可以是一条动画路径,又或者不表示任何具象的物体,而仅用来描述一系列抽象的约束关系,在不同模块的应用下,它甚至可以同时扮演这几种角色。这让人联想到生物课上的一个概念——人体中各个部位的细胞看起来各司其职,有着完全不同的分工和外形,但本质都是干细胞在不同基因的表达下,分化而成的各种功能细胞。Houdini就提供了这么一个几乎万物一体的内容生成环境,在这样的环境下,创作过程不再是枯燥乏味的键鼠命令堆积,而更多是一系列的“头脑风暴”,这对维持工作的新鲜感,还是有很大益处的。
节点式
另外还有软件操作的便利性和直观性。
在Maya、AE这些“老牌平台”上,你必须要像操作仪表盘那样,不断调用各种菜单、点选各种命令,在弹出的N个窗口中来回忙碌,工作记录常常分散地隐藏在各个用于不同目的的面板参数中。
而近些年来,大部分的图形生成软件都有一个明显的进化趋势,那就是普遍向节点式的操作模式发展。这种电路图般的界面设计,最大的作用就是将工作思路进行了可视化,使制作期间的思考过程像树枝的生长轨迹一样完整清晰地呈现在眼前。
Maya工作界面
总之,做为一个内容创作工具,Houdini的具体优点是数不过来的,如果非说它有什么明显的缺点,那就是它的学习难度了。
像前面说的,这个行业的入行门槛往往取决于软件的学习门槛,Houdini可能是这个门槛弹性范围的上限。用程序员描述底层编程语言的话来说,它的知识密度比较高。Houdini的生产流程时刻都让我们直接和底层的技术细节打交道,而在其他软件中,这些同级别的细节一般都会很“友好”地封装起来。它们主要涉及两个方面的内容,一个是编程,一个是数学。这里往往有一个误区,以数学知识为例,我们可能知道,学习特效的重要条件之一,是数学基础,但是这个数学基础并不是应对学校考试的刷题能力,而更多是概念上的理解,我们完全可以像普通人通过看各种科普资料理解量子力学和相对论那样,理解那些看似高深的数学概念。其实近些年,以Houdini、Blender为代表的一些程序化DCC工具,无形中为使用者们带来了一个附加结果,就是把体验数学思维的门槛降到了一个很低的程度。用户并不需要真的具有多么强的数学功底,就能相对快地了解到那些高等数学课上才能接触到的数学工具,并方便地在软件里使用它们。其它所谓的“高门槛”,本质上也是这样。特效技术毕竟是为艺术效果服务的手段,特效软件本质上也是一种艺术创作工具,所以无论软件的门槛多高,本质上也是面向普通人的。
当然,这并不是说Houdini学习起来可以到毫不费力的程度,不管你有多好的学习资料,多全面的视频教程,面临的困难程度整体上是一样的,最终都需要相当长的时间,不断投入精力去学习。
至于学习方式,具体因人而异,并没有一个权威的学院派攻略。我个人的学习经历可能不值得效仿,如果说有一点可以参考,那就是要培养阅读一手文档资料的习惯,工作中一半以上的问题,基本都能在权威文档中找到答案。
官方文档截图
至于学习Houdini的基础,我觉得除了上述的数学基础之外,编程基础是优势项,但不是必要条件。前面说Houdini的知识密度很高,这意味涉及到的技术概念大多比较偏底层。当然,说它是优势项,就是它并不是必须的,你也可以在不断地学习使用和理解的过程中,从头建立自己的知识分类,说不定在以后学编程的时候,还会反过来变成了另一方面的优势项,只是这个初识的过程是相对比较枯燥的。
还有就是Houdini的VEX表达式了,我以前一直以为,这是Houdini中非常难啃的硬骨头、重头戏,而实际学习的过程中基本没有把它当做一个模块特意去学,如果不是以高度程序化的工作任务为目标,那么只要掌握它的基本语法和一些常用函数,熟悉它的编译逻辑,一般的特效制作任务是完全没有问题的。如果你没有任何的编程基础,那也只是多花些时间理解相关概念和熟悉语言风格。
说在最后
其实写到这里,说是测评,还不如说是对Houdini单方面的安利。
不无狭隘地讲,我希望每个有闲暇时间的人都去玩一下以Houdini为代表的程序化创作软件——它对从业者来说是生产工具,但是对更多人来说,它也可以是一款精密的益智游戏,你可以在编程和视觉创作中锻炼自己的逻辑思维能力,在创造有趣的画面的同时,也能感受三维程序世界的那种精巧和复杂的魅力。
全文完