Поправьте меня, если я ошибаюсь, но задания Geometry Shader и Tessellation Shader должны генерировать вершины в графическом конвейере. Что я хотел бы знать, так это то, как они отличаются и когда я должен использовать один поверх другого?
Поправьте меня, если я ошибаюсь, но задания Geometry Shader и Tessellation Shader должны генерировать вершины в графическом конвейере. Что я хотел бы знать, так это то, как они отличаются и когда я должен использовать один поверх другого?
Ответы:
На самом деле нет, «работа» геометрического шейдера (GS) - это первичная оценка.
Геометрические шейдеры могут быть мозаичными, но они ограничены: а) верхними границами числа элементов вывода в процессе и б) выполнением в одном шейдере ... конечно, создание шейдеров облегчает вторую проблему, но общие геометрические шейдеры более эффективны при первичной оценке и / или интерполяции значений, чем при тесселяции.
Для сравнения, тесселяционные шейдеры (TS) были введены специально для выполнения уплотнения геометрии, поэтому они хорошо работают, устойчивы к постоянно расширяющемуся массиву алгоритмов (каламбур) и менее ограничены выходными ограниченными буферами.
Даниэль Ракос написал хорошую статью об эволюции GS / TS: история аппаратной тесселяции
Когда применять каждый из них, это случай «используйте правильный инструмент для работы», и вот как: построить черновой черновой конвейер без тесселятора, чтобы получить правильные оценки примитивов в VS / GS / FS. Отдельно поместите тесселяцию на основе вида или сцены, затем вставьте TS перед GS, чтобы уплотнить примитивы, которые затем передаются в уже спроектированный GS. Если вы хотите попробовать другой TS, то создайте альтернативу и поменяйте ее местами в конвейере ... вы даже можете использовать экземплярный GS для динамического выбора правильного TS на основе свойств примитива!