■ GPU Program
摘要: 一个渲染效果一般由以下部分组成:一个顶点和/或像素着色器,一个需要设置的设备状态列表,一个或更多的渲染通道(rendering passes)。此外,有一个能在不同级别的图形硬件上渲染效果的可靠机制通常是值得的(也就是说,有不同的可用的效果版本执行同样的效果或尽可能尝试执行同样的效果)。显然,所有这些必要的任务组合在一起成为一个效果。因此,一个合理的做法(步聚)是,设法将这些任务封装到一个单元中。
Direct3D效果构架提供了这样一个机制:将渲染效果的任务封装到一个效果文件。在效果文件中实现效果有两方面优势。其一,它允许我们不必重编译应用程序就能改变一个效果的执行。这是一种更新效果的过程,不管是修正一个bug,一些简单的加强,或者利用最新的3D硬件特性。第二,它将所有的效果组成部分封装到一个文件。
阅读全文
摘要: 像素着色器是一段执行在图形卡的GPU上的程序,它运行在对每个像素进行光栅化处理时。(不像顶点着色器,Direct3D不会以软件模拟像素着色器的功能。)实际上它替换了固定功能管线的多纹理化阶段(the multitexturing stage),并赋予我们直接操纵单独的像素和访问每个像素的纹理坐标的能力。这种对像素和纹理坐标的直接访问使我们可以达成各种特效,例如:多纹理化(multitexturing)、每像素光照(per pixel lighting)、景深(depth of field)、云状物模拟(cloud simulation)、焰火模拟(fire simulation)、高级阴影技术(sophisticated shadowing technique)。
阅读全文
摘要: 顶点着色器(vertex shader)是一个在图形卡的GPU上执行的程序,它替换了固定功能管线(fixed function pipeline)中的变换(transformation)和光照(lighting)阶段。(这不是百分之百的正确,因为顶点着色器可以被 Direct3D运行时(Direct3D runtime)以软件模拟,如果硬件不支持顶点着色器的话)。
阅读全文
摘要: 在我们写的程序里顶点和像素是很小的对象,它们由GPU来执行,是固定功能管线的一部分。用我们自己写的着色器程序替换一部分固定功能管线,在绘制效果上我们获得很大的灵活性。我们不再局限于预定义的"固定"操作。
为了编写着色器程序,我们需要一种高级着色器语言(High-Level Shading Language ,简称HLSL) 。在DirectX 8中,着色器是用低级着色器汇编语言编写的。幸运的是,我们不必再用汇编语言来写着色器了,DirectX 9支持一种高级着色器语言来写。
阅读全文