Чтобы сдвинуть технологию мультисэмплинга с мёртвой точки, NVIDIA представила в G80 CSAA - Coverage Sampling Anti-Aliasing. Главной особенностью нового метода стало более точное определение, какую площадь фрагмента покрывают границы треугольника. Если MSAA отделил закрашиваемый фрагмент от отдельных сэмплов, экономя на вызове фрагментного шейдера и выборках из текстуры, то CSAA расширил его, отделив значение охвата от color/z/stencil значений в сэмпле. И если кол-во обычных сэмплов в CSAA осталось неизменным (4 или 8), то кол-во сэмплов охвата увеличилось до 8 или 16. А т. к. значение охвата представляет собой всего лишь битовую маску, требования к памяти и пропускной способности возрастают незначительно.
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?
Комментариев нет:
Отправить комментарий