维爱迪-动画创作家园 >> 动画资源 >> 其他教程 >> DirectX不是全部!3D游戏图形技术解析 |
3D游戏图形技术之六—高动态范围光照(HDR)(图24)
图24
● 大名鼎鼎的HDR技术再次缩水
HDR(High Dynamic Range,高动态范围光照)技术相信很多人并不陌生,想当年DX9C SM3.0面世时,正是凭借HDR技术一举成名,HDR所带来的绚丽光影效果给玩家极强的视觉震撼,但却产生了很多负面效果,这些历史遗留问题时至今日都没有得到完美解决。
几乎所有的图形技术都是随着时间的推移来进一步增强效果,只有HDR被一而再再而三的“缩水”,这是为什么呢?
● DX9C时代HDR与AA水火不容
HDR技术通过采用浮点格式的颜色代码来为纹理、光照等计算提供极大的精度和颜色范围(以前的纹理一般都是采用整数型的颜色格式)。尽管最后显示到屏幕上还是每个颜色通道8位的整数格式,但是以前的材质、光照计算中纹理也是用每通道8位的格式来参与计算,所以在显示到画面之前,很多细节就在低精度的运算中丢失了。
HDR效果虽然很美,但在DX9C模式下进行16位浮点(FP16)运算时,会占用到原本属于多重采样抗锯齿(MSAA)的缓冲区域,使得游戏开启HDR后无法进行FSAA处理。当年的一大批DX9C游戏都是如此,比如《孤岛惊魂》、《细胞分裂》、《虚幻3》引擎的全系列游戏。
● ATI X1000和XBOX360是个例外
ATI的DX9C显卡发布较晚,因此在设计之初就考虑到了HDR+AA的需要,整合了额外的缓存,只要通过游戏或者驱动重新指定另外的缓冲区,就能完美支持HDR+AA效果,所以X1000系列和XBOX360主机都能支持HDR+AA。(图25)
图25
不过ATI的HDR+AA方案并不是业界标准,还是有不少游戏无法同时开启HDR和AA,通过驱动强行更改缓冲区的方式和一些游戏有兼容性问题,ATI官方都不认可这种做法。
●DX10时代,新增两种HDR颜色格式
为了解决困扰业界已久的HDR+AA问题,微软在DX10当中加入了两种新的HDR格式,对每个颜色通道16位浮点数的格式进行删减,第一种是R11G11B10(红色绿色各11位,蓝色10位,总计32位),另一种是红绿蓝各9位共享5位指数(计算机中浮点数是尾数附加指数的形式来表示)。
新增的两种HDR格式都只有32位,而并非DX9C时代的48位(FP16x3),所以动态范围精度有些下降,但好处就是新的HDR不会与MSAA抢占缓冲区,所消耗的显存也大大减少,效率和兼容性提高,至于光影效果的缩水其实很难看出来。
● DX11时代,新增HDR纹理压缩技术
HDR除了不支持抗锯齿外,还不支持纹理压缩技术,因为HDR在设计之初的要求就是光照和纹理都必须保持高精度。随着时代的发展,游戏的分辨率越来越高,纹理贴图越来越精细,而纹理贴图如果不经压缩就放在显存里面的话,容量是相当恐怖的,因此新一代的游戏显存消耗成倍增加,这其中罪魁祸首其实还是HDR技术。
为了解决这个显存消耗大户,在DX11当中又新增了一种专为HDR设计的纹理压缩格式:BC6H,压缩比高达6:1。
下图展示的是图像通过BC6H压缩模式进行压缩的前后效果对比图。其中左边的图像为原始图像,中间的是在压缩过程中损失的一些细节,而右边的就是压缩后的图像。可以看出,从画质上来看几乎没有损失(肉眼看不出),但是却可以大幅度降低显存的占用。(图26)
图26
经过了DX9C、DX10和DX11三代API,HDR技术在神不知鬼不觉的情况下被两次“缩水”之后,才真正走向成熟,由此可见好的图形技术不光是要效果出色,更重要的是拥有高效率和实用性,才能被更多的游戏所接受,被更多的显卡所支持。