|
疯狂的游戏迷们对游戏画面质量的追求是永无止境的。其实,电脑上能够显示的颜色目前是红、绿、蓝、Alpha等4个通道,每个通道8bit,也就是每个通道上拥有2的8次方(即是256种)颜色,存储一种颜色就需要4个8bit的空间,是32bit的空间。可是实际处理图片的精度依然不能满足要求,随着进一步图形处理运算,颜色部分就会产生变化,那么这么就很难保证以后依然是标准的1/256了,累计下去必然会有非证书的颜色存在,再经过多次运算以后自然就行成了色彩细节丢失问题,譬如无法再现真实自然的光照情况。

HDR效果图
HDR文件是一种特殊图形文件格式,它的每一个像素除了普通的RGB信息,还有该点的实际亮度信息。普通的图形文件每个像素只有0~255的灰度范围,这实际上是不够的。想象一下太阳的发光强度和一个纯黑的物体之间的灰度范围或者说亮度范围的差别,远远超过了256个级别。因此,一张普通的白天风景图片,看上去白云和太阳可能都呈现是同样的灰度/亮度,都是纯白色,但实际上白云和太阳之间实际的亮度不可能一样,它们之间的亮度差别是巨大的。因此,普通的图形文件格式是很不精确的,远远没有纪录到现实世界的实际状况,下图是DOOM3中开启与关闭HDR时的对比效果图。
Dynamic Range(动态范围)是指一个场景的最亮和最暗部分之间的相对比值。一张HDR图片,它记录了远远超出256个级别的实际场景的亮度值,超出的部分在屏幕上是显示不出来的。可以这样想象:在Photoshop里打开一张从室内往窗外外拍的图片,窗外的部分处在强烈的阳光下,曝光过度,呈现的是一片白色,没有多少细节。你将毫无办法,调暗只会把变成灰色而已,并不会呈现更多的细节。但如果同一场景是由HDR纪录的话,你减低曝光度,原来纯白的部分将会呈现更多的细节。

首款支持HDR技术的赛车游戏
nVIDIA在GeForce 6和7800系列显卡中加入了High-Precision Dynamic-Range(HDR)技术,这与上述的HDR文件有着异曲同工之妙。HDR特效是与Vertex Shader和Parallax Mapping等等技术并列的图像渲染特效。想要实现HDR特效,首先,游戏开发者要在游戏开发过程中利用开发工具(游戏引擎)将实际场景用HDR记录下来,当然开发技术出色的开发小组会直接用小开发工具(比如3D MAX的某些特效插件)创造HDRI图像;其次,大家的显卡必须支持显示HDR特效。
尽管从原理上阐述HDR特效非常简单,但是其实际工作难度可并不低,因为显卡核心必须在运算过程中采用精确度更高的高精度浮点值来存储颜色。传统的用来存储颜色的32位寄存器显然已经不够用了,nVIDIA的GeForce 6系列图形芯片会自动采用更大的非标准寄存器来存储颜色数据,只是在最后显示的步骤再转换成标准的颜色数据。而GeForce 7800则直接达到128bit,最后才转换成标准的32bit色彩。
更为复杂的是,为了实现这种渲染方式,GPU必须具备浮点精度的着色、混合、滤波以及贴图功能。此外为了保证速度,GPU还不得不把这些色彩数据以原有精度(或近似原有精度)存储起来。因为只有这样,浮点数据的对数特性能够被保存起来,如果中间处理的结果仍以每像素256bit存储,那么GPU所具备的一切浮点颜色处理都等于是白费。为了实现这样的效果,GeForce 6和7800系列CPU原生操作模式下提出了新的概念,包括浮点着色、浮点混合和浮点滤波等技术,并且无需像素着色器程序编码或者解码。
目前不仅仅是nVIDIA,其它厂商也宣称其GPU支持HDR技术,然而从最真实的实际游戏测试来看,不少所谓的“支持”令人值得怀疑。下图便是X800和GF 6800分别打开HDR时的对比,此时可以发现X800并没有展现出明显的效果,至少并不如GF 6800所表现得那样明显。
 
X800和GF 6800的HDR效果对比
|