- 在要模拟的网格模型中手动添加节点或者对于形状比较复杂的模型使用TetGen之类的网格划分程序自动添加节点和连接;然后设置合理的仿真参数(质量、刚度、重力、时间步长...)
- 骨架驱动:SkeletonModel 使用骨架结构来表示变形体。骨架由一系列节点(cGELSkeletonNode)和连接这些节点的弹簧(cGELSkeletonLink)组成。
- 节点与弹簧:节点代表变形体的控制点,具有质量、位置、旋转等属性。弹簧连接节点,模拟弹性力和约束。
-
connectVerticesToSkeleton函数将变形体网格的顶点与骨架节点(cGELSkeletonNode)关联起来,使得网格顶点能够根据骨架节点的运动而变形。在变形体仿真中,骨架节点是控制点,而网格顶点是受控点。connectVerticesToSkeleton 函数会遍历网格的所有顶点,找到每个顶点最近的骨架节点,并将其关联起来。关联后,网格顶点的位置会根据骨架节点的位置、旋转和缩放动态更新。
-
变形的发生依赖于工具与节点之间的交互力计算。如果没有接触,交互力为零,节点不会受到外力作用,而变形体的形变是通过节点之间的相互作用力传播的。如果没有任何节点受到外力,整个变形体将保持静止状态。
四面体化处理(Tetrahedralization)是将一个三维网格模型分解为四面体(Tetrahedron)的过程。在物理仿真和计算几何中,四面体化处理是非常重要的步骤,尤其是在涉及变形体(如软体、弹性体)的仿真中。以下是进行四面体化处理的主要原因:
- 为物理仿真提供体积表示:
原始的网格模型通常只表示物体的表面(如三角形网格),而没有体积信息。对于物理仿真来说,仅靠表面信息无法描述物体内部的力学行为(如弹性、塑性、应力分布等)。四面体化处理将物体分解为四面体单元,这些单元填充了物体的内部空间,提供了体积表示。这种体积表示是物理仿真的基础,能够更准确地模拟物体的内部力学行为。
- 支持有限元分析(FEA):
有限元分析是一种常用的物理仿真方法,用于计算物体在受力时的变形、应力分布等。FEA 需要将物体离散化为小的单元(如四面体),以便在单元上求解物理方程。
- 弹簧-质点模型的构建:
在骨架模型中,四面体的边可以作为弹簧连接,而四面体的顶点可以作为质点。这种弹簧-质点模型能够简化物理计算,模拟物体的弹性变形。四面体化处理能够明确表示物体内部的连接关系(即哪些顶点是相互连接的),这对于构建物理模型(如弹簧网络)非常重要。
- 适应复杂几何形状:
四面体化处理能够适应各种复杂的几何形状,包括带有孔洞、凹面或非流形结构的物体。相比于其他体积离散化方法,四面体化处理更加灵活,适用于广泛的几何模型。使用工具(如 TetGen)可以自动将表面网格转换为四面体网格,无需手动建模,大大提高了效率。
- 下面是使用Chai3d和Tetgen对舌头模型进行四面体化,在其内部添加节点和连接后进行软体力反馈仿真的一个测试:
使用TetView可以用平面切割模型来观察四面体化后的内部结构:
与四面体化处理相比,手动设定弹簧-质点模型的方式存在一些显著的缺点。
- 缺乏体积表示
手动设定的弹簧-质点模型通常只关注表面或局部区域,缺乏对物体内部体积的完整表示。这会导致仿真结果不够准确,尤其是在涉及内部应力、应变分布的情况下。四面体化处理提供了完整的体积表示,能够更准确地模拟物体内部的力学行为。
- 节点分布的均匀性和合理性难以保证
手动设定节点时,节点的分布可能不均匀或不合理,导致仿真结果出现异常(如局部变形过大或过小)。四面体化处理能够自动生成均匀且合理的节点分布,确保仿真的稳定性和准确性。
- 弹簧连接的复杂性
手动设定弹簧连接时,需要明确每个节点之间的连接关系。对于复杂几何形状,手动定义这些连接关系非常繁琐且容易出错。四面体化处理自动生成四面体单元,四面体的边自然形成了弹簧连接,无需手动定义。
- 难以处理复杂几何形状
对于带有孔洞、凹面或非流形结构的复杂几何形状,手动设定节点和弹簧连接几乎不可行。四面体化处理能够自动适应复杂几何形状,生成合理的四面体网格。
- 扩展性和通用性差
手动设定的模型通常是为特定几何形状定制的,难以扩展到其他形状或场景。四面体化处理是一种通用的方法,适用于各种几何形状和仿真场景。
- 工作量巨大
对于复杂的模型,手动设定节点和弹簧连接需要大量的时间和精力。四面体化处理可以自动完成这一过程,大大减少了工作量。
参考:
TetGen
TetView Tutorial
chai3d-3.3.0\modules\GEL\examples\GLFW\03-GEL-duck