● PhysX和Tessellation带来的震撼
PhysX被NVIDIA极为的重视,因为NVIDIA公司推行的GPGPU方案CUDA缺少大众级的应用,所以NVIDIA急于将AGEIA的物理卡技术通过CUDA转嫁在自家的卡上,以应付AMD公司的ATI系列显卡的强力竞争。首先在NVIDIA显卡上实现的GPU加速是AGEIA曾为<虚幻竞技场3>开发MOD物理加速地图。之后大部分使用虚幻3引擎的游戏都加入了对PhysX for CUDA的支持。
PhysX是一套由NVIDIA设计的执行复杂的物理运算的技术。在 2005年7月20日,索尼同意在即将发售的Playstation3中使用NVIDIA的PhysX和它的SDK——NovodeX。PhysX将会使设计师在开发游戏的过程中使用复杂的物理效果而不需要像以往那样耗费漫长的时间开发一套物理引擎,而且使用了物理引擎还会使一些配置较低的电脑无法流畅运行。
而Tessellation技术,相信大家在我们之前的多次分析中已经非常明晰。Tessellation这个英文单词直译为“镶嵌”,也就是在顶点与顶点之间自动嵌入新的顶点。Tessellation经常被意译为“细分曲面”,因为在自动插入大量新的顶点之后,模型的曲面会被分得非常细腻,看上去更加平滑致密。它是一种能够在图形芯片内部自动创造顶点,使模型细化,从而获得更好画面效果的技术。Tessellation能自动创造出数百倍与原始模型的顶点,这些不是虚拟的顶点,而是实实在在的顶点,效果是等同于建模的时候直接设计出来的。
图形业界对于曲面细分的探索不断深入
在此之前,人们对低代价多边形操作法已经探索了近10年,从最开始的对三角形的fan操纵,到后来的龟裂和冲撞检查,这些方法可以实现曲面细分效果,但是对资源的消耗量太大不可控制。这次微软在DirectX 11中加入硬件Tessellation单元,我们可以视作曲面细分技术历经长时间的磨练后修成正果。虽然它不太符合通用处理单元的设计方向,但是如果计算晶体管的投入与性能回报,独立的硬件Tessellation单元是目前最好的选择。
如果将NVIDIA独有的PhysX物理加速和Tessellation曲面细分技术结合使用,将会给用户在DirectX 11时代带来如何的视觉体验呢?下面这个Demo将会告诉你答案。
以上图片是通过NVIDIA专为GF100开发的演示Demo,名字叫做Hair。这个示范中角色的头发完全是模拟运算而来,由NVIDIA图形处理器(GPU)综合硬件曲面细分技术(HW Tessellation),几何渲染(Geometry Shading)……等技术所创造与绘制。
首先Tessellation能够把头发一根根渲染出来,同时抖动后我们发现每一根头发都是独立的,这时抖动的头发就用到了PhysX物理加速技术来实现。这个Demo对NVIDIA在Fermi架构中的15个Tessellation进行了耗尽式的应用,同时它必须配合PhysX物理加速技术,才能够对每一根头发进行精确的计算。
头发丝是由DX11的硬件曲面细分技术(HW Tessellation)用等值线区域(isoline domain)凭空创造而来的。由曲面细分技术引擎(Tessellation engine)所创造的等值线(Isolines),被送入几何渲染器(Geometry Shader)以扩增其三角形细节。
只有166根头发备用来进行模拟运算, 这大约用到4500个头发顶点。在最高的精细度层级(LOD, Level Of Detail)设定下, 可以凭空创造高达18000根发丝(也就是高达280万个三角形)流体动态模体(Fluid Dynamics Simulation)被用来模拟发丝迎风飘扬的特效。
超线程发送处理器UTDP单元(图片来自PCINLIFE网站)
如果使用AMD显卡演示这个Demo,我们会发现明显的两个性能瓶颈,首先是由于HD5870在其Ultra Threaded Dispatch Processor中集成了1个Tessellation单元,而NVIDIA在每个SM中就有1个Tessellation单元,曲面细分的性能差距几乎是15:1。
在R5XX的时候,ATI开始引入Ultra Threaded Dispatch Processor的概念。UTDP为不同的shader类型提供了专门的命令队列窗口,这些窗口内塞满了等待执行的线程,每个线程都是若干条对输入数据处理的指令。