在此之前,图形硬件只有操作GPU内数据的能力,顶点和像素着色器处理那些存储于显示内存中的数据。这种模式在进行已经存在的像素的复杂效果上很成功,然而这种模式不支持在GPU中创建一种新的对象。当一个游戏中动态的创建了新的对象时,GPU就必须要求助于CPU来完成对象创建 ,所以大多数3D游戏还都非常依赖CPU的性能。
DirectX 10最新加入的几何着色器将首次允许GPU来创建数据,这改变了GPU在系统中只能处理已经被创建的数据的传统规则,一系列在以往架构上无法实现的算法现在都成为了现实。使用DirectX 10,诸如stencil shadows(模版阴影)、dynamic cube maps(动态立方体贴图)和displacement mapping(置换贴图)这样以往依赖CPU能力或者需要多重渲染的算法操作都能大大地提升执行效率。
几何着色器逻辑上位于顶点着色器和光栅操作单元之间,能够独立的进行数据计算而无须CPU的参与。它接受来自地顶点着色器的数据,对应输入的每一个顶点,几何着色器最多被允许输出1024个新的顶点,这个能力也被承称作数据放大器;当然几何着色器也可以删除收到的顶点数据,系统允许它输出数据量少于输入量。几何着色器通过Stream Output可以直接把数据输入显示内存。
Displacement Mapping with Tessellation(棋盘式置换贴图)
几何着色器还支持在GPU上生成置换贴图。置换贴图是一种流行的离线渲染系统,它能够使用简单的模型和一种叫做高位贴图的特殊纹理实现非常复杂的模型。高位贴图是一种表示定点高低的灰度纹理模型,在渲染过程中,位置较低的多边形上棋盘状分布着其他多边形,基于这种情形编码成高位贴图,这些多边形被挤压然后呈现出全部细节。DirectX 9不支持GPU直接生成数据,因此低级的多边形棋盘状网格化操作是不可能的,现在随着DirectX 10的出现,大量的顶点数据可以被GPU自由创建,因此棋盘式置换贴图的实时渲染也成了简单的事情。
基于交点的新算法
几何着色器可以接收三种类型的原始数据,它们是顶点、线和三角形,同样它也可以输出这三种类型的数据。在数据是线和三角形的场合,几何着色器还能够访问交点的信息;使用这些线和三角形的交点能够实现很多强力的算法操作。比如交点信息可以用于计算对象的轮廓边缘以便进一步渲染。
Stream Output
在DirectX 10出现之前,几何变换操作在数据写入显示内存之前必须通过完整的像素着色器。DirectX 10引入了stream out技术来允许数据直接向桢缓存中输出结果,甚至不需要进行顶点着色或几何着色操作;与此同时输出的数据也可以反馈回管线形成交互式处理。当几何着色器和Stream Output建立关联时,GPU不但可以进行新的图形计算,还能够大大地提升效率。在几何着色器的创建、销毁及流化数据能力的支持下,GPU现在能够执行一个全功能的粒子系统,粒子在几何着色器中被创建出来并放大,粒子流通过Stream Output直接和显示内存交互,反馈回顶点着色器活化。
HLSL 10和其他
从DirectX 9时代开始流行的Higher Level Shading Language(高级着色语言),在DirectX 10时代又加入多项关键特性,这包括可以高速更新常量的常量缓冲集、把资源绑定进处理管线、通用计算的整数浮点指针和多样化着色器基础实例的状态切换。
DirectX 10还增加了Alpha to coverage来支持更高效率的抗锯齿alpha混合操作使3D室外场景收益;Shadow map filtering(阴影贴图过滤)现在也被支持;同时多重采样的子样本现在也可以被自由访问以实现更为灵活的抗锯齿操作。
以下是Dircet X各个版本开发者可用硬件资源的汇总:
