Тесселяция против геометрического шейдера

11

Поправьте меня, если я ошибаюсь, но задания Geometry Shader и Tessellation Shader должны генерировать вершины в графическом конвейере. Что я хотел бы знать, так это то, как они отличаются и когда я должен использовать один поверх другого?

Цезарь
источник
6
Я чувствую себя слишком ленивым, чтобы написать полный ответ, но суть в том, что Geometry Shader для очень маленького фиксированного уровня усиления, где стадии тесселяции предназначены для массивного, динамического усиления полигонов
MickLH

Ответы:

14

На самом деле нет, «работа» геометрического шейдера (GS) - это первичная оценка.

Геометрические шейдеры могут быть мозаичными, но они ограничены: а) верхними границами числа элементов вывода в процессе и б) выполнением в одном шейдере ... конечно, создание шейдеров облегчает вторую проблему, но общие геометрические шейдеры более эффективны при первичной оценке и / или интерполяции значений, чем при тесселяции.

Для сравнения, тесселяционные шейдеры (TS) были введены специально для выполнения уплотнения геометрии, поэтому они хорошо работают, устойчивы к постоянно расширяющемуся массиву алгоритмов (каламбур) и менее ограничены выходными ограниченными буферами.

Даниэль Ракос написал хорошую статью об эволюции GS / TS: история аппаратной тесселяции

Когда применять каждый из них, это случай «используйте правильный инструмент для работы», и вот как: построить черновой черновой конвейер без тесселятора, чтобы получить правильные оценки примитивов в VS / GS / FS. Отдельно поместите тесселяцию на основе вида или сцены, затем вставьте TS перед GS, чтобы уплотнить примитивы, которые затем передаются в уже спроектированный GS. Если вы хотите попробовать другой TS, то создайте альтернативу и поменяйте ее местами в конвейере ... вы даже можете использовать экземплярный GS для динамического выбора правильного TS на основе свойств примитива!

JasonInVegas
источник