Чтобы сдвинуть технологию мультисэмплинга с мёртвой точки, NVIDIA представила в G80 CSAA - Coverage Sampling Anti-Aliasing. Главной особенностью нового метода стало более точное определение, какую площадь фрагмента покрывают границы треугольника. Если MSAA отделил закрашиваемый фрагмент от отдельных сэмплов, экономя на вызове фрагментного шейдера и выборках из текстуры, то CSAA расширил его, отделив значение охвата от color/z/stencil значений в сэмпле. И если кол-во обычных сэмплов в CSAA осталось неизменным (4 или 8), то кол-во сэмплов охвата увеличилось до 8 или 16. А т. к. значение охвата представляет собой всего лишь битовую маску, требования к памяти и пропускной способности возрастают незначительно.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7SXgxfOGz5XdVcL9o6boYifk1FP8gRn11U9akKUL-lZZ7FTw5Z0wF4I9g1DGcqGyfp0CGa6Jb4JmFaSLY_Hngk3C5hXpLRSR4EcRFOMmDnS_2MlsA3IAtx3Rgj5KlPKj6rKEzPvQhT13i/s400/16xQinmemory.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4kww_sJo__RV60c6jcUyWvLDqgYwfQBqEpspXUftY_y49PjwhNoCBltc5m2bxAyPe1zv55SywXybTlS9BJLS4vo6l5j_6xymsI2Wt1LEumuOGnaAZrFZeppokMm04iR0zdLQmEBQ10eGQ/s400/16xinmemory.jpg)
NVIDIA не вдаётся в детали реализации этой технологии, но можно попробовать представить себе, как примерно всё работает. Во-первых, буфер охвата тесно связан с z-буфером, т. к. значения глубины и охвата обновляются одновременно:
Try to avoid updating color and z independently, as CSAA coverage information is only updated when z is being written.Для разработчиков NVIDIA приводит некоторые советы, как правильно осуществлять рендеринг при включенном CSAA - избегать разделения z-буфера между несколькими целями рендеринга без предварительной очистки, избегать частичной очистки z-буфера. Для правильной работы, сэмпл охвата должен знать, с какими сэмплами color/z/stencil он связан. Поэтому к одному coverage биту нужны ещё три, чтобы индексировать один из восьми сэмплов. После того, как в буфере отсчётов будет сформировано изображение, усреднение цветов сэмплов должно происходить так:
1) Читается coverage бит. Если он равен 0, сэмпл охвата пропускается.
2) Если от равен 1, читается цвет из color/z/stencil сэмпла, на который указывает сэмпл охвата.
Т. к. кол-во сэмплов охвата больше, чем обычных сэмплов, то их цвета выбираются и усредняются более точно, в зависимости от площади покрытия фрагмента треугольником.
Конечно, 8xCSAA уступает в качестве изображения 8xMSAA, как и 16xCSAA по сравнению с теоретическим 16xMSAA. Тем не менее, он требует лишь незначительного увеличения памяти для хранения сэмплов охвата и улучшает качество изображения по сравнению с обычным MSAA.
Coverage Sampling Antialiasing
What is CSAA?
Комментариев нет:
Отправить комментарий