并行向量处理是XGPU的特点之一,这对于描影程序来说是非常重要的架构。它的96个恒量,还能防止描影错误地写到混和值上,比如使用96/4个矩阵。不过,在XGPU中,描影操作受到了限制,每个像素只能使用20个矩阵。
Pixel Shader Version:像素描影版本,它也是重要的描影类型。在radeon中开启像素描影,硬件表现效果非常接近1.0版,能使大多数DirectX 8样例正常,特别是开启纯硬件模式后,可加快存储、转换、原始运算列表和向量在局域内存中的处理速度,但冲突仍时有发生。XGPU、GeForce 3和Radeon 8500/7500天生就拥有1.0以上的能力,自然不会有兼容性问题。
描影将计算出三角的的阴影点,并以最快的速度执行。8个恒量、两个色彩(依照原始表面来进行内插值替换)、纹理层都会互相影响,并存储到两个临时寄存器。问题是计算像素的结果色彩,在纹理层描述时需要大量的固定性操作,无法简化。操作还同时多方向进行,最大的数目与纹理层数目相当(XGPU是4层)。像素描影更适合管道层设置,每时钟得到一个结果是非常有效的,多管道硬件不会妨碍并行运算。
- Quintic/RT Patches(五次量/RT纹理碎片),使用小型纹理让物体表面更平滑,加入两个原始的序列(矩形和三角形),渲染时调用DirectX 8中相应的函数,可以控制细节来改变物体的平滑度。XGPU通过硬件在系统共享内存中进行加速,转化为三角形原始量结果列表,或三角形参数,再生成不用保存数据的即时渲染。程序员的工作将变得简单,内存的负荷也会减轻。
- W Depth Values(W深度值):深度值可选方案之一,W格式。
- Stencil Buffer(模版缓冲):硬件支持模版缓冲,可以执行下列操作:
- KEEP:不要改变这个在缓冲区的值。
- ZERO:把原始量的所有渲染像素设置为0
- REPLACE:记录一些定义值
- INCRSAT:数值增加1,如果达到最大区域就不会改变。
- DECRSAT:数值减少1,如果达到0就不会改变。
- INCR, DECR:数值增加或减少,达到最大或最小值后就返回初始化状态。
SB(Shadow Buffer,描影缓冲)
为物体加入阴影,提升真实感,在很早以前已经有这种做法,如:nVidia TNT使用的模板缓冲,或者voodoo的直接投影。不过,并非所有描影技术都会成功,ATi的PB(Priority buffer,优先缓冲)的技术很优秀,缺少支持才是失败的主要原因。
与模板缓冲相比,描影缓冲要高级一些,它可以生成更平滑的阴影效果。工作过程不太复杂,但需要同时调用硬件单元和传统渲染来处理,描影缓冲的硬件特性有:可指定内存作为描影缓冲区;把描影映射加入到描影缓冲区里面;从描影缓冲区读取描影映射数据,通过一定的计算,判断特定像素是否需要添加阴影。描影缓冲拥有分级能力,最高可达256级阴影过滤,不仅可以生成复杂的限制,还拥有一定的多重纹理加速能力,避免描影处理降低游戏速度。
继续讨论主要特性:
- Anisotropy Filtering:各向异性过滤,XGPU与GeForce 3、GeForce 2效果相当,只是加入了体积纹理方面的过滤。
- Cubic Texturing:硬件支持立方环境映射
- Volume Texturing:硬件支持体积渲染
2D纹理是目前应用最多的游戏纹理,比如长X宽 = 256X256,把纹理贴在三角形组成的虚拟物体表面,看起来就会漂亮许多,但2D纹理缺乏深度信息,无法表现出凹凸不平的效果。3D纹理包括了三维坐标,也称为体积纹理,比如:长X宽 = 256X256X256。3D纹理首先出现在OpenGL中,DirectX的动作要慢一些。3D纹理不能独立使用,必须配合MIP映射的分级,才能应用在实际游戏之中。ATi Radeon(R100/Rage6C)是第一个拥有硬件3D纹理的显卡,可惜没有相应的支持,白白浪费了大好能力。
3D纹理引起了许多概念上的变化,比如平常的三线性过滤,因为增加了深度数据,变成了四线性过滤,同时在深度和平面做纹理过滤,增加纹理的真实感,以便适应三维物体的全方位观点。由于纹理的量变大,占用的空间也随之变大,如:256X256X256的32位色纹理为64MB,512X512X512的32位色纹理为512MB,现今的显卡根本不能满足它们的胃口。幸好借助8:1的纹理压缩技术,256X256X256的32位色纹理可以缩减至8MB,勉强能加入游戏中。