NVIDIA发布的CUDA 2.0开发包中蕴含了PhysX物理加速技术,NVIDIA的意向是使用GPU通过CUDA架构来实现物理加速.....
前言
对于一切追求游戏上享受的玩家们来说,真实便是他们最终追求的东西。不知道各位喜爱玩显卡和3D游戏的玩家记不记得,早在3DMark 03测试软件中有着一个测试场景,在一个树木茂密的大自然中,阳光普照,有着河流和各种植物,十分漂亮。相信用3DMark 03测过显卡性能的玩家一定都会记得吧。这一幅场景中,画面由河流中转入到岸上场景以后,相信大家就会发现帧数下降得非常利害,性能较好的显卡大概可保持在每秒20~30帧左右,而当时普通的低端入门级显卡就有些惨不忍睹了。这幅场景中拥有大量的多边型计算和多边型贴图和一个高亮度光源进行光照,这些计算本来就相当十分耗费系统资源,但是这其中还有一个非常重要的因素就是加入了风的运动。当树叶和植物受到风的影响而左右摆动起来,这其中要涉及到大量的物理计算,包括树叶摆动的幅度,风力的大小,风的方向和阻力等等。
随后Physics Processing Unit(物理运算处理器)的引入才让这一切彻底改变,物理加速无论是早前的Havok FX物理引擎到现在的GeForce PhysX硬件物理加速,它们都一直推动着物理加速的发展。现在支持Havok与PhysX物理引擎已被200多款游戏所采纳,其中不乏大家熟悉的名作,能够提供超乎寻常真实而又复杂的物理效果,除了PC上的Havok和PhysX物理加速外,PS3、Xbox 360和Wii上也有应用其物理引擎进行游戏开发,物理加速进行着新的视觉革命。
NVIDIA发布的CUDA 2.0开发包中蕴含了PhysX物理加速技术,NVIDIA的意向是使用GPU通过CUDA架构来实现物理加速;而作为同时拥有CPU与GPU业务的AMD自然会选择CPU+GPU为主导的Havok物理引擎。2007年9月Intel闪电收购Havok之后,NVIDIA与AMD-ATI的GPU物理加速计算就显得非常尴尬,因为Intel收购Havok的目的就是使Havok引擎专注于CPU物理运算,对于AMD和NVIDIA来说,与其为了得到Havok FX授权而看Intel脸色,还不如自己也拥有一个物理引擎,出于这样的考虑,NVIDIA先下手为强,在2008年2月,宣布收购AGEIA,这样全线支持CUDA的GeForce GPU引入了AGEIA PhysX,使其独占鳌头,虽然NVIDIA也愿意开放PhysX给AMD,但NVIDIA、AMD、Intel的关系比较复杂,AMD选择了Intel的Havok。
物理加速发展历史——Havok
提到物理加速,就不得不提著名的Havok。Havok成立于1998年,主要为游戏开发商提供物理仿真技术,从而使游戏能够以更加真实的状态展现。在AGEIA推出物理处理器PPU(Physics Processing Unit)之前,Havok一直是物理仿真领域的佼佼者。很多著名的游戏游戏都使用了Havok FX物理引擎,如《半条命2》、《帝国时代3》、《英雄连》、《失落的星球》和《生化奇兵》等,未来的《暗黑破坏神3》、《星际争霸2》也将使用此引擎。
正因Havok物理引擎非常游戏厂商的欢迎,早在2006年,NVIDIA和ATI都称自己的产品支持将物理加速,而NVIDIA和Havok联合宣布结成技术伙伴关系。NVIDIA将采用Havok的Havok FX API,允许NVIDIA GPU完成物理加速工作,还有了SLI Physic的名字。这一方案是利用NVIDIA的SLI技术构建两块显卡的平台,其中一块显卡可以用于物理运算,实际上,Havok FX也支持单NVIDIA GPU,不过NVIDIA强调说SLI是最佳设置,因为这可以让第二个GPU专门从事物理计算。而这一方案提出后ATI方面还颇为焦虑的提出会通过GP-GPU通用计算通道来实现这一功能。
从上图中可以看出,Havok FX API通过DirectX将数据发给GPU驱动,如果游戏或者驱动不支持SLI物理,那么将不会发送物理数据,反之则交给GPU 2进行物理计算,计算结果则返回给Havok API。
当时,NVIDIA与ATI的物理加速都围绕着Havok,对“新秀”AGEIA的物理处理器并不看好。正当NVIDIA和ATI正在优化自己的产品对Havok物理加速进行支持时,一个消息彻底打乱了他们的阵脚,那就是Intel宣布收购了Havok。
Intel收购Havok难免会使NVIDIA十分恼火,在2006年NVIDIA与Havok仍保持着与很好的合作关系,在NVIDIA G80 GPU发布时还谈到了在GPU中Quantum Effects,当时的GPU物理加速技术很可能也是为Havok量身定做。在2007年,Havok被收购让NVIDIA精心设计的SLI Physic泡汤,同时Quantum Effects物理引擎也没有成为GeForce8系列主流产品的卖点。
物理加速发展历史——PhysX
早在2005年当AGEIA在GDC2005上提出了PPU的概念,同时也是第一块物理加速卡展现在世人的面前。PhysX外型类似目前的显卡,采用PCI-E/PCI接口,可兼容绝大部的主流平台。它采用TSMC 0.13微米制程,集成的晶体管数量为1亿2千万个,核心尺寸为182平方毫米,要大于目前主流的GPU规格。而在功率方面,AGEIA宣称PhysX的功率非常低,大约只有25W左右。和显卡一样,由于要涉及到大规模的数据运算和处理,PhysX也搭配了128M的GDDR3显存,所以说物理加速除了没有视频输出接口以外,外观上和显卡的区别并不大。
当时一块AGEIA的PhysX物理加速卡售价高达2000元以上,而且绝大多数用户都不愿意多淘一笔资金去购买一张物理卡,再加上当时PC平台上没有众多好游戏的支持,所以最终物理加速卡没有像当年VOODOO 3D加速卡(当年3D加速卡与物理加速卡非常相似,市场反应却相差甚远)一样得到市场的认可。
Havok与AGEIA的处境在是天壤之别,Havok得诸多名作的支持,两大显卡巨头NVIDIA与ATI也推出了基于Havok的物理加速方案,正当他们为未来的产品如何对Havok进行优化时,Intel收购Havok打乱了两大巨头的这一计划,也使NVIDIA的SLI Physics成为泡汤。
在2008年2月,NVIDIA宣布收购AGEIA,这样全线支持CUDA的GeForce GPU引入了AGEIA PhysX。当NVIDIA宣布CUDA集成PhysX物理引擎时,很多人都会认为PhysX引擎只支持GPU物理加速技术,这也是AMD-ATI选择Havok FX引擎的主要原因。然而实际上PhysX引擎最初是只支持CPU与PPU,而不支持GPU,即使是融入CUDA之后,PhysX引擎也仍然支持CPU物理加速。之所以给人PhysX引擎只支持GPU物理加速的错觉,是因为NVIDIA表示今后将大力发展GPU物理加速。
不得不提 CUDA并行计算的应用
在大部分非专业人士面前,CUDA显得有些神秘,简单地说,CUDA其实是基于NVIDIA显卡的一个C语言环境,是计算标准设备架构,是一个基础性可用于开发的架构;对于开发人员来说,可以用其发展衍生,处理一系列密集型数据,可以用在工业,农业,图形多媒体,经融学分析等很多方面。在CUDA的专门网站上(http://cuda.csdn.net/)我们可以看到CUDA运用到终端的大量实际案例,在地质学,医学,气象,经济学分析……包涵各个方面。
基于NVIDIA GPU的CUDA,主要在大规模并行计算上有天然的优势,何谓并行计算:同时使用多种计算资源解决计算问题的过程。这就决定了,要利用CUDA更好地计算,必须是那些可以分成很多个独立线程的计算,在这方面,NVIDIA GPU拥有远远超越CPU的能力。这样说不是贬低CPU的作用,而是说GPU和CPU擅长做的不一样,GPU更擅长于并行计算,尤其是多线程并行计算。CPU和GPU是并存的,分工协助的,而不是谁来取代谁。GPU拥有强大的并行计算的能力,这是CPU无发比拟的,当然CPU也有它的优势,总之,GPU是并行计算耀眼的明星。
随着显卡的发展,GPU越来越强大,目前中高端统一渲染架构的GeForce GPU拥有64-240个单独的ALU,因此非常适合并行计算,而且浮点处理能力也远远优于目前的多核CPU,加上GPU为显示图像做了优化。在众多计算领域上已经超越了通用的CPU。如此强大的芯片如果只是作为显卡就太浪费了,因此NVidia推出CUDA,让显卡可以用于图像计算以外的目的。CUDA(Compute Unified Device Architecture)工具包是一种针对支持CUDA功能的GPU(图形处理器)的C语言开发环境,未来还将发布Fortran语言版本。
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。跟以往的GPGPU概念不同的是,CUDA是一个完整的解决方案,包含了API、C编译器等,能够利用显卡核心的片内L1 Cache共享数据,使数据不必经过内存-显存的反复传输,shader之间甚至可以互相通信。对数据的存储也不再约束于以往GPGPU的纹理方式,存取更加灵活,可以充分利用stream out特性。以上几点都将大大提高GPGPU应用的效率。例如,在游戏中我们可以使用CUDA来让GPU承担整个物理计算,而玩家将会获得另他们感到惊奇的性能和视觉效果。另外,用于产品开发和巨量数据分析的商业软件也可以通过它来使用一台工作站或者服务器完成以前需要大规模的计算系统才能完成的工作。这一技术突破使得客户可以任何地方进行实时分析与决策。同时,一些以前需要很先进的计算技术来达到的强大计算能力的科学应用程序,也不再受限在计算密度上;使用CUDA的计算可以在现有的空间里为平台提供更强大的计算性能。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
CUDA工具包推出已有1年,它的推出马上受到了众多软件/游戏开发商以及科研机构和程序爱好者的欢迎,NVIDIA方面也将发布最新的CUDA 2.0版本。相信在未来,CUDA将会受到越来越多的领域的支持。目前,支持CUDA环境的GPU主要有采用统一渲染架构的显示核心。
PhysX原理浅析
NVIDIA将PhysX引擎集成到CUDA架构的物理运算中,这样就可以是GeForce 8/9及GT200系列全部都支持PhysX引擎, 所有目前已使用PhysX技术的游戏都支持新版驱动程序,如果装有支持CUDA平台的显卡,游戏将自动选取显卡进行物理加速运算,否则仍会使用性能较慢的CPU进行运算。此外,PhysX并不只使用于游戏市场,同时亦会运用 CUDA通用运算领域上,应用更广。
无论是GPU还是CPU、PPU、Cell(PS3)都可以通过HAL翻译层来实现软、固质体动力(Soft or Rigid Body Dynamics)、通用碰撞侦测(Universal Collision Detection)、有限元素分析(Finite Element Analysis)、流体动力(Fluid Dynamics)、毛发模拟(Hair Simulation),以及更更高级开发平台APEX中的更先进的布料模拟(Cloth Simulation)、自然模拟(Natural Motion)等在内新颖技术。
通过过CUDA通用接口,PhysX引擎将NVIDIA GPU中的Thread Scheduler(线程管理器)模拟成Control Engine(控制引擎CE),而Streaming Processors来模拟Vector Processing Engine(矢量处理引擎,VPE),其中CE控制引擎负责任务的指派,相当于PhysX中的主管机构,而真正的物理运算任务则是由VPE矢量引擎来完成,最后通过Data Movement Engine(数据移动引擎DME)输出。
在最新的游戏当中,我们可以借助NVIDIA PhysX卓越的计算能力,看到各种逼真震撼的场景,例如:
尘土飞扬,碎渣四溅的大量粒子运动所形成的爆炸效果;
设计结构复杂的各种几何模型,以完成更加逼真的物理运动和交互动作;
环绕在运动中的物体周围的大量翻腾涌动的浓烟和尘雾效果;
逼真细腻的河水、泥石流、岩浆等流体运动模拟;
衣物、草丛、树叶之类软性物体能随风自然飘动效果;
衣物,旗帜等软性物体因外界各种影响做出不同的撕裂或变形效果;
刚性物体之间相互碰撞的运动计算,一定力度之下形成拟真的成千上万个碎片运动。
作为世界上最为先进的物理引擎之一,PhysX物理加速引擎以其强大的物理计算和处理能力所带来的全新震撼的真实游戏体验,在业界得到一致认同,并将成为未来3D图形发展中一项不可或缺的重要技术。
现在对于物理加速引擎之间的斗争愈演愈烈,Havok和PhysX最终谁将独占鳌头,网友们就试目以待吧。当然也只有竞争才能更好的促进技术的进步,追求越来越真实的游戏效果,是每个游戏玩家追求的目标。
网友评论