微软近期透露,下一代API接口DirectX 12预计将在2010年底或2010年制定效果完成。当然,这并不就代表DX12就一定会在年底发布,在硬件方面DX11显卡现在还刚刚开始发售,目前,ATI刚刚发布了支持DX11的基于Cypress核心的HD5800系列显卡,而NVIDIA才刚造出支持DX11的GT300芯片的样品,而DirectX 12 新技术就会在年底出现了。DirectX 12预览:1,Direct3D12渲染管线:看上去,DirectX 12比DirectX 11更酷。DirectX 12的很多提升意味着更高的特性性能,而这些特性很少能在DX11中看到。DirectX 12和DirectX 11两者最大的不同之处在于管线,可以说DirectX 12的渲染管线标志着绘图硬件以及软件功能革命性一步。DirectX 12加入了对Tessellation(镶嵌)的进一步支持。Tessellation 由外壳着色器(Hull Shader)、镶嵌单元(tessellator)以及域着色器(Domain Shader)组成。同时还加入了计算着色器(Compute Shader),计算着色器与DX11中引入的GS不同,它并不是渲染管线的一部分,CS也是DirectX 12的重要改进之一,可以很大程度上协助开发人员弥补现实与虚幻之间的差别。 2,Tessellation镶嵌技术: 在此之前,关于DirectX 11的报道可谓铺天盖地。事实上,自R600发布时,DirectX 11这个字眼才开始越来越多的出现在网络上。尽管R6xx和R7xx硬件都具有tessellator单元,但是由于tessellator属于专有实现方案(proprietary implementation),所以R6xx和R7xx硬件是不能直接兼容DirectX 11,更何况DirectX 11采用了极其精密老练的设置过程。事实上,DX11 tessellator单元本身不具备可编程性,DX11向tessellator (TS)输入或者从中输出的过程是通过两个传统的管线阶段完成的:Hull Shader (HS,外壳着色器)和Domain Shader (DS,域着色器)。 tessellator可以把一些较大的图元(primitive)分成很多更小的图元,并将这些小图元组合到一起,形成一种有序的几何图形,这种几何图形更复杂,当然也更接近现实。这个过程也被称作细分曲面(Subdivision Surfaces)。举例来说,tessellator可以让一个立方体,通过处理看起来像是个球形,这样的话无疑节省了空间。此外,图形的质量、性能以及可控性也达到了一定的促进。 Hull Shader负责接收一种由全四边形网格(quad mash)计算得到的图元数据(称作patches),并计算控制点(control points)的各种变换以及输入的图元各个边的镶嵌配置(tessellation factors),从而进行镶嵌。其中Control points用来定义想要得到的图形(比如说一个曲面或者其他)的图形参数。如果您经常用Photoshop绘图软件的话,不妨把Control points理解为PS的钢笔工具:用平面代替线的贝塞尔曲线功能。Hull Shader采用control points来决定如何安排tessellator处理数据,利用Tessellator生成大批量的新的图元,然后将这些图元以及控制点传送给 Domain Shader,Domain Shader将这些数据计算转换成3D处理中的顶点,最后GPU生成曲线以及多边形。 而DirectX 12则高效的多。3,多线程的支持:由于DX12所新增的特性甚至可以应用到DX11硬件中,所以我们对于DX12的快速应用都非常期待和乐观。DX12特性还包括很重要一点:支持多线程(multi-threading)。没错,无论是DX11还是DX12,所有的色彩信息最终都将被光栅化并显示在电脑显示屏上(无论是通过线性的方式还是同步的),但是DX12新增了对多线程技术的支持,得益于此,应用程序可以同步创造有用资源或者管理状态,并从所有专用线程中发送提取命令,这样做无疑效率更高。DX12的这种多线程技术可能并不能加速绘图的子系统(特别是当我们的GPU资源受限时),但是这样却可以提升线程启动游戏的效率,并且可以利用台式CPU核心数量不断提高所带来的潜力。 对于场景中的人像和三个镜像,DX12会启动四个单独线程进行并行处理,效率自然要比现在依次进行的做法高很多。 搭载8颗以及16颗逻辑核心的CPU系统已经离我们越来越近,现在游戏开发商们也该赶紧行动起来了,是时候解决有些游戏在双核心系统中运行缓慢的问题了。但是开发一款能够很大程度上促进双核以上系统普及的游戏,所能够获得的利润以及需要的付出目前来讲还很不乐观,所以这一进程进展缓慢。对于大多数游戏而言,充分利用四核心以及超过四核心的多线程优势还非常困难。尽管如此,通过多线程技术让简单的平行运算资源产生并显示出来,确实为采用平行运算代码的游戏提供了走红的机会,这些游戏代码也可以以单线程编码的方式存在。由于DX12系统中并不是采用一条线程处理所有DX state change以及draw call(或者说大量同步线程共同负责某一任务)的方式,所以游戏开发者可以很自然的创造出线程处理某个场景的某一类或者某一群的客体对象,并为将来所有客体对象或者实体为各自的线程处理打下基础(如果逻辑核心最终达到数百颗之后,这种线程处理方式对于提取硬件性能尤为重要)。 此外,DX11硬件也能够在运行DX12游戏时支持多线程,微软的这一计划相当令人兴奋,不过值得一提的是,AMD以及NVIDIA必须为各自的DX11硬件开发出相应的驱动软件才能达到这一效果(因为如果没有相应的驱动支持的话,DX11硬件即便可以运行DX12游戏,对于玩家而言并不会看到真正应有的效果)。
