一个程序应该接受输入,对其进行处理并给出输出。那么,物理引擎究竟将什么作为输入并作为输出提供呢?
一个程序应该接受输入,对其进行处理并给出输出。那么,物理引擎究竟将什么作为输入并作为输出提供呢?
Answers:
输入速度,质量和时间,输出为新速度。有时旋转/角动量也是输入和输出。
本质上,物理引擎试图模拟重力和碰撞的影响。对于更好的物理引擎而言,这意味着它们既包括对象的永久变形也包括临时变形,包括将对象分解为多个对象以及对象的角动量。理想情况下,他们还可以模拟压力,例如,多少辆卡车可以越过这座桥直到倒塌,但这很少见。诸如空气阻力之类的其他模拟变量也可以算作物理引擎,但据我所知,这些还没有进入任何游戏。
大多数物理引擎在某种程度上都是专门化的,并将模拟物理到游戏必需的程度。汽车游戏的物理引擎通常与3D射击游戏的物理引擎完全不同。高尔夫游戏的物理引擎可能对高尔夫球和各个草叶之间的相互作用进行了过多的计算,而完全忽略了高速碰撞和汽车变形的处理(以防被高尔夫球击中) 。
通常,物理引擎用于使游戏中的对象相对于其环境以逼真的方式表现,而不必为每种可能的场景设计特定的动画。
具体来说,物理引擎将采用具有一组属性(质量,关节等)的模型,并根据一组参数在游戏中进行渲染。
早期的例子是raggdoll引擎(例如,在虚幻引擎中),该引擎模拟了li脚身体掉下台阶的方式等。
在当前技术中,物理引擎通常会与AI,游戏内UI,过场动画等紧密集成在整个游戏设计包中。
您当然可以争辩说物理引擎可以追溯到游戏设计的曙光,例如pong可以被认为是粗糙的物理引擎。但是,主要要点是物理引擎能够基于一组参数动态生成动画点,而不仅仅是使用来自运动捕捉或手动动画的预定动画序列。
如其他答案中所述,在某些类或游戏(如驾驶或飞行模拟)中,物理引擎可能是游戏的基础,因此将成为驱动屏幕动画的主要输入。尽管该术语通常用于通用工具,但它可以应用于各种情况,而无需开发人员非常具体地了解或分析所讨论的上下文,而不是从地面构建的非常具体的模拟器为特定的应用程序。
物理引擎负责模拟“世界”中物体的运动(无论在引擎环境中意味着什么)。如今,大多数物理引擎都使用牛顿力学来完成此任务,因为它们相对容易模拟,并且对于大多数用途而言“足够精确”,除非您要进行空间模拟。
从理论上讲,“纯”物理引擎将接受三个输入:
考虑到惯性和作用力,发动机使物体移动。物理引擎的输出只是“世界”的新状态,然后游戏可以读取并根据需要进行修改。
在实践中,物理引擎不一定如此“纯净”。需要创建和销毁对象,有时还需要按照物理引擎的法律不允许的方式来移动它们。有时可以在引擎外部完成此操作,但有时可以在引擎内部完成,为此,引擎需要更多的输入。但是上面提到的三个输入涵盖了基础知识。
例如,假设您需要使用操纵杆在游戏中移动角色。如果您不使用物理引擎,那将非常简单:当您看到用户正在移动操纵杆时,就可以相应地移动对象。使用物理引擎时,您不会直接移动对象:您要向对象施加力(对应于希望对象移动的方向),然后让引擎处理实际移动它的方向。
有什么不同?即使世界上没有别的东西,物体也不可能以完全相同的方式移动,因为物理引擎将处理诸如现实加速之类的事情。但是也有可能其他力可能同时作用在物体上,惯性也可能会发生作用,发动机会考虑所有这些力。例如,如果在对象上施加了向北的力,但又有其他东西在向西施加力(或对象已经向西移动,并且没有任何减慢的速度),则引擎会将对象向西北移动。
这就是物理引擎为您提供的:它跟踪对象,它们的位置和速度以及作用在它们上的力。得益于力学定律,它甚至可以自行产生一些力来自动处理碰撞,摩擦和重力之类的事情,而游戏开发人员无需您做任何额外的工作。
物理引擎基本上是物理物体的模拟器。
它允许您创建一个(或多个)物体来指定其物理性质,例如质量,大小,密度等。
它还允许您定义模拟发生的物理世界的属性(例如重力)。
最后,它允许您在实体之间施加力或创建关节。
一旦定义了所有这些内容,就可以开始模拟,然后物理引擎会告诉您在下一个时间步长(通常对应于游戏中的下一帧)每个身体的放置位置。还有下一个,依此类推...
您会看到Sprites在屏幕上移动,因为游戏引擎的每一帧都会询问物理引擎
这个尸体现在在哪里?
游戏引擎会相应地更新图形表示。
我通常喜欢将物理引擎看作是一种以声明性方式应用物理定律的工具。
实际上,不是编写代码来描述应该执行哪些计算以确定下一时间步中的物体在哪里,我只是描述设置物体(以及物理世界本身)属性的物理世界,然后让物理引擎回答这个问题对我来说。