暴雪高级Houdini特效艺术家为您解析《暗黑4》宣传片制作细节
Houdini官方与SIGGRAPH 2021联合,邀请了暴雪娱乐的高级特效艺术家Nema Safvati做了Houdini制作的专题分享
本次分享的内容关于暴雪娱乐最受期待的游戏之一《暗黑破坏神4》发布的CG动画短片《By Three They Come(2019)》
短片写实的画风,暗黑的视觉风格
中外网友看完后齐呼:暴雪,去做电影吧!
“血之鼓”
影片末尾,3个不幸的灵魂,他们的血与肉从三端汇集,蜿蜒向中心蔓延,形成通往新生命的大门,莉莉丝撑破细胞膜,浴血登场。
动画短片的制作团队内部,将这个三角形的整体称为“血之鼓(Blood Drum)”,它由暴雪娱乐的高级特效艺术家Nema Safvati制作。
Nema Safvati高级特效艺术家暴雪娱乐
曾就职于MPC, The Mill等知名视效工作室
参与作品:《蚁人2:黄蜂女现身》、《复仇者联盟3:无限战争》、《蜘蛛侠:英雄归来》等
“血之鼓”制作解析
“血之鼓”包含组成(Formation)和撕裂(Tearing)两个部分,我们也将分为两个部分进行解析。
01、组成
原画
Nema:图片中展示的原画是“血之鼓”已经汇集形成的效果。
Branching Growth Solver(分支生长解算器)
Nema:开始模拟前,曲线从三个顶点开始蔓延,一边向内生长一边留下曲线路径痕迹。第一个生长阈值(Generation)的颜色为黄绿色,在更高的生长阈值中变成红色,生长阈值最大值为5。
每个曲线路径的顶端你可以想象为Houdini人群模拟的Agent节点。每一个时间点,Agent节点会基于不同的规则,决定动画的走向。基于层层叠加的规则,我们最后得到了比较自然的纹路,纹路仿佛一边蔓延,一边在思考走向,就像人群模拟的设置一样。这其中我用到的是Boid Flocking的算法。
我们换一个角度看这个解算器,只看每一条曲线的顶点,这样有助于我们分析解算器的两个部分——Growth(生长)和Branching(分支)节点。
Growth(生长)节点 - 第一帧中曲线的走向是设置好的,之后会根据不同的规则发展出不同的走向。首先运用一些噪波,设置曲线从上一帧到下一帧的生长走向。之后由矢量(Vector)决定各曲线在后续的模拟中是继续生长,还是停下。
Branching(分支)节点 - 根据已有的曲线,可以生长出分支,是否生长取决于一些变量,比如密度(Density),点和曲线的Agent节点。
生长和分支背后的逻辑最根本的不同是——分支不仅会从曲线的顶点蔓延,在设定范围内也会由任何点开始蔓延。根据不同的参数,比如最小、最大的点Age参数、曲线Age参数,以及密度。只要某个点通过了所有的参数设置,开始长出分支,它就会将自己复制形成一个新的Agent节点,按照规则生成一个新的曲线。
生长模拟分解
血管 - 图中看到的是“血之鼓”的主要血管,模拟中的密度设置得很低,所以长出来的血管不多,并且生长的方向也比较统一。生长阈值的最大值控制让其生长速度稍慢。
组织 - 组织模拟的密度值开的比较高,也没有给生长阈值设限,达到密度的最大值之前曲线能一直生长分支,看起来非常密集。我们选择了较高的频率,同时在生长的设置中,我还调整了顶点的波噪应用方式,得出了较密集的网络结构。
细胞膜 - 细胞膜部分运用的是点云,组织模拟中的顶点会将点云的点激活,已生成的点会不断生成新的点。只要接近组织中的曲线,或者接近已生成的点,就会继续自动生成新的点。我调整了点云的生长规则,避免和组织的生长看起来太过相似。
结合 - 除了细胞膜是点云之外,大部分都是曲线。
将所有的曲线转换成管道,管道的粗细由Age和所在的生长阈值决定。这些管道都在细胞膜中,细胞膜是透明的,血管和组织在平面中生成了凸出的效果,但仍然是分开独立的网格(Mesh)。
绿色部分为组织,比较细,平面上会有细微凸起的效果,增添了比较有意思的材质效果。
蓝色是主要的血管,动画开始不一会儿血管就不再变动了,因为血管不多。但是因为他们比较粗,所以凸出的效果更明显。
黄色部分是纤维,他们是通过程序化动画制作的,不是用的生长模拟,因为我们想要不同的视觉效果,所以在动画中看得更明显。
紫红色部分则都是卷须,这是我的领导Jamie Pilgrim为之前的镜头制作的,这部分的纹路很像捕梦网,非常酷。
灯光分解
Nema:部分的颜色变化是次表面散射(Subsurface Scattering)和表面结构各区域厚度不同带来的,当然还有内部几何体遮光带来的效果。Surfacing团队制作了投射的材质,为作品增添了很多细节,这是光靠几何体无法实现的。
“血之鼓”靠近外缘的部分不断变薄,所以当相机移动到“血之鼓”的下方时透光性比较好。
当莉莉丝的脸将要穿过“血之鼓”的时候,“血之鼓”表面的拉伸效果是通过Vellum布料模拟完成的。我们用了一个很简易的代理网格(Proxy Mesh),当时只是一个没有厚度的2D平面,我们把平面放到模拟的代理网格中做点变形(Point Deform),包括细胞膜和内部的几何体。最后我运用了Delta Mush,Point Delta在拉伸变形后能有效地保留几何体结构形状和材质。
02、撕裂
原画
Nema:原画部分我们可以看出,各部分都非常薄,模拟需要表现出非常有张力的效果,表面还有一些略显恶心但又非常复杂的材质。
最初的计划是结合Vellum模拟和OpenCL,这样的组合不至于一下跑光内存。所以我们确定了主要元素的撕扯效果可以用布料模拟,但是我们还想增添更多细节,所以除了基础的布料模拟,我们还在内部和外部加了曲线,形成我们看到的黏糊糊的网状结构。
测试模拟
早期测试模拟
Nema:“血之鼓”断裂效果实现 - 这个部分的挑战是在何处放置衔接(Weld)的点。第一种方式是预设撕裂的部分提前撕裂网格,就像破坏效果(Destruction Effect)。这样能行得通,但是看起来没什么意思,因为所有撕裂的效果都是提前决定好的,张力不够的地方就会毫无撕裂效果。我想要一个更动态的撕裂效果。所以我断开了网格中所有Primitive。所有的Primitive都只是小小的三角形布料,他们被衔接起来。不同于拉伸(Stretch)和弯曲(Bend),衔接是可拆分的,这就是我们实现撕扯效果的方法。这个方法带来的问题是,一些三角形布料彻底断开后会出现一些布料碎片,看起来效果不好。只要不将这些Primitive和其他的物体连接,后期删掉这些碎片就解决了。
拉伸部分的精度 - 当细胞膜拉伸的时候,拇指周围的部分的精度很低。因为整个细胞膜从原始的拓扑中拉出去很长一段距离,所以网格需要较高的精度支撑这个动作,但是如果将整个网格的精度拉高就不值当了。好在Vellum模拟能够处理这种情况,我将中心需要拉伸的部分加厚,剩下的部分就保持正常的精度就好。
我们将拉伸的比例做了可视化,受力部分的原始长度和拉伸长度的比例决定了衔接部分是否发生撕裂。红色意味着快要达到衔接约束阈值,后续就发生了撕裂。比如我把阈值设为2,那么当拉伸距离是原始距离的2倍时,衔接就会发生撕裂。衔接部分撕裂时产生的力会让周围更多部分撕裂,撕裂的效果得以延续。此外,我绘制了一个蒙版,用于控制不同部分的撕裂阈值,让高处张力没有这么强的地方也有一些撕裂效果,看起来不至于这么单调。
细胞膜外部线约束(Strands) - 这个部分模拟的来源是散点(Scatter Points),将相邻的物体连接。我在模拟中用的是Vellum Hair约束,他支持拉伸、弯曲和破坏。所以我不需要再单独添加衔接的部分。
回到线约束撕裂的效果,细胞膜内部和外部各有一层线约束,他们都有自己独立的网络。不像布料模拟,这里的两个约束都会被破坏,Pin约束将线约束和布料钉在一起;曲线中的各个点也有约束,也会发生破坏。他们都属于Vellum,所以工作原理是一样的,我用拉伸的比例来决定撕裂的效果,当布料撕裂后,线约束也被拉伸断裂,所以各部分的撕裂效果很相似,但又各有特色,视觉效果更动态。
有的部分虽然细胞膜破裂了,线约束还在拉伸。撕裂后,很多残骸掉落而下,就像撕碎的布料,我手动添加了部分残骸掉落的效果。
灯光分解
此部分和之前的灯光设置相似,用到了次表面散射和投射材质。 至此,“血之鼓”的组成和撕裂两部分的制作就完成了。