详细内容或原文请订阅后点击阅览
修复了 30 年布料模拟问题的多项式
三十年来,裁剪错误一直存在于每个 3D 模拟流程中。以下是发生这种情况的确切原因、数学原理是如何出错的,以及如何交换一个方程来解决这个问题;以及 python 代码,您可以亲自查看!《修正 30 年布料模拟的多项式》一文首先出现在《走向数据科学》上。
来源:走向数据科学在几乎所有构建的 3D 动画管道的代码中。当角色的袖子穿过他们自己的躯干时,当裙子在行走过程中夹住腿时,当模拟桌布像光一样穿过桌子边缘时,它就会出现。在电影上映之前,高端工作室花费数千个艺术家时间逐帧搜寻它。在视频游戏和实时图形中,它就这样出现了。
剪辑错误。不知道自己是实心的布料。
2024 年末,一家名为 ZOZO(日本最大的时尚电商平台)的公司在该领域领先期刊 ACM Transactions on Graphics 上发表了一款物理解算器,标题为“A Cubic Barrier with Elasticity-Inclusive Dynamic Stiffness”。当时这件事几乎没有上过新闻。然后社区开始发布与他们拥有的所有其他求解器的并排比较,ZOZO 演示不断获胜。
演示展示了布料的行为就像布料一样。不是橡胶,不是果冻,不是幽灵:织物。五层网格覆盖在一个球体上,每一层都相互接触,没有一个三角形侵入另一个三角形的空间。在大规模压力测试中,求解器可以同时处理超过 1.84 亿个接触对,而没有任何相互渗透。
要理解为什么多项式交换是一个如此重大的突破,你必须看看它之前几十年的数学妥协,以及如何在几百行 Python 中复制 ZOZO 的核心逻辑。
无人能完全解决的问题
碰撞部分是每一个聪明的想法最终崩溃的地方。
另一种经典方法是约束投影:在每个步骤结束时,检测交叉点并显式地将顶点移开以解决它们。在实践中更稳定,但它不能适当地节省能量,在长时间的模拟中引入漂移,并且在具有数千个接触的场景中,它确实变得很难保持鲁棒性,它解决了一个交叉点,并创建了另外两个交叉点。
\[
\]
$$
B_{\log}(d)=
=
