С выходом видеокарт R600 (Radeon HD 2000), AMD/ATI представила новую разновидность антиалиасинга - CFAA (Custom Filter Anti-Aliasing). Его идея заключается в том, чтобы делать resolve не в blit engine видеокарты, а в программируемом шейдерном процессоре, т. к. Direct3D 10 железо способно читать отдельные color сэмплы из текстуры (отдельные depth сэмплы - в Direct3D 10.1). C появлением CFAA видеокарты AMD/ATI владеют cледующими программируемыми фильтрами выборки:
1. Box filter.
2. Narrow tent.
3. Wide tent.
4. Adaptive edge detect.
Нужно сказать, что последний вариант появился только с выходом RV770, потом поддержка распространилась и на предыдущее поколение DX10 видеокарт.
Box filter это стандартный способ выборки нескольких сэмплов в пределах границ фрагмента. Ниже изображён вариант 8xMSAA:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP-vilPuHgGQBY2kwxZCbNfT8yu4jDXiXT-FUDeIWIoOcYBTiK16xnsFekJtchA46RrO4trDtTZXQRvFJRPELjfPh6Zq60OBlwL52_aZ6drKmumNSoJV5pifXuxqd7Vi2HeY51Sy803-bY/s400/Box.png)
Narrow tent делает выборку 50% дополнительных сэмплов за границами фрагмента. Вариант 12xCFAA:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0NtBcn-w4pVjf8wj514DpjkLR-tZNWtpSAeKnJlNC-sp9mIgJewSXL1tpM3KfacfIwhzYlokTR9_oRVP3rGJZ1c1ftX9u1g8ykNaTIrjmHpmOpCAOK-HBild3wLGTE6K4qdENmhfom3J1/s400/NarrowTent.png)
Wide tent работает так же, как и Narrow tent, но делает выборку 100% дополнительных сэмплов. Т. е. при 8x мультисэмплинге делается выборка из 16 сэмплов (16xCFAA):
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV_YQKRrk4u9MkvX5hHEJcdkD236_86uU1dV7CGxHxsrSu29gH1OxT5eioeewgZibEUcAvG3sCoSzyTT9WB0ViU3LWTzOiL0ga8ZnlbyUD3qSJbJOJyghtNDEKp-xVTUVbGyotNbnZr3qv/s400/WideTent.png)
Фильтры narrow tent и wide tent как способы сглаживания изображения не являются идеологически правильными, т. к. выборка за пределами фрагмента приводит не только к сглаживанию границ, но и к размытию изображения. AMD не вдаётся в подробное объяснение работы фильтров, но скорее всего усреднение происходит на основе весов, где центральные сэмплы имеют наибольшие веса, а удалённые от центра - наименьшие.
Последний и наиболее продвинутый фильтр - adaptive edge detect:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmDRkxaO-duR4ejpZgJV5E0qeZ99TOTF4_1zlnvwLKn6blfs9VTQ-8NquOkfCD33MabYpHd8_1Sh92-9HGuAHhcpQWfpRLrpUbn5TvWz0lj5vI3zagwM1YBbceWuRRVA42JH419s76yQ3i/s400/EdgeDetect.png)
Программируемый фильтр выборки в случае использования этого режима осуществляет выборку сэмплов только в районе границы трегольника. Это повышает качество сглаживания, что особенно хорошо заметно на мелких деталях и позволяет избежать излишнего «замыливания», свойственного предыдущим фильтрам. AMD заявляет, что edge detect сглаживает не только края треугольников, но и края стенсельных теней и даже пиксели внутри текстур, что позволяет предполагать, что алгоритм использует в своей работе информацию о цвете сэмплов, а не об их Z-значениях. Расход видеопамяти остаётся таким же, как в случае использования обычных режимов MSAA 4x и 8x. В режиме 4xMSAA производится 12 выборок, а в 8xMSAA - 24. Следует отметить, что в последнем случае производительность видеокарты существенно "проседает".
Ниже приводится таблица возможных CFAA-фильтров:
Mode Filter
4x CFAA 2x + Narrow Tent
6x CFAA 2x + Wide Tent or 4x Narrow tent
8x CFAA 4x + Wide Tent
12x CFAA 8x + Narrow Tent
16x CFAA 4x + Wide Tent
24x CFAA 8x + Edge Detect
"идеологическая правильность" метода зависит не от выборки за пределами пикселя, а от весов, т.е. от формы фильтра
ОтветитьУдалить