欢迎加入Bullet物理讨论QQ群:533030320 ,群内由计算机图形学、流体模拟动力学学术群中坐镇的大神管理组成。
前言
最近2个月笔者没有更博客,一直在逆向研究Bullet引擎,发现其所用的技术还真广,此文作为物理引擎的技术基础,笔者在这里翻译了一遍,给英语不是很好的同学或者懒得看英语论文的同学提供个方便。 此文是Brain Vincent Mirtich于1996年申请加利福尼亚伯克利大学博士学位时的申博论文,但是其研究成果已经广泛用于物理引擎之中,牛逼哄哄,其导师是发明最近点实时碰撞算法的John F. Canny。现在Mirtich在三菱重工里担任机器人研究所的Engineer。有兴趣的同学可自追溯其历史,笔者不再累述。 下面进入正题。
简述
动力学模拟是当今计算机领域的热门领域(1996年…就热门了),其广泛用于工程学,动画,和虚拟现实领域当中。此论文介绍了一个基于冲量的动力学模拟标准。这个标准的设计可以满足物理精确性和计算高效性两个方面的需求。同时基于冲量的模拟可适用于中等复杂的实时系统。为了达到这个性能,需要在系统上做一些特定限制。最大的限制就是系统内能也只能包含刚体(软体是不能的)。
刚体动力学模拟当中最难的部分是建立刚体之间的交互模型。最常用的方法是惩罚方法,然后是分析方法。这两种方法都是基于约束条件的,这意味着在刚体交互点的约束是需要被实时连续地计算并根据结果决定刚体的加速度(比如小球掉出屏幕,限制条件是Y轴的底,小球由于重力下落,但是不能掉出屏幕,所以必须实时连续的计算它的位置和半径,确定其是否掉出屏幕,如果与屏幕相碰撞,则计算它的加速度,然后确定其弹起的高度)。而基于冲量的方法不同于前两种方法,是不需要实时维护限制条件的,(在Y轴底部创建一个长方形盒子作为地板,小球就不会掉下去了,而且不需要实时的去计算地板与小球之间的距离等约束条件,只要在检测碰撞时碰到了,才进行计算)这种方法简单,健壮,可并行处理,并且能模拟基于限制条件的方法所不能模拟的系统(比如刚体不是小球,而是一个5边形,底部则是一堆三角形组成的地板等,这些限制条件就无法用简单的数学来表达了)。并且基于冲量的模拟精度已经被测试满足大部分的应用要求。
基于冲量模拟中的碰撞检测是关键技术,有效的算法必须应对大量的刚体碰撞,并且需要保证不丢失任何一个碰撞。进一步,模拟器的物理精确度也依赖于碰撞响应算法。这篇论文将会描述这些关键算法和它们的底层理论。
内容
- 1 简介
- 1.1 基于约束的接触模型
1.1.1 无穿透接触力 - 1.2 基于冲量的方法
- 1.3 冲量和约束方法的比较
- 1.4 论文概览
- 1.1 基于约束的接触模型
- 2 碰撞检测
- 2.1 简介和相关工作
2.1.1 冲量方法中的碰撞检测 - 2.2 Lin-Canny算法
2.2.1 碰撞检测和相干性
2.2.2 Lin-Canny算法的扩展 - 2.3 优先碰撞检查
2.3.1 碰撞堆
2.3.2 估计撞击时间
2.3.3 物体在弹道上的角速度最大限制 - 2.4 包围盒技术
2.4.1 寻找静态盒子的相交
2.4.2 相干性和瓦片分割方案
2.4.3 维护碰撞堆
2.4.4 空间哈希和坐标排序的比较
- 2.1 简介和相关工作
- 3 碰撞响应
- 3.1 假设碰撞响应模型
- 3.2 计算碰撞冲量
3.2.1 碰撞中的等式方程
3.2.2 滑动模式
3