Part 1
Part 2
Part 3
Но тема охвачена не полностью, ещё есть что изучать. По мере сил я и дальше буду выкладывать в блоге что-нибудь интересное по ней. Тогда я оставил невыясненным вопрос, что происходит, если фрагментный шейдер пишет в SV_Depth (gl_FragDepth в OpenGL, регистр oDepth в asm). У меня самого до сих пор не стояла задача изменять глубину вручную.
Если мы не пишем в depth из шейдера, то это значение рассчитывается fixed-function pipeline интерполяцией по треугольнику. В случае MSAA, каждый сэмпл фрагмента получает своё индивидуальное значение глубины, и тест глубины проводится отдельно для каждого сэмпла. Фрагментный шейдер исполняется для фрагмента только один раз, и одинаковые значения цвета записываются только в те сэмплы, который прошли индивидуальный depth test. Благодаря fine-grained depth test, в местах пересечения геометрии получается сглаженная лесенка:


Комментариев нет:
Отправить комментарий