2018年,网易《逆水寒》与AMD合作开发出来一款名为“海飞丝”的算法,该算法基于AMD的TressFX毛发模拟技术,可以在游戏中较为清晰的模拟人类头发的运动,大大增强了游戏场景的真实感。一个健康的成年人大概拥有10万根头发,如果想在游戏场景中模拟头发,就需要对这10万根头发自身以及周围环境进行交互建模,很明显,这是一项非常吃显卡算力的算法。
最近,在AI领域属实“赚麻了”的另外一家显卡巨头NVIDIA也公布了自己在毛发模拟领域的最新进展,他们提出了一种基于ADMM算法的离散弹性模拟求解器(Discrete Elastic Rods,DER),DER基于神经物理学来训练网络预测头发在现实世界中的运动方式,同时也可以充分利用GPU的大规模并行计算能力,大大减少了算法在高分辨率头发模拟场景中的迭代时间,目前DER已经被计算机图形学顶级会议SIGGRAPH 2023录用。
论文链接:
https://research.nvidia.com/publication/2023-08_interactive-hair-simulation-gpu-using-admm
从NVIDIA公布的演示视频来看,DER真正实现了逼真的头发模拟效果,与之前方法相比,DER带来了效果惊人的交互式效果,其不仅可以对每根头发进行单独的实时物理模拟,甚至还能保留头发的弹性、光泽等真实属性,让整体的效果看起来更加逼真,这种效果让人不禁联想,未来会不会出现AI发型师这种职业呢?作者在文中介绍到,这种逼真效果得益于DER内部的神经物理网络,并且基于离散的弹性连杆设计,DER可以将规模庞大的头发进行模拟目标分解,这使得整个任务非常契合GPU的并行运算结构,最终实现了实时的交互式物理头发模拟效果。此外,与目前最为先进的基于CPU的模拟求解器相比,DER甚至可以将先前的模拟时间从几天缩短到几个小时,同时还能提高头发模拟的质量,这可真算得上是降维打击。
一、本文方法
从论文题目中不难看出,本文提出的DER求解器是基于经典的ADMM算法进行设计的,在介绍本文方法之间,先带大家回顾一下ADMM算法:
ADMM(Alternating Direction Method of Multipliers)交替方向乘子法是一种优化算法,用于解决带有约束条件的凸优化问题。它的核心思想是通过将原始问题转化为等价的子问题来进行求解。ADMM算法的优点在于它能有效地处理带有约束条件的优化问题,并且在很多情况下能够获得较快的收敛速度。它在机器学习、信号处理、图像处理等领域得到了广泛的应用。
本文提出的离散弹性模拟求解器DER,内部设计了一种隐式的时间积分过程,可以将增量问题进行分解,由于ADMM算法本质上也属于一种分治算法,其采用分解-协调的方式来对问题进行求解,即通过协调小的局部子问题的解来找到大的全局问题的解。因此DER非常适合在具有大规模显存的并行GPU上运行。
1.1 头发运动建模
作者提到,解决这个问题的一种经典方法是执行全局牛顿迭代,将上式简化为一系列具有摩擦接触约束的线性系统,然后就可以从许多专用求解器中选取任何一个来对每个头发实例进行求解。然而,对于DER而言,同时分析多个头发多边形实例涉及到庞大的矩阵运算,这会导致GPU内存访问效率低下,并且可能需要双精度求解。因此,作者开始寻找在完全全局迭代(如牛顿迭代)和完全局部(例如XPBD[1])方法之间的折衷方案,即既可以在GPU上有效求解也可以在全局层面传播迭代结果的高效方案。
1.2 ADMM问题拆分
1.3 ADMM问题求解
二、实验效果
本文的所有实验均是在一个消费级工作站上进行的,工作站配备了一颗 Intel Core i9-10980XE CPU 和两颗 NVIDIA GeForce 3080 Ti GPU(每颗显存为12GB),视频渲染使用NVIDIA Omniverse套件完成。
2.1 数值验证实验
本文首先对DER求解器进行了数值验证实验,共设置了三个与弹性模拟性能相关的实验:悬臂、弯曲和粘滑,目的是为了测试DER数值模拟器,本文的分析推导与实际物理观测量之间预测的一致性。作者提到,为了充分利用本文所提DER求解器的大规模并行性能,对于上述三个实验,作者都一次性求解所有的实验配置项,实验结果如下图所示,从左到右分别是悬臂、弯曲和粘滑实验。
其中,悬臂实验(最左侧)主要计算了连杆在重力下处于平衡状态时,其两端的自然下垂程度,并且计算下垂偏移量带来的纵横比,并且与理论纵横比进行对比,可以从图中看到,DER基本上可以拟合理论纵横比的结果。对于弯曲实验,作者设置了多种具有不同长度和自然曲率的连杆,然后模拟计算他们在重力平衡状态下是否能够保持平面状态,通过实验,作者发现DER的预测结果可以与理论分析曲线保持良好的一致性。在粘滑实验中,作者将一个原本状态垂直的自然连杆逐渐从一个方向推向另外一个方向,并记录连杆的弯曲程度以及其克服摩擦力的实时大小。通过实验表明,DER对弯曲程度和摩擦力的预测结果基本上拟合理论值。
2.2 算法计算性能实验
上一节中进行的数值验证实验侧重于验证DER求解器的算法精度和收敛性,在本节中,作者对DER的计算性能也进行了评估。如下图所示,作者使用DER进行了毛发实验,分别对带有16000根和128000根毛发的实验体进行了模拟实验,模拟目标包括连续时间碰撞和非连续时间碰撞两种。
由于超出了单个GPU的显存限制,对于"Hairball 128k, CT"场景,作者在2个GPU上进行测试,并且使用了相同质量的分割技术来处理涉及在不同GPU上的顶点的接触。下表总结了模拟计算计时结果,其中16000根毛发的配置几乎可以以实时交互式的帧率运行,而毛发规模更大的128000根的配置则需要约40分钟才能完成。
2.3 本文方法的应用场景
本文提出的基于ADMM的DER离散模拟求解器已经达到了远超传统方法的模拟精确率和计算效率。本文作者随后为DER展望了一个非常有趣的应用方向,即在人类发型设计方面引入DER作为AI助理。例如,作者设想了一种基于物理模拟的原始编辑工具,用户可以用于对发型进行调整,调整过程中算法会遵循发型本身的弹性和自碰撞约束等条件,来确保发型的真实层次和体积,并为用户提供实时的发型预览。
此外,作者还尝试以程序化方式来调用这种AI助手,如上图所示,作者为模拟器提供了一系列的基本操作(例如外力摆动、生长或修剪头发等),基于这些操作,用户可以以多种不同的方式进行组合,快速生成大量候选的发型,真有AI Tony老师的感觉了。
三、总结
本文提出了一种基于ADMM算法的毛发离散模拟求解器DER,与循环迭代的牛顿法相比,ADMM的计算成本要低得多,本文在此基础上提出了一些启发式方法,来根据模拟场景来调整每根头发多边形实例的约束权重,实现了非常逼真的模拟效果。此外,基于英伟达的专业计算GPU,作者对DER也进行了并行计算优化,大大减轻了算法的运算量,实现了数千甚至上万根毛发的实时模拟。除了内部的算法设计,作者还考虑到了DER在用户体验端的一些设计,除了现有的一些程序化编辑方式,作者在未来还考虑为DER增加一些触觉反馈机制和智能选择工具,这可以使用户在任何角度上操纵、梳理和修剪头发,使整体的使用体验更接近真实的理发店场景,到那时,我们就可以在电脑上为自己设计发型了。
参考
[1] Miles Macklin, Matthias Müller, and Nuttapong Chentanez. 2016. XPBD: PositionBased Simulation of Compliant Constrained Dynamics. In Proceedings of the 9th International Conference on Motion in Games (Burlingame, California) (MIG ’16). Association for Computing Machinery, New York, NY, USA, 49–54
作者:seven_
Illustration by IconScout Store from IconScout