从SIGGRAPH看《Tangled》

2010年11月24日,Disney的第五十部动画长片《tangled》(中译:魔发奇缘)在北美公映。尽管影片剧情与格林童话原作《Rapunzel》相差了十万八千里,但是观众口碑颇佳,本作被公认为Disney近年来少有的佳作,超过了《Tinker bell》系列和09年的《The Princess and the Frog》。值得关注的是,本片由于未能通过中国大陆有关部门的审查而无法在内地公映。而从近年的动画大片票房趋势来看,Disney的童话系列往往叫好不叫座;Dreamworks的《shrek》系列已经显现疲软,今明两年的《Kung Fu Panda 2》和《Madagascar 3》将担负SKG的重任;与前两者相比,Blue sky的《ice age》显得势单力薄一些。而目前动画片既叫好又叫座的盟主恐怕非pixar莫属了——这恰恰印证了创意与技术的完美结合——才是当代动画产业的关键路径。

本文是在SIGGRAPH2010年会发布的一篇讨论文章《Simulating Rapunzel’s Hair in Disney’s Tangled》的基础上完成的,在此感谢原作者Kelly Ward、 Maryann Simmons、Andy Milne、Hidetaka Yosumi和Xinmin Zhao。针对与此相关的一篇正式论文研究将提交至本站新推出的mp77’s paper review子站中。鉴于acm和ieee等组织的版权和一些其它因素,今后涉及有关已正式发表的论文的研究文章将提交至上述受限站点,同时我们也欢迎与有类似专业兴趣的同学展开交流,我目前的研究方向是计算机三维人物头发的模拟技术。2010年SIGGRAPH年会是于2010年7月25日-29日在美国加州洛杉矶举办的。

众所周知,头发模拟是动画制作中难以解决的问题。在《Tangled》中我们(这里的“我们”是指walt disney animation studio的相关工作人员)更是遇到了一个“极限任务”——模拟影片女主角Rapunzel长达70英尺的头发。除了头发精密且蓬松的结构和特点,如此长度的头发还对相关的模拟技术提出了许多特殊的挑战。此外,影片特定的艺术指导也进一步增加了模拟工作的复杂程度。

我们使用了自主研发的基于弹簧质点系统生成动态曲线的头发模拟软件dynamicWires来模拟Rapunzel的头发。 在应对Rapunzel独特头发的过程中,我们对dynamicWires进行了一些改进。

头发堆叠和形态保持

影片中Rapunzel的头发经常堆叠在场景中的地面或其它物体和角色上。在模拟过程中,把弹力应用于当头发处于飞行过程中的碰撞部分,以维持相应的形态,并起到头发股之间相互作用和分离时所产生的摩擦力效果。这种弹力只有在曲线段之间的运动距离超过了一定阈值,并引发直接接触和分离时才会生效,该阈值是基于足以令头发股间发生滑动和粘连程度值而界定的。考虑到实时性,我们通过首先生成较为稀疏的引导曲线集来降低模拟海量长发的复杂度,该集合的容量在200条左右。这种低密度的曲线集覆盖在人物的头部最显著区域,使得外层显著区域的头发能够轻易落入头发体内部底层的空隙中。为了解决这一问题,我们引入了额外的碰撞支持机制以填充头发体内部的空隙:首先连接相邻曲线的控制点,并使这些线段与现有系统发生一般碰撞关系,已生成的模拟曲线再和上述机制发生碰撞关系即可。

轻松拖拽

在现实中,Rapunze恐怕需要比较费力地拖拽她后面的长发。影片的艺术指导要求Rapunze能够熟练地拖动这些长发,且当女主角移动时头发需要平稳地在人物身上滑动,并避免人物动作因负重而显得僵硬,在人物停止运动时还需要一定的喘息。

为了控制头发拉动的程度,我们增加了一个切向摩擦参数,以模拟发生地面接触时沿头发股各个切线方向的摩擦力分量。这种切向摩擦分量随后会被比之少两个数量级的其余摩擦力削减一部分。头发就能够根据其长度进行平稳滑动,而非当人物停止运动时,拖动在地面的头发就会立即停止滑动。

模拟冻结

考虑到头发的可见长度和动作以及最小长度需要在每个镜头发生变化,我们采用了模拟冻结机制以降低对头发背面的模拟程度,这种机制允许我们在每一幅画面调整头发模拟的长度,并且显著提升头发模拟的速度。

在某些场景中长发的背面并不可见,然而人物却仍然非常活跃的情况下,将那些不可见且不进行模拟的部分头发与其余头发分离,令其不再成为有效的部分。当这种分离令头发的浓度过于稀疏时,为了保证长发具有一定的浓度错觉,需要强制停止模拟的部分缓慢恢复状态。

有时当大量可见头发拖在地面上且没有任何动作时,头发的这些无效的部分仍然与有效部分发生视觉联系,我们通过保持相关的模拟冻结区域并使用弹力,使模拟部分和非模拟部分能够平滑地混合在一起。那么头发模拟的计算资源就可以被高效地用于高度活跃的头发区域——而不是在不运动的头发模拟上浪费时间。

头发的内部约束机制

头发的内部约束机制能够使其在特殊情形下仍可以自然地运动。我们在相邻的曲线间加入了较小的弹力,以精确控制头发使其保持相对静止的状态,避免其轻易四散开来:例如散落在人物的肩部、面部和身体部分。根据一个特定的距离分离参数,这些约束机制能够在超过一定距离时自动减弱它们的强度,并在超越另一距离值时令其完全分离。这就保证头发通常能处于聚集状态而非迫使其发生单股头发的运动,并且能够根据人物整体动作的程度自然而然地允许部分头发分离成不同的部分。

结语

上述的模拟特性帮助我们实现了对Rapunzel超乎寻常长发的模拟。模拟冻结和碰撞支持机制允许我们只需要在每个镜头中模拟人物的一部分头发,减少大量头发模拟的复杂性负担。轻松拖拽和头发的内部约束机制使我们能够严格根据影片艺术指导的要求控制头发的自然运动。

应当注意,本文仅仅是针对《Tangled》中的关键需求所提出的技术解决方案的粗略讨论,而非真正提供详细的实现。我幸运地在makingof上找到了针对本文原作者之一Kelly Ward女士的视频讲解,由于我们缺乏SIGGRAPH现场视频资料,相信这部长约14分钟的视频能给我们带来更深层次的启发。