弹簧质点知识在游戏中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
弹簧质点系统知识在游戏中的应用2923104013 徐阳
随着计算机图形学技术和3D建模渲染的技术不断发展,如今的游戏画面也越发的华丽和炫目,然而各个游戏公司在制作游戏时不可避免的需要付出时间去制作一些模拟现实的设置,比如游戏中的物理引擎,各种技术都被用以其中以保证游戏玩起来会更加真实,从而更加接近虚拟现实的目的。
曾经游戏中的人物的毛发等都是用固定的有一定形状的几何体来代替,但是近年来无论是从技术还是从市场需求的方面来看,毛发都成为了决定游戏人物是否逼真的判断条件之一了,因此越来越多的物理知识和数学知识都被用以其中。
最近有一款游戏,《爱丽丝2:疯狂回归》的开发人员就运用我们所熟悉的物理知识另辟蹊径,完美地解决了毛发的问题。
他们并没有去购买Physx的技术支持来制作飘逸的头发,而是使用了弹簧质点系统的相关知识来化解了这个难题,同时也因为这一技术对显卡的品牌和硬件的等级没有过多要求,这款游戏取得了很大的成功。
那么我们需要先了解一下什么是弹簧质点系统。
所谓弹簧质点系统,其实就是仿真一些有质量的粒子(质点),再在粒子之间加入一些无质量的虚拟弹簧。
例如要模拟一条绳子,最简单的方法是建立n个粒子,再在每两个连续的粒子之间加入弹簧,即有n-1个弹簧,如图2。
图2: 用5个粒子和4个弹簧
模拟的绳子
要模拟粒子运动,可使用《用JavaScript玩转游戏物理(一)运动学模拟与粒子系统》一文中谈及的欧拉方法(Euler method),但Verlet数值积分在很多情况下是更好的选择。
爱丽丝2使用了含简单阻尼效果的Verlet数值积分方程:
当中,x(t)是时间在t时粒子的位置,为时步(timestep),的阻尼系数,a(t)
为时间在时作用于粒子的加速度(即当时作用于粒子的力除以其质量,例如引力加速度[0.0-9.8]。
)Verlet方法分的计算简单,不需保留或计算速度(velocity),也欧拉稳定,但缺点是时步()必须是固定的。
Verlet积分的另一特点,是可以简单地加入各种约束(constraint),例如某粒子在仿真之后,其位置位于地面以下,只需把粒子移至最近地面的点。
对于绳子,另一约束就是相邻粒子的距离,在Verlet积分下,此距离约束可以模拟弹簧。
假设两个相邻粒子的位置为、,两者间的止动长度(rest length)为,则可以这样调节两粒子的位置:
此外,要模拟头发,必须避免头发移动至头颅及其他身体部分之内,此仍碰撞检测(collision detection)和碰撞决议(collision resolution)。
如前所述,这部分也可以用
约束来表示。
由于头颅较接近球体,在此简单测试中,只加入一个球体去进行检测。
此约束把球体内的粒子推至最近的球面上。
这之后,爱丽丝2的开发人员发现之前的做法,虽然能模拟出一条绳子,但它的行为更像一条锁链,因为它是完全柔软的,而真实的绳子在止动时通常是直线的,弯曲绳子需要施力。
一个简单的实现方式是再加入弹簧(长度约束),连接相隔一个粒子的每对粒子(图6)。
图6: 加入防止弯曲的长度约束(红色)
要把发束回复至原来的发型,方法是把目前节点位置向该节点的引导动位置(guided position,即发型中设置的位置)施以归还力(restitution force)。
经过实验测试,发觉可以把接近发根的节点设定较大的归还力,越接近发梢则归还力越弱。
爱丽丝2简单地使用一
个衰变的关系,当中为发根的归还力,为自发根起计的节点索引,是衰变的速度。
在碰撞方面,只是从一个球体扩展至多个球体,模拟更准确的头形,以及对脖子、胸、肩、手臂的碰撞。
Verlet方法使碰撞计算简单之时又真实,可表现出发丝在肩上顺滑地流动。
研发通常都不是一帆风顺的。
当在程序中加入了移动模型的操控后,发现在少量迭代的情况下,发丝像弹簧般弹来弹去,换句话说,长度约束的收敛不够快。
此问题是技术关键,当时没找到好的现成办法,苦恼多时。
爱丽丝2试过不同的方法,例如把约束的执行乱序化,或是以不同分组方法进行长度约束,但效果都不如理想。
最后开发人员灵机一触,想到既然碰撞这么简单、效果又好,可以想象每个节点都被限制在一个球体之内,球体中心为发根,半径则是发根至该节点的止动长度之和,如图 7a所示。
图7(a): 每个粒子限制在一个球体之内 (b): 不能满足长度约束的情形,但仍然保持每个节点和发根的直线距离。
此法能有效地避免头发超出半径范围,但不能控制如图7(b)的情况。
从实验得知,后者其实不太显眼,只要不做成弹簧伸缩的感觉,视觉上很难察觉出问题。
就这样,爱丽丝2的开发人员运用平日中的物理知识解决了一个技术难题,而事实证明最终的效果也是十分理想的。
有时候,需求和技术,就像是鸡和蛋的关系──因某需求而开发新技术,或因某技术而产生新的需求。
而在新技术中运用所学过的知识,虽然有些知识最初看起来根本不知道如何应用,但是如果深入了解了之后,也许一个灵感的小火花就会让一个很简单的物理知识解决一个很难的技术问题。