—— 微资讯 · 微课程 ——
利用零碎时间,走上超神之路!
皮克斯最新电影Soul(中文译名《心灵奇旅》)是由彼特·道格特执导的动画电影,由杰米·福克斯、蒂娜·菲等参与配音。该片讲述了梦想成为爵士钢琴家的男主乔伊·高纳与厌世的灵魂22相遇,它们携手返回现实世界寻找生命的意义的故事。由于里面涉及了死亡,新生,兴趣,人生意义,甚至包括种族等因素,受到了国内外观众的热烈讨论。当然,这些内容在各种平台都有观影心得分享以及电影的延伸讨论。
昨天有粉丝问soul里面的灵魂角色是如何实现的,看起来像是体积,但是如果是体积如何能够保留如此精确的形态,也包括如何进行绑定动画设置等?其实这都是Pxiar所面对的技术挑战。我搜集了一些资料,关于皮克斯是如何创建出这样一种形态,挺佩服皮克斯这种从不妥协,专门选择挑战和突破的精神。核心流程是 创建surface模型(用于生成特定的线条,比如轮廓线以及皱纹)→体积创建(一个角色由好几部分体积创建)→开发IDshader 自定义基于法线控制颜色着色器→USD缓存渲染。核心流程使用了houdini,在下面详细技术拆解中能够看到大量熟悉的houdini运用。迪斯尼/皮克斯的soul中的灵魂人物都具有非常特殊的外观,用来标识他们进入了一个独特的世界,这种设定带来了许多新的挑战。艺术部门的每一个位制作人员:模型,材质,视效部门灯光,软件开发等共同努力才把这些有趣的角色带到屏幕上。soul的世界是抽象而空灵的。这需要在视觉清晰度和设计吸引力之间取得平衡。由于我们角色还是使用surface进行绑定和动画,一个关键的挑战是提出一个新的表示形式符合我们视觉需求。为了达到柔软性体积状态和动态更改的线条,我们建立了一个系统以程序方式在Houdini中生成此数据。我们需要进行非常严谨的数据计算才能得到精确的数值。我们以可配置的方式开发了用于管理此计算的自动化系统,同时保留下游渲染的数据与角色表演的变化同步。
1效果开发
soul人物的设定类似于棱镜对于光反射的效果一样的光影效果(图2左边)。难点在于在创造在柔和/轻盈但是又必须具有足够清晰度之间取得平衡的外观,使形状和表达式容易被识别。这要确保角色实现3S效果的同时不会又硬表面过度。
我们写了一个自定义的材质节点(IridescenceDriver或IDriver)达到双重Henyey-Greenstein体积着色器的目的,来实现这种非真实的光照效果(图2右边)。总的来说,IDriver材质通过模型法线读取自定义的颜色来设置albedo的颜色,用来设置假的diffuse和specular。为了让角色看起来更加地柔和,我们对把模型的法线细节给过滤掉(如下图)
对于脸部较小和较复杂的形状,我们进行了建模并设置可动画显示的线条以突出轮廓或皱纹。(图4,左和中)。
绑定同时还输出线条用于强化细节头发和衣服的。我们在角色手部添加了轮廓线用来加强手势和动作的识别,让动作更加清晰。这个就是通过顶点法线方向与相机角度方向进行dotproduct计算提取的轮廓线(猎人解读:这个在houdini中很常用和简单就可以实现,提取三维模型的轮廓线)动画师还有额外的参数控制这些线的可见性,密度以及线的粗细。主角Joe有一些配饰用来强化它在soul世界的特征标志。比如,他的帽子就像他身体的一部分,所以帽子的效果看起来和身体是一致的。但是,他的眼镜虽然是必须的,却是没有生命的,所以是无色状态。眼镜的硬边可以让它保持半透明,并且具有明显的可读性。背景的群众灵魂的头发也像Joe的帽子设定,而大部分的配件都是去饱和度(还是有点彩虹色)。有少部分是像Joe的眼镜。扩展阅读 直接通过数学写出SDF体积动画 小女孩自拍短片
二创建体积
我们使用houdini创建每一帧的体积以及为IDshader提供体积类型的信号。为了确保动画可以正确读取半透明的体积信息,我们大部分的工作流程都是基于相机的。每个角色都是由好几个单独体积构成;大部分这些体积都会有部分或者完全的自我遮罩,可以创建更加干净的没有层叠的效果。比如,牙齿和舌头都是基于相机精确地进行裁切用来匹配展开嘴的运动。眼球是surface模型,不是体积,所以我们创建的是遮罩贴图而不是对眼睛进行裁切。其他材质特征比如眼睛,眉毛,脸颊和嘴唇都是体积对象;很多都是从相机投射过来的。我们使用这个来调整颜色和shader,适配到IDshader中。我们基于surface模型法线与相机投射计算出对应的体积法线。对于柔和的法线体积,我们把surface转化为SDF,对SDF进行扩展,再添加一个平均方式的模糊,然后把这个SDF再转化回Surface得到平滑的法线映射回原来的模型(猎人解读:houdini的标准操作,转SDF,VDBreshape + VDBsmooth + VDBconvert).
对于所有的背景以及其他的soul角色,我们创建了houdini网络来实现这种效果,比如图1 右边的两个角色。他们只需要某些特定的控制。因为每个角色都是自己特定的形态,大部分共享的是相同的拓扑结构,这样可以极大地进行批量线性管理。对于剩下群集的soul群集角色同理。对于表情的线的制作,图4中的左边和中间,通过原来的mesh基于相机方向挤出生成extrude。对于轮廓线,就是求得模型法线与相机角度之间dotproduct求得。
三Pipeline流程
我们的houdini网络生成了许多精确的体积通道。这个需要大量的而且频繁的计算。我们创建了一个系统叫做hexport(houdini export)在我们渲染农场实现了批量平行数据计算。系统可以高度调整,让不同部门按照需求进行不同的精度安排。在早期的生产中,角色艺术家使用我们已有的特效流程。特效艺术家还用着需要大量计算的体积,我们已经开发过平行计算以及大量数据存储的工作方式。其他部门导出一个带有动画的USD文件,每一帧进行单独存储,但是这不能立即使用平行处理。因为在文件写出的时候存在条件竞争(race condition)。反过来,我们的特效艺术家使用了工具usdstitchclips把每一帧缝合到USD value clips中。
四附加视频
皮克斯导演Pete Docte讲解《心灵奇旅》的制作历程