DirectX 10引人了Shader Model 4.0,这其中包含着以下几方面
创新:
全新的可编程平台 -- geometry shader(几何着色器),它可以实现更初级状态的Shader处理,将扮演在图形管线中扮演重要角色,GPU使用它在第一时间进行几何数据的的创建。
统一的着色架构。使用一种统一的架构、通用的资源来完成对顶点、几何和像素着色的处理。
极大的提升可以使用的着色器资源。
统一着色架构
在以前的DirectX版本中,像素着色器因为受到常量寄存器、可用指令和总体流程可的限制总是运行在顶点着色器之后,因此程序员必须学会怎样分别去利用好顶点和像素着色器的权限。Shader model 4.0则带来了与以往不同的统一着色架构,在DirectX 10基础上进行游戏开发,程序员不需要在避免着色冲突限制上花费时间,所有的统一架构着色器都能够使用GPU可以用的全部资源。
Shader model 4.0在着色器程序可用资源的提升方面让人激动,在以往的DirectX下,开发者不得不仔细计算可用的寄存器资源,而在DirectX 10中,这些问题都不复存在,如上表所示,总体上DirectX 10提供了超过10倍的DirectX 9可用资源。
更多的纹理
Shader Model 4.0支持前文所述的纹理队列集,把开发者从繁重的拼接纹理图集的工作中解放出来,并能够在每个着色器上使用更多的特殊纹理实现更好的视觉效果。
在Shader Model 4.0之前,过高的开销使在一个着色器操作上使用多个特殊纹理的操作基本无法实现。为了解决这个问题,开发把许多小的分散的纹理拼接成一个大的纹理;在运行层中,着色器也需要进行额外的地址运算以便在拼接纹理图集中找到特定的纹理。纹理图集方式存在两个明显的缺点:首先小纹理之间的分界线回导致过滤操作错误;然后,DirectX 9的4096*4096纹理尺寸限制也是纹理图集的总体规模受到局限。纹理队列集能够解决所有问题,它能够使用队列格式存储纹理,每个队列能存储512同尺寸个纹理,最大的可用纹理尺寸也提升到8192*8192。为了促进这种应用,每个着色器可以操作的最大纹理数也提高到了128个,8倍于DirectX 9。
更多的渲染对象
多重渲染对象是DirectX 9时代的一个流行特性,它允许每个像素着色周期输出4个不同的渲染结果,从而高效率的在一个周期内渲染一个场景的4遍。在DirectX 10中,渲染对象的数目提高到8,着极大的提高了着色器能实现的场景复杂程度,延迟渲染和其它一些图像空间优化算法将广泛的从中受益。
两种新的HDR格式
HDR(High dynamic range rendering)从支持浮点色彩格式的DirectX 9时代开始流行。不幸的是浮点格式比整数格式占用更多的寄存器空间而限制了其性能的发挥。如典型的FP16格式的每个色彩数据需要占用16bits,这两倍于整数格式的空间占用。
DirectX 10的新HDR格式能够在和FP16实现同样动态范围的前提下只占用50%的存储空间。第一种格式为R11G11B10,它使用11-bits的红色和绿色以及10-bits的蓝色来优化存储空间;第二种格式是使用一个5-bits共享首位存储所有色彩然后每个色彩拥有9-bits尾址,这些简化的方法在HDR品质上和标准的FP16几乎没有差别。在最高级别的HDR方面,DirectX 10支持FP32的HDR,这可以用于科学计算等对计算精度较高的应用程序。