Part 1
Part 2
Part 3
Но тема охвачена не полностью, ещё есть что изучать. По мере сил я и дальше буду выкладывать в блоге что-нибудь интересное по ней. Тогда я оставил невыясненным вопрос, что происходит, если фрагментный шейдер пишет в SV_Depth (gl_FragDepth в OpenGL, регистр oDepth в asm). У меня самого до сих пор не стояла задача изменять глубину вручную.
Если мы не пишем в depth из шейдера, то это значение рассчитывается fixed-function pipeline интерполяцией по треугольнику. В случае MSAA, каждый сэмпл фрагмента получает своё индивидуальное значение глубины, и тест глубины проводится отдельно для каждого сэмпла. Фрагментный шейдер исполняется для фрагмента только один раз, и одинаковые значения цвета записываются только в те сэмплы, который прошли индивидуальный depth test. Благодаря fine-grained depth test, в местах пересечения геометрии получается сглаженная лесенка:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhVWBNLXMKXaptPnfxBFyzEqmUN44tasKhZ-wE0S9l7w55z1XVF71TcYdC2GLBjYjgy8HqRcHpqhAeydaYMnpvi5LSoT7MY8ph1CJQsrJoWzQgfZ6MdgqxU07cevsR8HKD-oQcZN0pU2BH/s400/msaa_nozwrite.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0qJUeGB4teNnWCOG2pAc1Yb1AdOwutMR3MYkGEriVkKdSM-l6nt6_7WOx1MGMufMyvec1txcU777LnTSbjxoFSFlqpr73EhqxQWrQIzHjWnfTMcTXC3pYC-bKJjLDgWTLiitS3agPR2vc/s400/msaa_zwrite.png)
Комментариев нет:
Отправить комментарий