物理引擎,简单的说就是计算3D场景中,物体与场景之间,物体与角色之间、物体与物体之间的运动交互和动力学特性。在物理引擎的支持下,VR场景中的模型有了实体,一个物体可以具有质量、可以受到
重力、可以落在地面上、可以和别的物体发生碰撞、可以受到用户施加的推力、可以因为压力而变形、可以有液体在表面上流动……
关键特性
(1)高效的碰撞检测算法
作为物理引擎的基础,VRP的物理引擎系统具有优秀的碰撞检测效率。在进行物理模拟之前,VRP会重新组织模型面片到计算最优化的格式,并且能存储为文件,让再次模拟的时候无需重新计算。碰撞检测之前也经过数次过滤:场景过滤>碰撞组过滤>动/静物体过滤>包围合过滤>碰撞检测,最大可能的排除了碰撞检测时候的计算冗余。
VRP场景能够模拟真实的刚体运动,运动物体具有密度、质量、速度、加速度、旋转角速度、冲量等各种现实的物理动力学属性。在发生碰撞、摩擦、受力的运动模拟中,不同的动力学属性能得到不同的运动效果。
(3)任意的运动材质
VRP运动物体可以具有不同的运动材质(如橡皮、铁球、冰块),用户可以任意指定物体的弹性、静摩擦力、动摩擦力、空气摩擦阻尼等多种参数达到模拟世界万物在刚体运动中具有的不同效果。
(4)支持多种高速运算的碰撞替代体
除了对模型的面片进行预处理参与碰撞检测,VRP还提供了盒形、球形、圆柱形、胶囊型、凸多面体五种在模型形状大致相同的情况下可以使用的替代碰撞体,这些碰撞体拥有高效的碰撞计算效率,大大提高物理模拟的实时性。
(5)多种动力学交互手段
用户和物理场景的交互,VRP不仅提供了自由的、真实的动力学交互手段:用户可以对任意物体的任意位置施加推力、扭力、冲力等;也可以对物体动态设置速度、角速度、密度等参数。
(6)支持 Continuous Collision Detection连续碰撞检测 如果某个物体运行速度过快,可能会导致该物体无法和得到正确的碰撞检测,比如当一个运动速度很快的子弹穿越了一个钢板,因为运动速度过快而无法检测到碰撞的通道效应将会产生。连续碰撞检测可以将物体每两帧之间的碰撞检测连续化,保证在运动路线中出现的物体都能参与到碰撞检测。
(7)大规模运动场景进行局部调度计算
物理引擎和图形引擎在局部调度方面的不同是:当你看不见一个物体的时候,他仍然在运动,也就说仍然在计算。当物理场景过大,运动刚体数量过多的时候,这样的计算量是庞大的。VRP的物理引擎中,可以让运动稳定的物体(如静止下来的物体、匀速转动的物体、匀速运动的物体)在碰撞检测组和非碰撞检测组之间动态的调度,排除了在不会产生碰撞的物体之间进行碰撞计算的计算冗余(比如两个静止下来的物体)。同时,VRP还提供了脚本接口让用户也能参与到动态调整物体碰撞管理。
(8)提供多种物体的运动约束连接
物理场景中的任何物体可以通过连接的方式把运动关联起来。比如把一个门以铰链的方式安置在了门框上面,这样,门只能绕着铰链的轴旋转,而门受到的其他方向的力将会因为铰链传递给门框。VRP的物理系统中,提供了铰链连接、球面连接、活塞连接、点在线上的连接、点在面上的连接、粘合连接、距离连接等多种连接方式来关联两个物体的运动。
并且在VRP的物理系统中,物体的运动关联是可断的。当两个关联起来的物体,受到了比较大的拆分力,运动的关联将会自动中断,就像一个门受到很大的力后,铰链断裂后的效果:门离开门框飞了出去。
(9)可以模拟场景重力、环境阻尼等环境特性
作为虚拟现实的优势,我们可以模拟一些难以达到的或者不存在的物理环境。比如在水下、太空、月球上的运动模拟。通过对场景的重力、环境阻尼等因素进行调节能达到各种物理实验环境。
(10)逼真的流体模拟
VRP提供有流体的模拟,场景中的流体粒子不仅能够参与碰撞,还具有流体自己的动力学特性:粒子之间吸附力、粒子之间的排斥力、流体的流动摩擦力等,能达到逼真的流体效果。可直接应用到管道、排水系统、喷泉、泄洪等案例中去。
支持PPU加速,对于大规模运动模拟有了硬件支持。
(12)支持各种碰撞事件的自定义设置和实时响应 在场景中的物体发生碰撞的时候,用户可以获得通知。并且用户可以自己设置感兴趣的碰撞对象和并且能对事件绑定脚本,这样可以实现在碰撞发生时能产生声音、接触发生时播放动画的效果。
(13)真实的布料模拟
VRP具有相当方便的布料模拟系统。用户可以将任何三角形网格的模型设置为布料,模拟过程中,布料以模型顶点为基础,实时生成顶点动画,每个三角形面片都将参与碰撞检测与力反馈。布料模拟中,不仅可以设置布料的抗弯系数,抗拉系数来模拟不同材质的布料,还能给封闭的布料充满气体形成气球。布料能轻松与用户发生交互,甚至可以在受到破坏力的时候被撕裂。
(14)自由的力场模拟
能在场景中模拟刮风、水流时候的现象。物体处于力场中,可以因为角度不同,受到的力大小也不同,比如在迎风站立时受到较大的风力,侧风站立时则受到较小的风力。力场所作用的范围也可以随意定制,可以让用户在出门以后受到风力场,而进屋以后却没有风,感觉家的温暖。
(15)汽车等交通工具模拟
能随意的构造汽车结构,可以根据由任意车轮来驱动、导向行驶,具有实时的碰撞检测和碰撞力度的反馈。
(16)柔体模拟
实时计算的模型各个面的受力生成柔体的顶点动画效果,逼真程度相当惊人。柔体能固定到任何刚体内部,也能将一个刚体固定到柔体内部充当柔体骨架;柔体和布料一样,同样具有撕裂特性,可以用来模拟一些比如器官切割等效果。
(17)方向力的模拟
所生成的模型应该考虑外界力的作用,如果把这个问题考虑周到了,那就很好的。
应用归纳
1 什么是物理引擎
物理引擎和3D图形引擎是两个截然不同的引擎,但是它们两者又有着密不可分的联系,一起创造了虚拟现实的世界。在虚拟现实世界中,人们的需求已经从观看离线渲染的3D动画片的方式过渡到了使用实时渲染技术的VR交互浏览方式,这一步的迈进主要归功于3D图形引擎的发展。然而,只有图形引擎的VR模拟只是一些三角形面片的涂色显示而已,虚拟世界中的物体只具有一个外表,没有内在的实体,就像一堆幽灵彼此之间无法相互作用,用户更不能和他们产生具有逼真的动作交互。物理引擎,简单的说就是计算3D场景中,物体与场景之间,物体与角色之间、物体与物体之间的运动交互和动力学特性。在物理引擎的支持下,VR场景中的模型有了实体,一个物体可以具有质量、可以受到重力、可以落在地面上、可以和别的物体发生碰撞、可以反应用户施加的推力、可以因为压力而变形、可以有液体在表面上流动……。
2 物理引擎的应用领域
游戏领域
近年来,物理元素越来越多的融入到游戏中,《半条命2》、《虚幻竞技场3》等物理大作的出现已带给玩家巨大的感官冲击,物理引擎也被植入PS2、XBOX等
电视游戏机中用来增加游戏的真实感。物理引擎在游戏中起到的作用是不能忽视的:角色是否能穿越墙面,子弹是否击中目标、风吹动草丛等画面都是需要进行大量物理计算。在
游戏世界中,电脑要即时的演算物体碰撞、下落、反转等物理逻辑的画面,这些功能都是物理引擎来完成。在没有物理引擎的时候,无论楼房受到怎样的攻击都只会按照设计好的动画方案崩溃,画面也比较简陋;现在,大楼会根据攻击的方向、力度,倒向不同方向,同时落下数以千记的尘埃和碎片,产生更为真实和震撼的画面。游戏所有对象都是“可破坏的”,对象的毁坏都真实地依据“弹体”、“材料”和“物理”三方面来考量。每个作战单位不但有更逼真的动作交互,甚至连游戏中的所有建筑物场景也是可以破坏的,所以玩家别以为只是把作战单位躲避到建筑物后方就不会受到伤害,因为建筑物一直受到攻击也是会损坏的。士兵和载具因不同部位受创引起损伤而影响相关的行动、建筑因爆炸而出现部件结构式的连环塌陷、地面和墙体因枪林弹雨和轰炸形成的弹道坑洼等物理效果都表现地淋漓尽致。至今已有300多款游戏引用了专业的物理引擎。
虚拟教学
物理引擎可以让虚拟现实在教学方面的应用得到更深入的发展。在没有物理引擎的虚拟教学环境中,虚拟实验环境只能起到认识学习的目的,也就是说用户可以从各个角度观察实验,按照预定的动画播放试验得到结果,而不能更加真实的交互参与实验。在具有物理引擎的虚拟实验环境中,用户可以直接置身于实验环境中,通过现场实时交互得到试验成果,不仅能达到认识教学的目的,还能培养使用者的实际操作经验。对于一些价格昂贵、结果严重或者甚至根本无法实现的教学环境的虚拟教学实验完全可以达到替代作用。
在中学物理教学实验中,同学们不仅可以在虚拟实验室中自己组装单摆、选择自由落体物质的材料、对斜面设置不同摩擦系数的材质,还可以将试验环境搬到月球、深海或者设置世界为零摩擦状态,可以帮助同学进一步的认识物理运动本质。
医学方面,虚拟现实技术可以进行新一代医学仪器的使用教学,比如在模拟微创手术的时候,学员操作的是同样的设备,然而目标却不是活生生的、致命的人体,是取而代之的虚拟器官。为了反映所操作的虚拟仪器对人体器官所产生的影响,物理引擎将会根据操作者的动作,器械与器官碰撞的力度、人体各种器官的脆弱程度来实时的计算试验结果,统计每次试验对病人将会造成的危害,不仅让学员熟悉对仪器的操作,还能根据实验经验避免仪器对敏感器官的碰触。
驾校学习中,虚拟现实的应用已经比较广泛,而具有物理引擎的虚拟驾驶系统能让学员进一步的体验驾驶的真实感。带有物理引擎的虚拟驾驶系统中,当汽车驶过地上的一个坑道、在高地不平的地面行驶、撞车时候的受力方位和车体的变形、撞到行人、汽车、树桩、广告牌的感受和表现也迥然不同,转弯时候汽车的打滑现象、造成的轮胎磨损程度等都能一一反映。不仅如此,物理引擎还可以收集每次虚拟驾驶过程中的某些关键力学数据作为对一个学员的考核参考。
互动展示
如今的三维技术正逐步走入网页,厂商可以将他们的物件制作为三维模型让用户全自由度的观察。但是,简单的三维显示技术在实现一些动态物体的展示方面显得力不从心,用户能得到的动态交互都是一些预先设置好的动画效果,不能参与到与展示环境的动态交互,让虚拟作品的真实性大打折扣。比如一个装饰品网站正在网上虚拟展示他们的风铃,除了有优秀的图形引擎来表达其漂亮的外观外,还需要具有一个物理引擎来让用户可以交互的拨弄风铃,让用户体会到风铃舞动起来时的优美,以及碰撞产生时候叮叮当当的悦耳声。又比如在进行水龙头、淋浴喷头的3D物品展示时,不仅可以让用户交互的调节喷发的水流大小,还可以让虚拟角色的伸手过去“感受”水流的碰撞,增加更真实的互动。
房地产展示时候,通过物理引擎,可以设置一些互动的体育设施、一些可以拉动的弹簧门以及窗帘、一些可以参与嬉戏的喷泉、能使用起来的虚拟台球桌、能踩踏变形的草地……,所有这些均能让用户感受到一个动态的充满生机的小区,而不是一个个的静止模型或动态贴图。
军事模拟
军事训练中的实战训练不可替代,但是虚拟场景演习也相当重要,在降低演习成本、布置实战战术方面都有着相当重要的作用,在美国早已经将虚拟军事训练作为士兵培训的必修训练。物理引擎在军事模拟中的作用显得更加重要,比如在一个战场地形中,虚拟的炸弹在某个地方产生爆炸后,物理引擎能计算出各个虚拟陆战队员的位置被该爆炸波及的程度,结构脆弱的掩体将会因为该爆炸而塌陷,从而通过虚拟演示能更好的规划战壕、掩体或者进攻线路的抉择。通过物理引擎的模拟,虚拟演示可以精确到每一颗具有不同穿透力的子弹打在目标后的反映,手雷因受重力和空气阻尼在空中飞行轨迹以及落地后的影响范围,不同威力的炸弹能导致了不同的破坏结果等。 消防和灾难救助演习中,物理引擎起着关键性的作用。比如在消防虚拟训练中,物理引擎不仅能真实的实时模拟烟雾和火势的走向,在救助行动中,一些脆弱的结构,也会因为被焚烧或者踩踏而倒塌,增加救助行动的真实度。消防员更能主动撞开一些通道,或者挪动一些石块清理救助路线,当然这些行动如果动摇了所支撑的上层结构时,虚拟场景同样也会毫不留情的塌陷下来。
工程试验
工程试验中,复杂结构的受力分析是相当复杂的。当不同的杆件通过各种连接约束构造出一个结构后,物理引擎能够轻松的模拟出该结构体的力学传递。当结构受到某个方向的破坏力,虚拟结构能从最脆弱的部位开始崩溃。从而可以辅助工程人员决策工程重点、预防结构坍塌,在杆件搭建,桥梁施工等工程中都起着重要作用。
管道流体模拟
管道设施在建筑和城市规划中都占有相当重要的份量。物理引擎在这方面可以实时的计算液体或者气体是如何在这些管道内流淌,比如观察建筑在某层积水后,水流会如何通过管道排放,发生火灾后产生的浓烟又是如何走向,工厂的排污水流又如何被净化,大坝泄洪后,水流将沿着河床如何流淌。
动画制作
物理引擎在动画制作中的应用已经相当成熟,3DMAX和MAYA都已集成了成熟的物理模块。虽然动画制作软件的离线物理计算到虚拟现实中的实时物理计算,动画制作软件和虚拟现实软件中的物理引擎用到的计算的方法和技术有着显著的不同,但都有着共同的目的: (1)把动画师从
关键帧动画解放出来,动画师不再需要一帧一帧调节动画,不需要定制每个物体在空中的飞行时间和路径,方便的骨骼IK系统,对动画师来说,物理引擎为他们节省了大量的时间; (2)让动画更具有真实感,物理引擎让动画中的每个细节都能参与计算,带碰撞的粒子效果、具有扩散性的烟雾、具有吸附力的水面、爆炸碎块的碰撞以及产生的结果、刮风时引起的细节效果……。