Что такое тесселяция в компьютерной графике

16

В последних играх я заметил что-то, называемое тесселяцией. Включение этой вещи разрушает мою частоту кадров.

Я заметил, что при включении он выглядит как сглаживание.

Может кто-нибудь дать мне дополнительную информацию о том, что именно делает GPU.

Anarach
источник
2
О, дорогой, 2 ответа и нет изображения компьютерной графики в лучшем виде.
joojaa

Ответы:

25

Тесселяция - это техника, которая позволяет генерировать примитивы (треугольники, линии, точки и т. Д.) На видеокарте. В частности, он позволяет вам многократно разделять текущую геометрию на более мелкую сетку.

Это позволяет вам загружать относительно грубую сетку на видеокарту, динамически генерировать больше вершин и треугольников, а затем создавать сетку на экране, которая выглядит намного более гладкой.

Пример тесселяции

Большую часть времени это тесселяция выполняется заново в каждом отдельном кадре, и это может быть причиной того, что ваша частота кадров падает, когда вы включаете это.

Тесселяция выполняется в несколько этапов и ПОСЛЕ вершинного шейдера.

Этапы

Условия для каждого этапа варьируются в зависимости от API. В DirectX это шейдер корпуса, аппаратная тесселяция и доменный шейдер. В OpenGL они называются шейдером управления тесселяцией, генерацией примитивов тесселяции и шейдером оценки тесселяции.

Первый и последний этап являются программируемыми, фактическое тесселяция выполняется аппаратными средствами на этапе фиксированной функции.

В шейдере Tesselation Control вы устанавливаете тип и количество подразделений.

Затем аппаратный тесселятор делит геометрию в соответствии с управляющим шейдером.

Наконец, шейдер оценки тесселяции вызывается для каждой вновь созданной вершины. В этом шейдере вы устанавливаете тип примитива, который вы хотите сгенерировать, и как расставляются вершины, и многое другое. Этот шейдер также может использоваться для выполнения всех видов вычислений на каждую вершину, как и вершинный шейдер. Он гарантированно вызывается хотя бы один раз для каждой сгенерированной вершины.

Если вы хотите продолжить работу с примитивами, вы можете добавить шейдер Geometry.

Dragonseel
источник
1
@Nicol Спасибо. Я отредактировал ответ соответственно.
Dragonseel
7

Он активирует 3 этапа в конвейере.

Первый - это шейдер управления тесселяцией (шейдер корпуса в D3D), который смотрит на набор вершин, а затем выводит, как его следует разделить на отдельные треугольники.

Второй этап - фиксированная функция, которая генерирует запрошенные треугольники.

Третий этап - шейдер оценки тесселяции (доменный шейдер в D3D), который запускается для каждой сгенерированной вершины и помещает ее в правильное место на основе барицентрических координат сгенерированной вершины.

Это используется для уровня детализации, чтобы генерировать больше треугольников, когда сетка ближе к камере.

чокнутый урод
источник