点
击上方蓝字
CG世界
关注我们
“ 感知CG · 感触创意 · 感受艺术 · 感悟心灵 ”
中国很有影响力影视特效CG动画领域自媒体
本文经授权转自公号:CG怪咖
在实际生产项目中,毛发解算环节,时常会遇到一些特殊需求,诸如,毛发打湿,或者是堆积,掉落,碎屑等效果。
一般来说,都会考虑在一个软件系统内完成这类效果是最方便,但大部分时候,解算和特效往往是相对独立的环节,大部分解算制作人员都使用Maya,在这种情况下,要完成这类特殊效果,就显得力不从心,大部分商用的毛发软件在特效交互这块,都比较弱(了解不多,如果有具体的案例,可以在留言区讨论),因此,如何将Maya中的毛发转入Houdini是一个现实可行的方案。
那问题来了,如何转换这一堆毛发喃。
转换全部毛发数据量,还是只导出guide curve进到Houdni做解算,然后在Houdini做毛发插值,我们分别讨论实际项目中的可行性,我们先说第2种。
导出guide curve
这里又分两种
1.只在Houdini做解算,然后把解算的动态重新传回Maya,这类方法可能只适合做动态解算,而且在没有开发支持的前提下,这类方法也就是解决了一些交互s类问题,属性传导可能需要r&d去做开发,这还不包含shader方面,比如,水的交互,毛发打湿的状态和材质的表现都需要attribute去控制,所以此类方法只适合部分效果。
2.重新在Houdini还原造型,包括shader部分,这样可以避开开发上难度需求,基本上Houdini现有的毛发体系要完成复杂的交互效果都应该可以完成,开发难度相对上一种方式来说就小很多了,但这类方法有个最大的问题,就是如何保证造型和Maya资产完全一致,大部分公司的毛发造型都还是再Maya下面,当然,是可以把造型都换到Houdini来做(把毛发环节整体放到Houdini来做是否对流程的改变很大,数据的交互问题,渲染是在什么地方做,这都是一系列的问题,对动画项目来说,流程的要求相比影视来说更加苛刻,渲染的统一性是大趋势,即在一个框架下做灯光渲染,比如Maya、Katana,如果抛开以上流程要求,是可以在Houdini里完成全部操作,但这不是本次文章标题所需要讨论的部分)。分析到这里,我们总结一下,这两种方式的利弊。
|
|
|
|
|
复杂交互效果,需要开发支持,最主要的是属性的传递问题,需要开发的东西比较多
|
|
|
还原资产造型难度大,且需要改变整个毛发解算流程包括对前期资产流程,当然没流程的公司可以当没说
|
如何转换,不同毛发插件可能情况不太相同,数据格式也可能不同,abc,obj,fbx或者是usd,而且像X
gen这类动态生成的毛发系统,可能在导出abc和渲染实际之间也会有很大区别,所以我么希望采用的方案是较统一,且"视觉正确"的方式来进行数据的交互,何为"视觉正确",稍后来说,首先需要解释的是,为什么需要用比较统一的方式来进行数据传递,分析这一点我们可以用反方向的思路来阐述,就是缺点是什么:
以上各类毛发插件转换有时候还需要先转换成其他格式才能确保能正确转换,比如需转换成ncurve,有时候也会破坏数据的原始性,比如curve被转换成poly。
说明:以上数据的支持性,并没有进行测试有效的测试,只是为了说明问题,可在留言区讨论。
2. 不同毛发系统在导出过程中过于繁琐,假如一个资产混有不同插件的毛线系统时候,转换方案就各不相同,且跑解算缓存时还需要反复跑,在实际项目中怪咖本人就遇到过比较极端的例子,xgen非交互式+xgen交互式+nhair的毛发系统。
3. Lookdev的问题,如果是在Maya完成所有操作都还好,如果是换成Katana的情况,就需要考虑材质如何快速传递,层级保持一致性就很重要。
1. 数据是否和渲染结果一致,这个可能用过xgen的人也知道,显示结果和解算结果也不一定是最终渲染的结果,逼近xgen动态生成的,在实际数据转化到渲染阶段前,数据都是可以修改的,所以通过dcc功能的转换未必是审核lookdev看到的正确效果。
2. 属性是否支持,最直观的属性就是width值,根据实际效果,可能需要定制shader,因此可能需要各种属性或者自定义属性,pref,uv等等,是否在导出过程中能正确支持。
说了那么多废话,其实想要满足上述要求的最好方式,就是通过渲染器导出代理,也不需要开发什么额外的工具,是不是觉得很失望啊........咱们接着往下说,不然也不会绕怎么大个圈子来说这事,还专门写文来说。这里我们使用Arnold渲染器来说明一下,文中也说了导入Houdini是为了做解算而非渲染,所以在导出代理的基础上我们为Hoduini添加了自定义节点来读取代理文件,节点如下图所示:
我们通过Arnold File Reader节点来读取ass中的geometry信息,以达到在Houdini重构资产的需求,当然这里主要就是用于重构毛发了
1. 属性支持导入
2. 层级支持
3. 支持几何体,包括curve, point, polymesh
节点能读geometry上的属性,比如width等,另外我们也通过该节点将层级记录在了"path"属性上,以方便输出abc文件的时候保持层级一致,这样导入其他DCC软件就可以更换的适配材质环节。下面是一些转换数据在Maya,Houdini,Katana中的显示: