table of contents
В шейдерах версии 5.0 появилось несколько новых стадий, которые мы видим на рисунке.
На этой стадии информацию, полученную из буферов на входе, подготавливают к дальнейшей работе. IA считывает примитивы из буферов и переводит их в примитивы для последующих преобразований. Это могут быть списки линий, стрипы треугольников или примитивы со смежностью, или несколько новых типов.
Для инициализации IA необходимо пройти несколько шагов. Сначала мы создаем и инициализируем входные вертексные буферы. Затем создаем Input-Layout, который определяет каким образом информация из вертексного буфера поступает в IA. После этого привязываем созданные объекты к IA и сообщаем IA каким образом вершины собираются в примитивы. Потом вызываем методы для рендера примитивов.
Как и в предыдущих версиях DirectX, вертексный шейдер нужен для работы с вершинами или вертексами.
Обратите внимание на две вещи:
Первая стадия тесселяции. На этой стадии мы получаем информацию из вертексного шейдера в виде контрольных точек (patches).
Нужно создать Hull Shader Constant function, которая задаст факторы тесселяции (определяют интенсивность тесселяции).
Эту стадию нельзя запрограммировать, тесселятор графической карты сам поделит геометрию в соответствии с контрольными точками и факторами.
На этой стадии мы наконец-таки обрабатываем тесселированные данные.
В зависимости от типа тесселяции, мы получаем информацию различных типов, но обязательно представленную в формате барицентрических координат.
Теперь мы можем делать с каждым сгенерированным вертексом что угодно (например, замещение)
Geometry shader позволяет изменять геометрию. Вместо вертексов на этой стадии мы обрабатываем примитивы (точки, линии, списки треугольников и т.п.)
Стадия опциональна, и при желании мы можем обратиться к ней и после стадии вертексного шейдера, и после геометрического шейдера.
Stream Output позволяет посылать измененные вертексы или примитивы непосредственно в новый буфер (чем-то напоминает рендеринг геометрии)
Растеризация забирает примитивы и подготавливает их к стадии пиксельного шейдера (culling, clipping, depth test).
Работает так же как и раньше, когда мы обрабатывали каждый пиксель на экране.
Обратите внимание, что Shader Model 5 также может записывать пиксельные шейдеры сразу в буфер.
Графический конвейер VVVV был слегка адаптирован для работы с DirectX 11.
Мы заменили меш DirectX9 на более гибкий. Index buffers теперь необязательны, и геометрия может быть любой из допустимых (в шейдер можно посылать точки и линии).
К геометрии прикрепили Drawer, который по умолчанию отрисовывает объект как в DirectX 9.
Drawer можно модифицировать и использовать дополнительные функции (Instancing, Indirect drawing, Per Vertex), но при этом мы не затронем геометрию
Система слоев также изменилась. Читайте об этом в отдельной статье, но если коротко:
Шейдерная нода теперь работает по-другому:
anonymous user login
~3h ago
~6d ago
~6d ago
~7d ago
~20d ago
~1mth ago
~1mth ago
~1mth ago
~1mth ago
~1mth ago