软体动力学
目录
软体动力学
软体动力学是计算机图形学的一个领域,专注于对可变形物体(或软体)的运动和属性进行视觉逼真的物理模拟。应用主要是在电子游戏和电影中。与模拟刚体不同,软体的形状可以改变,这意味着物体上两点的相对距离不是固定的。虽然点的相对距离不是固定的,但预计身体会在一定程度上保持其形状(不像流体)。软体动力学的范围相当广泛,包括模拟肌肉、脂肪、头发和植被等软有机材料,以及其他可变形材料,如服装和织物。通常,这些方法仅提供视觉上似是而非的模拟,而不是准确的科学/工程模拟,尽管与科学方法存在一些交叉,特别是在有限元模拟的情况下。目前有几个物理引擎提供软体模拟软件。
可变形实体
体积固体软体的模拟可以通过使用多种方法来实现。
布料模拟
在计算机图形学的上下文中,布料模拟是指以二维连续弹性膜的形式模拟软体,即为此目的,可以忽略纱线层面上真实布料的实际结构(虽然建模布料在纱线层面上已经尝试过)。通过渲染效果,这可以产生视觉上似是而非的纺织品和服装模拟,用于视频游戏、动画和电影的各种环境中。它还可用于模拟除纺织品以外的二维材料片,例如可变形金属板或植被。在电子游戏中,它通常用于增强穿着衣服的动画角色的真实感。
布料模拟器通常基于质量弹簧模型,但必须区分基于力和基于位置的求解器。
模拟软物体与其环境的真实交互对于获得视觉逼真的结果可能很重要。布料自交在某些应用中很重要,可用于制作可接受的逼真模拟服装。这在交互式帧速率下实现具有挑战性,特别是在检测和解决两个或多个可变形对象之间的自碰撞和相互碰撞的情况下。
碰撞检测可以是离散的/后验的(意味着物体在预定的时间间隔内及时前进,然后检测到并解决任何穿透),或连续的/先验的(物体只前进直到发生碰撞,并且碰撞是在继续之前处理)。前者更容易实现且速度更快,但如果对象移动得足够快,则会导致无法检测碰撞(或检测虚假碰撞)。实时系统通常必须使用离散碰撞检测,以及其他特殊方法来避免未能检测到碰撞。
检测具有明确定义的“内部”的布料和环境对象之间的碰撞很简单,因为系统可以明确检测布料网格顶点和面是否与身体相交并相应地解决它们。如果不存在明确定义的“内部”(例如,在与不形成封闭边界的网格发生碰撞的情况下),则可以通过挤压构造“内部”。由四面体定义的软体的相互碰撞或自碰撞很简单,因为它简化为检测固体四面体之间的碰撞。
然而,通过离散碰撞检测来检测两个多边形布料之间的碰撞(或布料与其自身的碰撞)要困难得多,因为在一个时间步长之后没有明确的方法来局部检测已经穿透的布料节点是否在“错误”的一面与否。解决方案包括使用布料运动的历史来确定是否发生了交叉事件,或者对布料状态进行全局分析以检测和解决自交叉。Pixar提出了一种方法,该方法使用配置空间中网格交叉点的全局拓扑分析来检测和解决布料的自穿入问题。目前,对于实时布料系统来说,这通常在计算上过于昂贵。

为了有效地进行碰撞检测,必须尽快识别肯定不会发生碰撞的图元并从考虑中丢弃以避免浪费时间。使用的方法包括:
- 边界卷层次结构(AABB树、OBB树、球体树)
- 网格,无论是统一的(使用哈希提高内存效率)还是分层的(例如Octree、kd-tree)
- 连贯性利用方案,例如使用插入排序的扫描和修剪,或使用前跟踪的树-树碰撞。
- 混合方法涉及各种这些方案的组合,例如粗AABB树加上在碰撞叶子之间具有一致性的扫描和修剪。
其他应用
可以通过软体动力学方法模拟的其他效果是:
- 可破坏材料:脆性固体的断裂、软体的切割和布料的撕裂。在有限元法特别适合于模拟骨折,因为它包括在材料中,其物理上是当断裂发生什么决定内部应力的分布的一个现实的模型,根据断裂力学。
- 塑性(xxx变形)和熔化
- 模拟头发、毛皮和羽毛
- 用于生物医学应用的模拟器官
在计算机图形环境中模拟流体通常不会被视为软体动力学,软体动力学通常仅限于对倾向于保持其形状和形式的材料进行模拟。相比之下,流体呈现出任何包含它的容器的形状,因为粒子通过相对较弱的力结合在一起。