воскресенье, 6 сентября 2009 г.

How antialiasing works. Part 3.

AMD/ATI также не стоят на месте. И как обычно, идут к новым вершинам своим путём, отличным от того, что выбрала NVIDIA.

С выходом видеокарт 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:


Narrow tent делает выборку 50% дополнительных сэмплов за границами фрагмента. Вариант 12xCFAA:


Wide tent работает так же, как и Narrow tent, но делает выборку 100% дополнительных сэмплов. Т. е. при 8x мультисэмплинге делается выборка из 16 сэмплов (16xCFAA):


Фильтры narrow tent и wide tent как способы сглаживания изображения не являются идеологически правильными, т. к. выборка за пределами фрагмента приводит не только к сглаживанию границ, но и к размытию изображения. AMD не вдаётся в подробное объяснение работы фильтров, но скорее всего усреднение происходит на основе весов, где центральные сэмплы имеют наибольшие веса, а удалённые от центра - наименьшие.

Последний и наиболее продвинутый фильтр - adaptive edge detect:


Программируемый фильтр выборки в случае использования этого режима осуществляет выборку сэмплов только в районе границы трегольника. Это повышает качество сглаживания, что особенно хорошо заметно на мелких деталях и позволяет избежать излишнего «замыливания», свойственного предыдущим фильтрам. 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

1 комментарий:

  1. "идеологическая правильность" метода зависит не от выборки за пределами пикселя, а от весов, т.е. от формы фильтра

    ОтветитьУдалить