houdini大神自诉:为什么我要放弃maya I
原文地址:http://www.tokeru.com/cgwiki/index.php?title=MayaToHoudini
由CG猎人独家翻译,转载请注明
这期为大家翻译了一篇houdini和maya大神做的软件对比,注重展示两个软件的差异和houdini的强大的地方。文章有点长,小编分两次内容更新。通过这篇文章,你不仅仅对houdini各个方面有比较深入的了解,对maya的也会有不一样的体会,如果你之前是maya用户的话,这篇文章值得一看。
在2011年的我做完《快乐的大脚2》之后写的第一个版本,当时我只是在灯光部门非常局限地使用houdini。在2014/2015年我非常幸运地可以在《分歧者》和《复仇者联盟》两部电影中更为广泛地使用houdini,从周围一些最优秀的houdini艺术家身上学习。
所以是时候更新这个文章了。我并不能算是个专家(我花了数年时间才大概掌握maya,我在2001年开始使用maya)但是现在我非常自信了解什么是houdini和什么是houdini不擅长的,还有什么是不应该拿来比较的。我猜想你们读到这里就像几年前的我,对houdini可以提供的功能制作的效果非常着迷,但是我从maya这个圈子里面跳出来还是相当地谨慎。下面这是个maya与houdini对比,我会努力指出为什么要学习houdini。
当然,很抱歉会有很长的文字。
大纲
1为什么要那么麻烦?
2houdini的核心概念:带有数据的点,通过清晰的网络进行控制
3houdini的有一个强大的概念-vex语言
4详细的对比
4.1流程
4.2统一性
4.3原子vs整体
4.4可探索性
4.5深度
4.6Mantra渲染器
4.7有趣
5houdini每个模块
5.1建模
5.2动画
5.3运动图形
5.4通才,学生
5.5特效
为什么那么麻烦(转用houdini)?
看一下对下面的情况你是否熟悉:
你在maya里面创建了一个比较复杂的场景,想着你也许可以编辑一下超图网络,然后退缩了。
你知道你需要修改你的geometry,这包含了很多不舒服或不希望的操作来整合到你的场景中。
你尝试使用reference代理,但是遇到了很多本应该被处理的bug。
你试着使用mel和python,虽然它起作用了,但是这应该有更好的方法。
也许你头脑中构思了某些变形器或者插件,但是想到要学习C++来实现这个功能有太大的工作量。
你用了一些粒子表达式然后认为挺有趣的,但是这种方法有点过时和晦涩,对于这类数据控制应该有更好的操控方式。
你对关系编辑器中连接A→B的重复多次操作感觉到疲惫。
你想知道为什么后台至少需要3个节点来创建一个簇,2个节点来创建晶格还有很多奇怪的中间节点,这些看起来没什么意义。
你使用过多边形选择编辑器然后觉得挺好的,但是为什么我不能制作程序化的效果而仅仅只是建模呢?
百分之80的效果可以很快实现,但是有20%的效果你没有足够的控制和按钮来实现。
你想知道为什么paintfx和fluidfx流体毫不相关,这也和xgen不相关,和布料不相关,和很多模块都是不相关联的......
你从 highend3D/crativecash等网站下载脚本只为做一些本该很简单的流程的事情。
你也许会对maya软件中bug感到沮丧(maya version2),即使是最好的场景,并且你是正版用户,你同样会看到红色警告的bug,只能希望2个月后的更新包可以修复这些bug。
你尝试使用maya中的刚体,如果运气好的话应该可以解算高达20个不规则的模型。
你开始对3D的数学有兴趣了,但是在材质编辑器中使用乘除和条件语句并不是最好的数学强化效果。
你想再拓展一下你的边界(限制),现在是是时候改变了.
houdini的核心概念:带有数据的点,通过清晰的网络进行控制
下面这个是典型的maya的网络
Here's a typical maya network:
线连接得到处都是,很难读,也很难编辑。而且也没有意义去整理他们,因为改变了某个节点,整个节点网络会自动重新排布,除非是超级大牛(或者是受虐狂),你一般不会在这浪费时间的。
为什么maya会这样?一个可能的解释是mesh存储的数据很简单,verts存储他们的的位置信息,就是这样。如果mesh数据很简单,但是你整个场景的逻辑都需要在这样的网络中显示出来。如果一个节点只有一个输入和一个输出还可以接受,但是maya节点并不不是这样,一个标准的变形器需要inMesh 输入mesh接口和outMesh输出mesh接口连接,数据,空间坐标连接到操控器中,变形簇,成员关系列表等等。为了达到这个目的需要额外的节点来存储这些数据,难怪最终maya网络节点会这样子。
与简单得多的houdini网络相比
连接非常清楚,每个节点放置的位置都可以被记住,所以houdini鼓励你整齐地排列好节点和添加注释。你可以从头到尾浏览并且快速知道发生了什么事情;这个与nuke合成很相似。
如果看看的更仔细,大部分的节点只有一个输入口和一个输出口。那些可以接收2个输入端的通常是合并几何体,或者把输出分开来做一些有趣的事情,最后把这些结果合并在一起。
houdini可以有那么整洁的网络的原因是它允许mesh带有其他数据。更加具体地说,maya仅仅允许vertex存储位置信息,houdini中的point 点(houdini里面主要是point而不是vertex)不仅可以存储数据信息,还可以存储颜色,选择集(houdini叫做组),速度,缩放,法线或者任何你想放在点中的属性。
与nuke和通道相似,如果mesh只能存储位置信息编程网络会复杂,如果可以存储其他信息网络会很简洁。这个类似于maya中的粒子系统表达式。如果只能修改粒子的位置其实用处不大,但是maya粒子会存储rbgPP粒子颜色,speedMult 速度倍增,rand_this随机值 foo_that其他属性等等,有这样的smart聪明的几何体让事情更加简单。
houdini中不仅点可以这样做,polygons多边形 particle粒子,voxel体素,物体自身等等,都可以存储任何你想要的数据,可以在后面操作。
另外像nuke 有用的方法。一个grade节点默认会影响整体图像效果,但是如果你指定一个mask遮罩(这个遮罩的信息也是存储在这张图片中),这个grade的效果仅仅会在遮罩的区域中起作用。相同的,大部分的houdini节点会对整个mesh进行影响,但是一些节点会让你指定特定的点/多边形信息,这样会改变的他们的行为。比如,一个polyextrude挤出节点会相同的挤出所有的面,但是每个面上有单独extrudedistance挤出距离的属性,挤出的深度会被设置成不同的效果。或者一个 curve to tube曲线转化为圆管模型可以基于曲线的颜色进行半径设置。或者一个软体的lag的属性由每个点上不同的lag属性进行控制。这是异常强大的。
所以再次强调
houdini的几何体可以存储任意数据,这样节点网络更加整洁,更容易读取,操作和控制数据。
houdini的有一个强大的概念-vex语言
如果houdini的核心概念仅仅是“聪明的数据和整洁的网络",这也够好的了(实际上,很多houdini用户在每天工作都接触这些都足够了),但是houdini另外强大的一面就是 VEX语言。
vex语言是houdini的基石。如果你已经用过mel或者python然后想“不就是又一门语言,有什么特别的?” 一个关键的区别就是速度;Mel和python语言可以说非常慢,大部分编程语言都是这样。
其实更应该把vex比作在现代浏览器中的JavaScript;它是难以置信的快,基本上如原生态的C++的运行性能。其实,它的比Javascript更加快因为它默认是多线程的,如果你用的是多核心的电脑,速度会更快。
一个通常的代价就是时间基本上耗费在编编译上(比如,使用xcode或者VC++创建一个插件,每次改变编译的时间可能都需要数分钟)。VEX编译非常快,通常快到你基本意识不到,所以默认vex是自定实时为你编译的,最终用户基本上感受不到这个编译时间。
因为它的性能如此优异,你可以用它变形大量的几何体。例如,在我的16核工作站机器上,可以给一个200万点添加一个sine波浪运动并且实时以24帧每秒运行。
另外一个常见问题是语言的复杂性,但是与它的强大功能相比,VEX还是相当简洁的。 JavaScript是狗的早餐(不懂这个比喻),C++是外星人,nuke中的blinkscript看起来像C++但是更难。VEX是非常简洁的。
但是,并不是所有人都喜欢vex,那没关系。那就是为什么我们有vops,vops是vex的可视化编程。类似于maya的hypershade,你可以使用网络节点编程,创建一个乘法节点,if节点,ramp节点等等,在maya中每个这样的节点都是像C++的插件。这些都是在后台编译好的。
更进一步,当你理解vex和vop,他们可以在houdini的任何地方使用到。shaders材质是vex,particle模拟也是vex,流体模拟,几何体变形,摄像机焦距,线变形器,2D合成操作等等。这里有很多地方都可以探索,万一哪天你心血来潮,可以双击某个节点,然后就看到vex代码和vop 网络的执行代码原理。
一旦你掌握了vex和vops(如果你之前用过maya的hypershade或者任何其他maya的变形器,对houdini的vop就很容易上手)你会很惊讶之前竟然没有用到它。
所以,这个是更高级别的推销。接下来是更多houdiniVSmaya的细节的对比。
细致对比
工作流程
让我们先放下高端的问题讨论。很明显,如果你做任何的特效模拟,houdini是为你准备的。houdini特别擅长于特效和模拟,虽然核心的模拟工具很出色,但是真正让houdini与maya,max和其他竞争者不同的是是它的工作流程。节点网络很清晰而且很好阅读,任何时候都可以把特效模拟缓存到硬盘是非常方便的;可以保留不同的模拟版本并且随时切换或者混合缓冲,还有使用takes进行参数不同模拟,并且清晰地对比差异,或者使用wedge进行自动测试等等。所有这些都是你在maya花大力气才能获得的,但是在houdini中是基本的工作流程。
相似的,一旦你放弃把maya的工作流程应用到houdini中,转而以程序化思考流程,事情就会简单得多。我记忆中使用maya的工作流程是下面这样的:
做这个,然后做那个,之后删除历史、修改,修改,然后再删除历史。保存一个版本。删除历史,创建blendshape,然后删除历史,这时候你意识到自己需要保存历史......深吸一口气,开始堆栈修改器。点击,点击,哦不,他们的顺序错了,汗!尝试和修改顺序。汗!回到之前版本。痛苦,流汗,删除历史,再试一次。再次崩溃。决定要写些代码来自动创建节点链接 。发现自己再也不这样做了,把工作交给别人......
和我这段时间houdini中的流程体验对比
加载模型,开始一个个放节点。发现节点是顺序错了,把他拖拽出来,放到正确的地方。
发现这条路是死胡同,没问题,把他移动到另外一边,给个标签,标注版本1version1,搞掂;
从这个节点树的中有用的部分连接一条支线出来,节点,节点,还是节点,意识到之前的节点是可以重复使用的。
合并分支,做一些愚蠢的事情,发现电脑变慢了。
添加一个cache缓存节点,让时间线播放一遍(也就是都缓存到起来)然后电脑就变快了。继续连接节点还是节点。我在想是否需要中间的那10个节点?
选择他们(觉得不需要的节点)占时屏蔽他们功能,看看结果如何。屏蔽,激活,如果他们没什么作用,直接拖拽出来删除。
如果你想对比版本1和版本2的效果,添加一个switch节点,切换两个版本效果。得知之前导入的模型已经更新了,找到第一个节点,在filepath加载模型路径的地方改变模型路径,然后查看最后面结果,继续工作。
如果你发现中间的4个节点非常常用,可以把他们打包成subnet,然后转化为一个工具,然后在以后的工作流程中可以直接使用这个工具。
所以一切继续
这是更加流畅的工作方式,再次和nuke很类似。你不会因为有很大的构建历史受到惩罚。由于节点网络非常简洁,你可以试验,连接旧的节点,分支做测试,合并回来等等操作。它就是一块3D的素描版,可以达到难以执行复杂的镜头,但是并不像maya一样你有大量的按钮工作需要做。
houdini可能会让你感觉到开始会麻烦点,相比于maya直接可以选择模型操控。点的选择可以通过法线和空物体对比程序化地选择。然后在之后取随机的点,然后判定他们是否在地面下面。
在继续之前再讲一个故事,我和一些maya灯光师讨论过一些技术上的问题,然后向他们展示我是如何在houdini中解决的。我做一些我觉得很明显的事情。我在原点放了一些物体,每个物体有一个独立的ID,我想把它们排成一条直线,我做着看起来很简单自然的事情,直接通过表达式把每个物体的x轴位置对其。maya用户笑了然后说这是houdini的做法。我就蒙了,其他方法怎么做呢?手动排列?这没有任何的手柄或者标示可以保证如果这些模型改变了,这个布局会保持不变(不够程序化)。
当然,也许直接手动调整10个模型位置很简单,但是这是个关键的差异。一旦你开始程序化思维,你就会思考到关于结果,步骤,流程的任何修改和调整。真实的情况是你总会遇到模型会更新,客户要求改变,一些小故障需要修改等。为什么不花点小时间来做一个非常方便的工作流程,为将来修改节省时间呢?
统一性
maya很努力整合每个模块,但是这是个艰苦的斗争,Xgen, bifrost, paintfx, nucleus, fluidfx, mentalray这些看来其都是相互独立的应用只有很少一部分可以想通的。为了保持通用性而不得不做的牺牲。转化成多边形,删除历史,推到下一个使用完全新方法的模块。还有之前旧的或者已经放弃的模块(software renderer, heirachical subdivs, visor, old cloth, hardware render buffer, curve flow...)
houdini很少有一些老旧的角落,大部分情况都是可以综合使用的。创建geo,给这个物体添加一些属性,使用这些属性变形或者创建新的几何体,把部分输入到粒子模拟,让粒子驱动流体模拟,创建材质渲染流体并且可以读取在节点网络中的节点属性定义流体发光,并且在IPR渲染器中预览;这些在houdini中都是相当的简单。当你想构思的时候,就可以得到。所有的部分都是想通,只是当你回到maya的时候要注意这不一样。
原子vs整体
有些时候我可以通过paintfx效果获得想要的结果,也许80%的最终效果,但是就卡主了,还有20%的提升我无法达到。对于流体特效同样。虽然在整体属性中它有大量参数滑竿控制,但是如果你的特定要求却不能适配的时候,你就卡主了。maya的方法可以总结为较少的控制物体,但是带有很多参数和控制选项。
houdini偏重与其相反的方向。很多细分的节点,相对来说每个节点控制都较少。某些节点一期组和成了工具架的功能,所以平均起来一个流体特效模拟看起来像是3-4个节点,但是进入这些节点,你会发现10几个节点在里面,几个里面又包含了10几个节点,就这样一层层包裹下去......
虽然刚开始看起来很有压力,但是意味着你很少会被这些节点困扰。还有很多高级功能需要花时间去学习,但是结果是越来越少限制。也许你并不希望手动连接你的流体模拟,但是如果时机成熟,对于了解基本的的功能还是非常有用的。
可探索性
和之前观点有关,houdini鼓励你好奇,maya并不是这样(如果惩罚这个词有点严重,至少是不鼓励)窥视maya窗帘背后的节点网络虽然很基础的事情,但是确实一团糟。后台是功能性的,但是并不是用来给用户调整的。mel和python 并没有好到那里去;场景后台成百上千的脚本作用是用来连接节点和创建UI。
在houdini你会经常思考,这个工具,是怎么运行的?双击这个节点进入里面的内容,里面有非常清晰的介绍和说明,或者有一些不不同的案例来展示如何使用这个工具,或者是一个高度精简的VEX语言来获得某些特定的效果(相比于maya 代码通常用于连接节点和创建UI)。到处看一看,找到有意思的东西,然后回来优化你的工作。
深度
那些一开始让人沮丧的是,为什么有那么多节点,我们怎么可以知道所有这些节点?后来慢慢会变成探索游戏(我之前用10个节点来做一个事情,后来发现有一个节点可以直接实现同样效果)。永远都有其他节点,永远都有其他技巧。unix和windows的系统概念同样适合。unix是把每个功能单独设计出来,每部分只做好一件事,然后把他们连接起来做一些很强大的事情。但是windows设计90%的人要做的90%的事情,非常快速。对于unix的学习需要花点时间,但是奖赏是值得的。
Mantra渲染器
我用maya和mentalray渲染器很长时间了,然后使用了houdini的prman和3delight。Mantra渲染器让我意识到我之前学习其他渲染引擎浪费了多少脑细胞。它是非常可靠和强大的,我已经忘记了我对自己所用的渲染引擎没有信心的那种感觉了。无论是超级大量的几何体,全局光照,百万级粒子还是体积等,光线追踪,它都可以渲染。
当然它有些不足的地方;对于简单的 场景的并不能超级快渲染,但是是对于越复杂的场景表现越好。并不支持GPU加速渲染,没有材质球,ipr可能会比较慢并且痉挛,并且优化是个无底洞,这些都不是值得欢呼的事情。
让我影响深刻并且现在让我认为是理所当然的是,我可以自定义材质,并且非常方便快捷。我自认为我很擅长maya的hypershade,使用ramps和sampleinfo节点来做一些愚蠢的事情。这些只是houdini中mantra10%的功能而已。他可以如lambert一样简单,同样也可以像可视化编程一样使用点云来代表成千上万的硬盘中的贴图,通过几何体上的属性驱动,这些可以选择3中不同的次级材质,依据摄像到物体的距离翻转raytrace模式等。
趣味性
也许是因为我还在学习houdini或者因为我用maya太久了,我觉得houdini非常有意思,像在玩一样,而maya更像在工作。再次,对于nuke我也用了几年了,依旧觉得很有意思,所以...
还有很多原因,但是我必须继续下面的内容了
houdini中的每个模块
快速提示
建模
也许houdini并不适合快速建模一个吉普车,角色等用于商业广告制作;一些常用的建模节点都有些旧和过失,很不幸的是这是大部分建模师需要的(倒角,布尔运算,切割和细分等等)。这样说吧,houdini创建了非常棒的辅助工具;对于建模项目是对于越接近程序化的效果(比如乐高模型,创建20种不同的植物,5种建筑类型,做一些反乌托邦的建筑的石头等)却是非常有用。很好地支持abc文件导入和导出,类似与nuke中的读写方式。所以如果你安排你的工作,可以在maya中完成最基本的模型,在houdini中做一些疯狂的模型修改,然后再输出。
当然,如果一个项目本来就是程序化(建模神经系统,或者网络空间,随机抽象形体和mesh点云等等)这就更加适合了。
动画师
再一次houdini可能不是很适合。houdini有绑定,但是有点为发育不成熟的感觉。如果你是一个经常做自定义绑定的工作人员。使用python做程序化的曲线条件控制,也许值得一看,vex让你能够快速搭建变形器的原型。
像建模一样,houdini可以为动画做一个很强大的数据倍增器。从maya中导入fbx,使用它来做群集,或者创建各种多样性,或使用chop制作音乐控制,或者使其做程序化控制等等
真相是,直到现在,绑定和角色动画都不是sideFX 和用户的关注的重要区域。但是事情正在改变,一些XSI(另外一款非常强大的三维软件)的工程师来到sidefx中工作,其中一个是很有经验的绑定和角色特效师现在也在sidefx中工作,他们组成一个团队来专门制作一个角色动画,使用houdini独立制作一部动画短片。
运动图形
我打赌houdini很适合。C4D很快速并且相当方便,但是正如你在maya中使用MASH这样的插件时候发现你会被速度和灵活性限制,houdini可以超越这一切。
灯光
绝对值得探究。Mantra是个伟大的渲染器,渲染图层管理和材质编译非常强大。让你比任何其他三位软件更容易接近和了解后台。
在最新基本版本中允许houdini处理越来越大的场景,通过stylesheets的使用,就像kanta一样。最终发展结果可能会像这样:你有很大量的abc文件在你场景中,但是像kanta,你并不需要把它加载进入houdini,你可以仅仅加载边界框boudingbox,并且你可以检查abc文件的结构赋予材质和在stylesheet中正确渲染。但是你不需要把那么沉重的模型加载到内存,直到你开始渲染需要的时候。现在现在houdini还在努力,但是前景非常好。
专家 学生
当然,为什么不是呢?我发现houdini让我加强了3D的基础知识,因为你经常需要操控底层的东西,当然,是以可以获得的方法。它同样给你很好的一步步提高的知识体系。一开始,你在高层级做一些简单表达式,然后是一些vops控制每个点,然后颜色理论,然后是vex,然后步入矩阵,然后在矩阵中晕乎,然后让你理解空间转化在材质中的影响,然后把你引入材质,然后又把你引入其他.....这样周而复此的循环,是个很好的学习方法。
Fx
特效,不用提了,最吊!