Аппаратная тесселяция и displacement mapping в OpenGL
Автор: bazhenovc
Целью написания данной статьи была реализация простого displacement mapping`а с помощью аппаратной тесселяции и OpenGL.
Статья не претендует на полноту изложения теории.
В конце статьи у нас получится вот такая картинка:
Что это такое?
Тесселяция - это разбиение некоторого примитива на несколько меньших. В современном мире это делает видеокарта.
Работает это следующим образом:
Из вершинного шейдера в тесселятор приходят патчи(GL_PATCHES, новый вид примитивов), тесселятор их разбивает и передаёт дальше в геометрический шейдер.
Также введены 2 новых типа шейдеров: tesselation control shader и tesselation evaluation shader, на рисунке показано, когда вызывается каждый.
Как это использовать?
Tesselation control shader (GL_TESS_CONTROL_SHADER) позволяет нам задавать параметры для тесселятора. Он вызывается для каждой вершины патча и имеет доступ ко всем его вершинам. Кроме этого, ему на вход поступают: