引言:当几何开始呼吸——Kangaroo2 的本质是什么?
在传统 CAD 建模中,几何是被动且静态的:我们画线、建面、拉伸体块,一切都在笛卡尔坐标系的确定性中完成。但 Kangaroo2 改变了这一范式——它让几何具备了”行为”。当你把一条曲线交给 Kangaroo2,它不再是死的线段,而是一串具有质量、速度和约束的质点系统,开始在你的屏幕中”呼吸”、”挣扎”、”妥协”,直到找到那个满足所有力的平衡点。这种从”建模”到”模拟”的思维跃迁,正是参数化设计从形式操作走向行为涌现的核心分水岭。
Kangaroo2 并非一个简单的物理引擎插件,它是基于动力松弛法(Dynamic Relaxation)的粒子-弹簧系统求解器。理解这一底层机制,是掌握碰撞与张拉模拟的关键。本文将摒弃”步骤教学”的俗套,从最底层的数学物理原理出发,逐步推导出 Kangaroo2 的行为逻辑,并通过实战案例验证理论,最终让你获得一种”透视”Kangaroo2 的能力。

第一部分:现象——从悬挂的布料与充气膜结构说起
想象一块布料自然垂落,或者一个气球被充气鼓起。这些在我们眼中稀松平常的物理现象,在计算几何中却是深奥的挑战。布料之所以呈现褶皱,是因为重力场中每个质点都在被拉向地面,而纤维间的约束又阻止它无限下落,最终在”张拉”与”压缩”的竞争中稳定下来。充气膜结构则是典型的张拉整体(Tensegrity):内部的空气压力试图将膜面推向四面八方,而膜材自身的抗拉强度则束缚住这种膨胀,形成具有预应力的曲面形态。Kangaroo2 正是为模拟这类”由力生形”的过程而设计。
当我们观察 Kangaroo2 生成的张拉膜或充气结构时,会惊叹于其形态的有机性与合理性。但若仅停留在”哇,好酷”的层面,我们就错失了理解其背后深刻原理的机会。为什么是这种形态?为什么这些点会这样分布?答案隐藏在”力平衡”与”能量最小化”的数学优化过程中。
第二部分:原理——动力松弛法与力密度法
2.1 从牛顿第二定律到动力松弛法
Kangaroo2 的核心算法是动力松弛法(Dynamic Relaxation)。其思想可追溯至 1970 年代,由 A.S. Day 等人用于结构工程中求解张拉结构的形态。其本质是:将静力问题转化为动力问题,通过引入虚拟质量与阻尼,逐步迭代至系统平衡。
对于每个质点 i,其运动方程遵循牛顿第二定律:
mi · ai = Fi
其中 mi 为质点质量,ai 为加速度,Fi 为作用于该点上的合力(包括内部张力、外部荷载、碰撞反力等)。
在动力松弛法中,我们采用显式时间积分(如中心差分法)进行迭代。每一步时间步长 Δt 内,更新速度与位置:
vin+1/2 = vin-1/2 + (Δt / mi) · Fin
xin+1 = xin + Δt · vin+1/2
为了加速收敛并保证稳定,Kangaroo2 引入了虚拟阻尼(通常为质量比例阻尼或刚度比例阻尼),使系统动能逐渐耗散,最终速度趋近于零,此时得到的位移即为平衡形态。这种方法的优势在于:无需组装大型刚度矩阵,适合大规模并行计算,且能处理强非线性问题(如碰撞接触)。
2.2 力密度法——张拉结构找形的数学基石
对于张拉结构(如索网、膜结构),其找形问题常采用力密度法(Force Density Method)。该方法由 Linkwitz 与 Schek 在 1971 年提出,其核心思想是将复杂的力平衡方程线性化。
对于每个节点 i,其平衡方程可写为:
Σj (Tij / Lij) · (Xj - Xi) = Fiext
其中 Tij 为杆件内力,Lij 为杆件长度,Xi 为节点坐标,Fiext 为外荷载。
定义力密度 qij = Tij / Lij,则方程变为线性:
Σj qij · (Xj - Xi) = Fiext
在给定力密度与外荷载后,节点坐标可通过求解线性方程组唯一确定。Kangaroo2 中的 Length 约束(用于控制杆件长度)与 Force 约束(施加恒定力)在某种程度上模拟了力密度法的效果,但更通用。
2.3 碰撞检测——从离散到连续
碰撞模拟是 Kangaroo2 的另一大功能。其底层采用基于空间哈希(Spatial Hashing)的离散碰撞检测,将空间划分为均匀网格,每个网格存储包含的几何体,仅检测同一网格或相邻网格内的对象,从而大幅减少计算量。
在碰撞响应阶段,Kangaroo2 采用惩罚力法(Penalty Method):当检测到穿透时,在接触点施加一个与穿透深度成正比的反向力,将对象推开。其数学形式为:
Fcollision = -k · d
其中 k 为刚度系数,d 为穿透深度。刚度系数越大,碰撞越硬,但过大的 k 会导致数值不稳定。Kangaroo2 提供了多种碰撞对象(如 Colide 约束用于粒子与网格碰撞,MeshCollide 用于网格与网格),并允许调整容差(Tolerance)来平衡精度与稳定性。
第三部分:推导——从约束到能量,再到形态
Kangaroo2 的每个约束(如 Length、Angle、Collide)本质上都是一个能量函数。系统总能量为所有约束能量的叠加,而求解过程就是寻找能量最小化的状态。
以 Length 约束为例,其目标是将两端点距离保持在目标值 L0。其能量函数为:
E = 1/2 · k · (|xa - xb| - L0)²
对位置求导得到力:
Fa = -k · (|xa - xb| - L0) · (xa - xb) / |xa - xb|
这类似于弹簧的胡克定律。Kangaroo2 在每次迭代中计算所有约束的力,然后更新质点位置,直至系统达到平衡(即所有约束力之和为零)。
💡 技巧:理解”能量最小化”视角后,你可以通过调整约束的权重(Stiffness)来改变各约束在最终形态中的优先级。高权重的约束相当于”硬性”要求,低权重的则为”软性”倾向。
第四部分:验证——实战案例:张拉膜结构的找形与碰撞模拟
4.1 构建初始网格
我们以一个 8×8 的网格平面开始,将其作为膜结构的初始形状。使用 Mesh 组件创建网格,并提取顶点作为粒子系统。
4.2 设置约束
- Anchor:固定四个角点,模拟膜结构的支撑点。
- Length:为网格边添加长度约束,设定目标长度为原始长度的 1.2 倍,模拟施加预应力。
- Collide:添加一个球体作为碰撞体,测试膜在受力下垂时与球体的碰撞变形。
- Gravity:施加向下的重力,模拟膜的自重。
4.3 运行模拟
设置时间步长(如 0.01),迭代次数(如 500)。Kangaroo2 使用 Solver 组件(如 KangarooSolver)进行迭代,每一步会更新粒子位置。观察膜逐渐从平面变形为具有下凹曲面的形态,且在与球体接触处产生局部凹陷。

4.4 结果分析
最终形态呈现典型的”马鞍形”或”帐篷形”,这是张拉膜结构在预应力与重力作用下的自然结果。接触点处的形态符合碰撞力学的预期,且整体曲面光滑连续,验证了动力松弛法的有效性。
| 参数 | 作用 | 推荐值范围 |
|---|---|---|
| Stiffness(刚度) | 控制约束的”硬度” | 0.1 ~ 10,视场景而定 |
| Damping(阻尼) | 耗散能量,影响收敛速度 | 0.01 ~ 0.1 |
| Time Step(时间步长) | 迭代精度,影响稳定性 | 0.001 ~ 0.1 |
| Tolerance(容差) | 碰撞检测精度 | 0.01 ~ 0.5 |
⚠️ 注意事项:过小的刚度会导致系统过度松弛,形态失真;过大的刚度则可能引发振荡,无法收敛。建议从中间值开始调试。
第五部分:总结——从工具到思维
Kangaroo2 不仅是一个模拟插件,更是一种设计思维的转变。它让我们从”绘制形态”转向”定义规则”,让形态从力与约束的相互作用中自然涌现。理解其背后的物理与数学原理,能帮助我们更精准地控制模拟,预测结果,并激发更多创造性的应用——从建筑膜结构、索网幕墙,到产品设计中的充气家具、柔性机构。
在本文中,我们剖析了动力松弛法、力密度法、碰撞检测与惩罚力法的核心概念,并通过实战验证了理论。希望这种”原理驱动”的学习方式,能让你在参数化设计的道路上走得更远、更稳。






评论(0)