【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 5165|回复: 1

[3D物理引擎] PhysX物理引擎入门教程[1]

[复制链接]
发表于 2010-10-12 16:37:10 | 显示全部楼层 |阅读模式
物理运算引擎的作用,简而言之,就是令虚拟世界中的物体运动符合真实世界的物理定律,以使游戏更加富有真实感。


  物理模拟计算需要非常强大的整数和浮点计算能力。更为重要的是,物理处理具有高度的并行性,需要多线程计算,演算非常复杂,需要消耗很多资源。

  PhysX可以由CPU计算,但其程序本身在设计上还可以调用独立的浮点处理器(例如GPU和PPU)来计算,也正因为如此,它可以轻松完成像流体力学模拟那样的大计算量的物理模拟计算。

  PhysX物理引擎可以在包括Windows,Linux,Xbox360,Playstation3,Mac等在内的全平台上运行。

  AGEIA公司后来被Nvidia收购,PhysX引擎也就跟随划入Nvidia旗下。

  2010年5月,AGEIA公司创始人、Nvidia主管PhysX技术副总裁Manju Hegde跳槽至AMD公司。外界猜测其跳槽原因是AGEIA被Nvidia收购后,PhysX并没有得到良好的发展。   

       NVIDIA®(英伟达™)PhysX®技术能够为游戏加入史无前例的逼真度。凭借PC中的NVIDIA®(英伟达™)GeForce®(精视™)GPU(图形处理器),用户可以体验到动感十足的PhysX®特效,其中包括剧烈的爆炸、可在外力下做出反应的碎片、逼真的水效果以及栩栩如生的人物。

AGEIA时代的PhysX
    
  
PhysX物理运算引擎由五名年轻的技术人员开发,他们成立了AGEIA公司。PhysX最初称为NovodeX,后改名为PhysX。
  AGEIA曾为《虚幻竞技场3》开发几张加入PhysX引擎的MOD地图,物理效果非常出色。同时AGEIA也自己开发一个免费的名为《好战者》的物理游戏。此后的一些PhysX游戏,也大都基于虚幻3引擎。例如《镜之边缘》、《蝙蝠侠:阿卡姆疯人院》、《一舞成名》等。可以说虚幻3引擎与PhysX物理引擎已经成了一对黄金搭档。
    
虚幻竞技场3 PhysX地图包
AGEIA提供一流的PhysX软件开发包AGEIA PhysX SDK,它不仅可以应用于次世代PC游戏开发,还可应用在Console游戏开发中。AGEIA声称,PhysX 将会使设计师在开发游戏的过程中使用复杂的物理效果而不需要像以往那样耗费漫长的时间开发一套新的物理引擎,而且使用了物理引擎还会大量消耗CPU资源使一些配置较低的电脑无法流畅运行。AGEIA 更宣称 PhysX 执行物理运算的效率比CPU 与物理处理软件的组合高出 100 倍。游戏设计语言 Dark Basic Pro 将会支持 PhysX,并允许其用户利用 PhysX 执行物理运算。
编辑本段
PhysX物理加速卡(PPU)

    
BFG生产的PhysX物理加速卡
由于PhysX物理引擎在设计上就并不适合用CPU去计算,因此AGEIA公司还为PhysX引擎设计了专门的运算硬件,PhysX物理加速卡。PhysX物理加速卡的核心被称为PPU,即物理处理器(Physics processing Unit)。
  PhysX物理加速卡在运行游戏时不参与任何3D渲染,只计算PhysX引擎。按照AGEIA当初的设想,未来的个人电脑将由CPU、GPU、PPU三大核心构成。其中CPU居中调度,GPU负责图形渲染,PPU则做物理计算。  
AGEIA当初设想的未来PC组成
2006年,AGEIA公司发布了第一张PhysX物理加速卡,称为PhysX 100 Series。公版设计为搭载128MB GDDR3显存,采用PCI接口。生产PhysX 100 Series的包括华硕和BFG,其中华硕的PhysX物理加速卡搭载了256MB GDDR3显存。
  后来,AGEIA公司又开发了第二代PhysX物理加速卡,称为PhysX 200 Series,与第一代产品最大的不同在于采用了PCI-E插槽,增强了数据交换能力。
  AGEIA公司被Nvidia收购后,PhysX物理加速卡停止了开发。但有评测表明,PhysX 100 Series的PhysX物理计算能力,超过了Geforce 9600GT,至少与Geforce 9800GT相当。[1]可见PhysX物理加速卡在设计思路上是非常成功的。
  基于PhysX SDK 2.8.1及其以下版本开发的游戏都支持AGEIA PhysX物理加速卡。需要说明的是,部分基于PhysX SDK 2.8.1开发的游戏是被人为屏蔽物理加速卡而造成物理加速卡无法工作的,例如《一舞成名》和《蝙蝠侠:阿卡姆疯人院》,这种情况是可以通过修改驱动破解的。但是基于PhysX SDK 2.8.3及其以上版本、基于PhysX APEX开发的游戏就无法支持AGEIA PhysX物理加速卡了。
编辑本段


nVIDIA时代的PhysX

《BATMAN: ARKHAM ASYLUM》
在备受期待的游戏中查看最新PhysX特效!

湍流演示
使用超過50萬個互動微粒,營造出如真似幻的效果。

服装演示
布料可以被撕碎、并且能够与环境和人物互动。


1.nVIDIA PhysX物理加速技术
  2008年,在Intel收购了物理引擎界的领军者Havok后,Nvidia也收购了排名第二的AGEIA。正式将PhysX技术划入旗下。  
PhysX by Nvidia
nVIDIA PhysX承袭自AGEIA PhysX,但Nvidia在此基础上推出了nVIDIA PhysX物理加速,并将PhysX物理加速功能移植到nVIDIA GPU中,用户不必额外购买PhysX物理加速卡就能享受到PhysX物理加速功能。借助CUDA架构,nVIDIA重新编写了PhysX物理加速程序,将PhysX物理加速引擎从AGEIA PPU移植到了nVIDIA GPU上。
  通过重新编写程序,nVIDIA GPU中的线程调度器将承担原来PPU中“控制引擎”的工作,即负责具体任务的指派工作;流处理器将承担原来PPU中“矢量处理引擎”的工作,即负责物理计算;在物理计算完成后,由DME来负责输出;而后,GPU再通过硬件抽象层实现布料模拟、毛发模拟、碰撞侦测、流体力学等物理技术。简而言之,就是利用CUDA,将PhysX引擎中的计算指令,翻译给GPU,让GPU去计算。这样做是因为GPU具有优秀的浮点计算能力和并行处理能力。[2]
  通过这种方法,Nvidia Geforce 8系列,9系列,GT200系列,GT300系列,GT400系列桌面显卡;Geforce 8M系列,9M系列,GT100M系列,GT200M系列,GT300M系列,GT400M系列移动版显卡,只要流处理器大于32个且显存大于256MB,都可以支持PhysX物理引擎的计算,也就是支持PhysX物理加速。
  所谓PhysX物理加速,是指相对于CPU来讲,GPU加快了PhysX物理引擎的计算速度。并不是说PhysX引擎只能由nVIDIA GPU处理。
  Nvidia曾承诺PhysX加速技术是公开的,且支持第三方厂商让PhysX运行在竞争对手ATI的显卡上,然而当2010年ATI HD5000系列产品全线对Nvidia形成优势时,Nvidia又表示PhysX加速技术只能运行在自家的显卡上。可以说PhysX物理加速已经成为了Nvidia在显卡产品线上被竞争对手力压后,唯一可以用来反击的技术手段。

  在设计上,Nvidia显卡是同时进行3D计算和物理计算,且显卡不断的在3D计算和物理计算模式间切换。目前的显卡已经被高分辨率、高全屏抗锯齿等压的喘不过气来,根本没有剩余精力再去计算PhysX指令。因此主流的单显卡运行PhysX游戏,虽然效果上更加逼真,但根本达不到流畅标准,得不偿失。除非是双卡SLI,或顶级显卡(如GTX295、GTX480等),才有足够精力去做物理计算。
  Physx的未来完全掌握于NVIDIA之手。目前Physx仅仅是作为NVIDIA宣传自家显卡的卖点。应用程序常见于虚幻3引擎,由于NVIDIA公司推行的“游戏之路”计划,NVIDIA会极力撮合使用虚幻3引擎的游戏开发商支持Physx ,同时扩展其它游戏引擎。
  能够使用显卡加速的Physx的优点也是最大的缺点。因为必选要有一块支持CUDA的NVIDIA显卡。面对ATI显卡的竞争,消费者对NVIDIA劣化Physx CPU处理能力,突出自家显卡的做法颇有微词。
  另外Physx的竞争对手Havok再被Intel收购后也得到大力发展,应用的游戏数量远远超过Physx。Havok引擎具有嵌入性和高效性的特点,随着CPU多线程技术的发展,其仅依靠CPU就能带来良好的物理效果。此外intel宣称Havok可以免费使用后,NVIDIA也宣称Physx在一定范围内免费开放。
  Physx是仅仅作为NVIDIA显卡的卖点来应付来自ATI的竞争,还是打算长久的开发下去我们拭目以待。
2.nVIDIA劣化CPU执行PhysX效率

  前文曾经反复提到:PhysX并不是只能运行在nVIDIA GPU上,而是也可以由CPU执行处理的。理论上,随着CPU多核多线程技术的发展,一些简单的物理模拟计算,CPU处理起来也并没有问题。但是在实际中运行采用了PhysX GPU加速技术的游戏时,如果用户的显卡不支持PhysX 物理加速技术(例如AMD-ATI显卡用户或Intel集成显卡用户),即使物理模拟效果并不复杂,游戏的流畅度也会大打折扣。
  其原因在于:在这些游戏中,如果使用CPU处理PhysX时,PhysX引擎只会调用CPU单线程计算,而物理特效本身是可以很方便地使用类似多线程的技术来处理的,实际上在打开GPU硬加速时情况便是如此,因此游戏厂商此举很有故意放着处理器的多核条件不用的作弊之嫌。
  更糟糕的是,RealWorld Technologies网站的作者David Kanter最近的研究让这些游戏厂商的作弊嫌疑又加重了几分。他使用Intel的VTune进程查看工具分析了多款支持PhysX特效的游戏,结果发现当这些游戏使用CPU处理物理特效时,大部分的代码使用的仍然是老旧的x87浮点算数指令,而不是早已深入人心,并且效率高得多的SSE扩展指令,他在自己的文章中写道:
  x87已经在故纸堆里埋了好些年了,Intel和AMD这5年来都一直在劝说开发者使用更快的SSE扩展指令集来编写程序。在目前市面上的处理器里,SSE指令的完成同样任务的速度很轻松就能达到x87指令的1.5-2倍。而这些PhysX引擎还在使用x87指令,这显然对CPU非常不利也不够公平,让我们对GPU在处理PhysX引擎时是否真如官方宣传的那么高效率也打上了一个问号。

   Kanter还进一步分析称,这些游戏厂商在应用CPU的SSE指令方面几乎不存在任何技术上的困难,虽然x87指令的精度和兼容性会稍微好些,但是在游戏中根本不需要考虑这些问题,从开发难度上讲,使用SSE甚至还有可能会减轻开发者的负担,他表示:“单就CPU运行PhysX引擎方面讲,要使用SSE指令集一点也不费事(坦率说还有可能比用x87指令开发更省事些)。
  也就是说,即使在PhysX引擎只支持CPU单线程处理的条件下,其实其执行性能本该也还有很大的提升空间。
  把缺乏多线程支持与还在使用x87指令的情况综合起来考虑,我们认为Nvidia公司的PhysX引擎用最好听的话来讲就是优化得太差,讲的难听点就是有意为之。当然PhysX引擎的主动权握在Nvidia手上,他们可以爱怎么玩就怎么玩。但是这种过火的行为也可能会带来一些恶果,Kanter在文中这样总结道:
  ....Nvidia可以爱怎么玩就怎么玩,不过这种行为对开发者和消费者而言毫无益处,而且也会让人们对他们口中成天挂着的什么GPU比CPU性能更好的鬼话产生很大的怀疑。
  PhysX Logo曾经是那些支持Nvidia显卡游戏的一大卖点,不过现在看来这个Logo似乎又有了新的一层含义,那就是让  
四核CPU轻松击败GTX275

所有非Nvidia的其它硬件设备跑得更慢。[3] 
  《地铁2033》这款游戏在开发时,便针对多线程CPU进行了优化,评测表明使用GPU运算PhysX和使用CPU运算PhysX时,帧数差距在个位数。在针对多线程CPU进行优化的PhysX测试软件FluidMark 1.2中,Intel Core 2 Q9400的成绩轻松击败了nVIDIA Geforce GTX275 。[4]这也说明了nVIDIA确实有劣化CPU执行效率的嫌疑。
3.nVIDIA PhysX APEX
  2010年8月24日,随着《黑手党2》的发布,一个全新的名词映入广大玩家的眼帘,那就是nVIDIA PhysX APEX。
  2009年3月26日,在美国加利福尼亚州旧金山市召开的游戏开发者大会上(GDC2009),nVIDIA正式发布了nVIDIA PhysX APEX。APEX是PhysX 技术开发软件开发包(SDK)中的一个全新功能,它能够为艺术家、游戏关卡设计师以及游戏开发人员提供一套易于使用的工具。得益于此类工具,基于多种平台的下一代游戏中可扩展的物理效果都将得以更为流畅得实施。
  nVIDIA APEX被设计为一个模块化的框架,能够与现有的PhysX软件开发包一起使用,使开发人员能够轻松地在其游戏中添加细腻的物理效果。而且通过简单易用的“单次制作”跨平台内容创作特性,APEX还能够帮助开发人员优化多种平台上的游戏体验。 这些特性让APEX不仅能够帮助开发人员加快设计新游戏的速度,更能帮助开发人员降低这一过程中的总体开发成本。 已获认证的PhysX开发人员可免费获得APEX工具包,该工具包现已集成到一些全球最流行的开发库以及游戏引擎中,其中包括Emergent游戏技术公司的Gamebryo LightSpeed引擎。
  APEX可实现诸多特效,比如物体销毁、仿真物体断裂、树木植被碎裂等,另外APEX一家入住MAYA、3D MAX等3D设计软件之中,可以帮助设计者更加直观的展示物理特征,而不再需要第三方的插件。[5]
  第一个使用nVIDIA PhysX APEX模块的游戏是《黑暗之日》。AGEIA物理加速卡(PPU)不支持APEX模块。

 楼主| 发表于 2010-10-12 17:02:56 | 显示全部楼层
未命名.jpg

我用的SDK是PhysX_2.8.1_SDK_Core版本,选择PhysX的主要是因为这个物理引擎例题比较多,上手比较容易。PhysX的安装是非常简单的,一路next就可以了;安装完成以后先运行一下\NVIDIA Corporation\PhysX SDK 2.8.1\Samples\Executables里面的示例,如果运行正常,证明你计算机的环境符合要求,如果无法正常运行,这证明你的计算机不符合运行条件,那么就要检查你的运行环境了。


一般而言 是以下几个原因:
1. 如果显卡驱动不够新,则需要安装新的显卡驱动
2. 然后要安装最新发布的SystemSoftware,我装的是PhysX_9.09.0814_SystemSoftware
3. 然后再安装SDK,我的版本是PhysX_SDK_2.8.1.msi

如果\Executables里面的示例可以正常运行了,那么证明你的机器环境是可以运行PhysX的,那么开始配置程序编译环境。

添加方式类似于我们添加Dx的运行环境路径,在包换文件中添加
未命名.jpg
在库文件中添加
NVIDIA PhysX SDK\v2.8.1\SDKs\lib\win32

如果需要增加显示(PhysX本身和显示无关的),PhysX库中自带了OpenGL的图形库,那么就可以用了
在包含文件中增加如下路径:
NVIDIA PhysX SDK\v2.8.1\Graphics\include\win32
在库文件中添加
NVIDIA PhysX SDK\v2.8.1\Graphics\lib\win32\glut
选择一个PhysX例题编译,如果正常通过,那么证明你的PhysX编译环境就好了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-5-14 19:23

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表