转载于:http://getix.blog.163.com/blog/static/116992306200962510481030/
原文于:https://developer.nvidia.com/csaa-coverage-sampling-antialiasing
声明:本文原文由Peter Young撰写,由GeTiX翻译。本文仅供学习交流之用。
如需转载,请注明作者及出处。
本文旨在让更多的人了解CSAA这一新的抗锯齿处理方法。
如果翻译有错漏,也敬请指正和谅解,因为这毕竟是本人第一次翻译文章。
如果你的英文水平不错,建议直接阅读原文:点击这里
CSAA(Coverage Sampling Antialiasing,覆盖取样抗锯齿)是精视(GeForce)8系列GPU的关键新特征。
总的来说,CSAA生成比得上8x或16x MSAA质量的抗锯齿图像,但只产生比标准(通常是4x)MSAA多一点的性能损失。它通过引入一个新的采样类型概念来工作:一种表示覆盖的取样。这不同于先前总是把覆盖固定地绑定到另一个取样类型的抗锯齿技术。例如在超级取样中,每个取样表示了着色颜色、储存的颜色/Z/模板、和覆盖,这样本质上增加了渲染到一个过大的缓存并向下取样。MSAA通过从储存的颜色和覆盖中分离出着色取样,减少了这项操作的着色器开销;这允许应用程序使用抗锯齿来处理更少的着色取样同时维持同样质量的颜色/Z/模板和覆盖取样。CSAA通过从颜色/Z/模板分离出覆盖进一步优化了这个过程,从而减少带宽和存储开销。
精视8800支持下列CSAA模式:
CSAA模式 | 颜色/Z/模板 取样数量 |
覆盖取样数量 |
8x | 4 | 8 |
8xQ(质量) | 8 | 8 |
16x | 4 | 16 |
16xQ(质量) | 8 | 16 |
图1:16x CSAA的颜色和覆盖存储/布局
CSAA在下列两种情况下会开启:
推荐应用程序直接指定开启CSAA。实现CSAA的过程非常简单(几乎和实现MSAA一摸一样),而且对你的用户来说好处是巨大的;他们在性能损失几乎为零的情况下获得高得多的图像质量,且没用操作控制面板的麻烦和困难。
实现——DirectX 10
通过使用多重取样描述结构中的Quality域可以启用CSAA:
typedef struct DXGI_SAMPLE_DESC {
UINT Count;
UINT Quality;
} DXGI_SAMPLE_DESC, *LPDXGI_SAMPLE_DESC;
由于这个结构已经提供了通过Count域指定存储的颜色/Z/模板取样数量的机制,并且在多重取样缓存中着色颜色取样数目总是1,我们可以通过设定Quality域为期望的值来指定覆盖取样数量。下面的表格列举了不同的CSAA模式,和用来开启它们的合适Count/Quality值。
表1:DX10的CSAA模式和对应的取样/覆盖数量
期望的CSAA模式 | Count(颜色/Z/模板 取样) |
Quality值 |
8x | 4 | 8 |
8xQ(质量) | 8 | 8 |
16x | 4 | 16 |
16xQ(质量) | 8 | 16 |
检查CSAA支持是简单的:
略
在OpenGL中CSAA是通过一个新扩展实现的:
GL_NV_framebuffer_multisample_coverage
当这个扩展的支持被验证,你就可以使用下列函数来创建CSAA渲染缓存:
void RenderbufferStorageMultisampleCoverageNV( enum target, sizei coverageSamples, sizei colorSamples, enum internalformat, sizei width, sizei height);
这个函数的使用与旧的RenderbufferStorageMultisampleEXT()是相同的;唯一的区别就是指定分开的颜色/Z/模板取样数目和覆盖取样数目的能力。正如DX10,OpenGL函数指定颜色取样和覆盖取样与参数一样。
参考下面的表格:
CSAA模式 | colorSamples值 | coverageSamples值 |
8x | 4 | 8 |
8xQ(质量) | 8 | 8 |
16x | 4 | 16 |
16xQ(质量) | 8 | 16 |
CSAA的性能通常和典型的、给定相同的颜色/Z/模板取样数目的MSAA的性能很相似。例如,8x和16x CSAA模式 (使用4个颜色/Z/模板取样)执行起来与4x MSAA相似或相同。
同时CSAA在存储方面是非常高效的,因为覆盖取样只需非常小的内存。
透明抗锯齿和CSAA100%兼容。然而,记住透明抗锯齿工作在一个更低的分辨率;它工作在颜色/模板/Z分辨率而不是覆盖分辨率,因为透明抗锯齿需要颜色/Z/模板取样信息来工作。
为了最好的图像质量结果,当实现CSAA时尽量避免下列情况:
下面SDK 10 CSAA示例中的图像凸显了标准4x MSAA和16x CSAA模式在质量上的不同。观察16x在图像质量上的提高,并注意16x CSAA通常执行起来与4x MSAA相似这个事实。
无抗锯齿 | |
4x MSAA | |
16x CSAA | |
16xQ CSAA |