上一篇文章Anti-alias的前世今生(一)介绍了硬件支持的AA方法,本篇将重点阐述新兴的基于post process的AA。
SSAA、MSAA、CSAA这些方法虽然硬件直接支持,但带来的额外开销不可小视。一方面是它们对存储空间带来的冲击是惊人的。尤其在非桌面平台上,内存本来就不多,如果还需要AA的话就吃不消了。如果同时使用了MRT和AA,显存开销更是天文数字。另一方面,这些方法对“edge”的考量都是primitive的边界,不管这个edge是否真的需要AA,所以会浪费很多计算量。
GPU Gems 2的第九章Deferred Shading in S.T.A.L.K.E.R.在游戏界第一次宣传了Deferred Shading的概念,同时也提到了Deferred框架无法使用硬件MSAA的问题。虽然Deferred Lightin ...
Anti-alias,简称AA,在图形学中广泛地用于提升渲染质量。经过几十年的发展,AA也从离线渲染逐步普及到了实时渲染的领域。本系列文章将总结一下在实时渲染中使用的AA方法的前世和今生。本篇集中讨论硬件提供的AA方法。
[caption id="attachment_1126" align="aligncenter" width="258"] 图1. 一个像素内部的采样点。16个红圈表示16个采样点,蓝色和黄色是覆盖了这个像素的两个三角形。[/caption]
SSAA
Super Sampling Anti-Aliasing是最直观的一种AA方法。实现方法之一就是渲染一个大图,然后downsample,这相当于在每个最终像素内部做了一个均匀分布采样。更通用的描述是,每个像素分布多个采样点(可以均匀分布、Poisson分布、随机分 ...
昨天花了1个小时把gamma校正添加到KlayGE的渲染流水线中,对比度和细节都有所提升。下图是打开gamma校正的截图:
对比原先gamma关闭的:
目前相应的工具还没完成,所以gamma在配置文件中是个可选项。以后将变成不允许关闭gamma校正,毕竟打开才是理论上正确的。
关于gamma校正的原理,请参见Gamma的传说一文。
在GDC2011上,有一种新的基于post process的AA方法Directionally Localized Anti-Aliasing。从结果上看,它比MLAA好,并且速度比常见的GPU MLAA快。具体资料可以在这里找到。
在Napoleon314的强烈推荐下,KlayGE也改用了来自Uncharted 2的Filmic Tonemapping。虽然只要改2行代码,但Filmic Tonemapping所带来的鲜艳颜色和对比度是其他常用tonemapping所不可比拟的,完全消除了那种灰蒙蒙的感觉。贴两张图看看效果:
AMD Catalyst 11.4才发布没几天,11.5也紧跟着出来了。使用的感觉和上一版没啥区别,能用得还是能用,不能用的还是不能用:(。
上一个帖子提到了在Catalyst 11.4上,KlayGE的OpenGL插件黑屏的情况,现已查明是因为AMD和NVIDIA的GLSL不兼容的原因。NV的驱动上fragment shader可以定义varying out vec4 v_gl_FragData[8]这样的输出数组,但AMD的驱动上不支持。所以我再次修改GLSL生成器,把数组拆成独立变量,解决了问题。但实际上AMD的GLSL预定义了out vec4 gl_FragData[],所以变成预定义可以,自定义不行的情况。估计得等以后他们自行解决吧,目前只能先绕开了。
今天AMD Catalyst 11.4发布了,增强了AMD VISION Engine Control Center / AMD Catalyst Control Center,提高了一些游戏的性能,比较值得注意的是GPGPU方面的增强有。它包含的OpenCL runtime支持APU上的零拷贝(可能是可以直接把一个CPU/APU的内存注册到另一个CPU/APU,类似CUDA 4.0中的功能);并提高了CPU和GPU之间的PCIE传输性能。
杯具的是,KlayGE使用OpenGL插件的话,所有sample在这版驱动上都黑屏,原因有待查明。
GI组的atyuwen同学上个月用KlayGE实现了Multi-resolution Splatting Indirect Illumination的效果,现在开发版本的KlayGE正式加入了Realtime Global Illumination的例子。效果截屏如下:
对比GI关闭的效果:
可以看出间接光照还是蛮明显的。
目前的GI在NVIDIA 9800GT上,1280x800的时候需要花费6.6ms;在GTX 480上需要2.5ms。下一步将要做的改进是:
用light volume的方法优化virtual lighting的速度。
根据BRDF生成不同形状的light volume。
Importance sampling
优化的目标是在9800GT上降低到2.5ms左右。
在NVIDIA的新网页3D Vision and Surround Technology上,提供了一份名为Stereo Unprojection Sample的示例代码。在里面提供的NVAPI和独立的NVAPI在stereo的部分不全相同。这个NVAPI提供了NvAPI_Stereo_SetDriverMode,可以把stereo分成两个模式,Direct和Automatic。Automatic顾名思义就是原先的自动修改VS的模式,而Direct应该就是自己提供左右眼渲染结果,而让NV驱动完成stereo的方法。它也提供了NvAPI_Stereo_SetActiveEye,可以让你设置当前激活的是左眼还是右眼。也就是说,很可能用这种方式直接就可以跨API地直接控制stereo,而不用再像在程序中使用NV 3D Vision一文所说的那么麻烦了。