Всем мур! Продолжу периодически писать про интересные технологии, которые мы каждый день используем, играя в компьютерные игры. Сегодня на очереди тесселяция. Писать буду человеческим языком, поэтому сразу извиняюсь перед людьми, глубоко погруженными в тему, за возможные неточности.
Что такое тесселляция?
Тесселляция, если обращаться к словарю английского языка, это составление мозаики, замощение. Для компьютерной графики эта технология имеет приблизительно такое же значение - увеличение детализированности геометрической формы посредством изменения ее сетки. Если копать дальше, то каждый полигон (обычно треугольник), разбивается на несколько дополнительных полигонов с возможным их смещением для того, чтобы получающаяся линия лучше соответствовала форме создаваемого объекта, который формируют с помощью сетки.
Технология была на пике популярности в районе 2010 года, когда стали появляться графические ускорители с поддержкой Shader Model 5.0, а OpenGL 4.0 и DirectX11 вышли с поддержкой технологии и требовали наличия аппаратной реализации тесселляции.
В те годы, я помню, все говорили о тесселляции, как сейчас говорят о трассировке лучей, однако мало кто вспомнил, что попытки реализовать технологию в потребительском сегменте предпринимались уже почти 10 лет.
TruForm
Первой картой с поддержкой тесселляции была ATI Radeon 8500, вышедшая в 2001 году. Технология, применявшаяся на карте, получила название TruForm. Она получила поддержку в виде расширения для OpenGL, однако не была внедрена в основной функционал, так как помимо ATI технологию никто особо и не поддержал.
Основной причиной для такого поведения была необходимость создавать модели с учетом последующего использования технологии. То есть нельзя было просто применить технологию на любом объекте - это вызывало графические артефакты, которые "раздували" некоторые участки объекта, поэтому было необходимо размещать специальные метки, которые указывали, какие части объекта обрабатывать тесселляцией, а какие нет.
Помимо разработчиков, которые не особо хотели вкладывать ресурсы и силы в молодую и неизвестную технологию, конкуренты ATI также не сильно спешили выводить на рынок свои альтернативы.
Поэтому взлет технологии TruForm закончился достаточно стремительным падением. Даже сама ATI отказалась от аппаратной реализации технологии, которая вернется в карточки только вместе с серией HD 2000.
Программная тесселляция
Вместе с выходом Shader Model 4.0 многие разработчики стали думать, что тесселляцию удастся реализовать на основе геометрических шейдеров.
Не буду вдаваться в подробности того, как тесселляция может быть реализована на этой основе. Однако скажу, что это возможно, но вызывает ряд проблем, которые приводят к повышению задержек работы шейдера и, в целом, снижения производительности.
Энтузиазм на этот счет не продлился долго, так как пришло осознание того, что геометрические шейдеры - не замена аппаратной реализации и не лучший вариант для реализации тесселляции.
Наследие TruForm
Технология никогда не стояла на месте. Даже когда она не была реализована аппаратно в карточках, ее дорабатывали на программном уровне. Вышло несколько обновлений, которые добавили ряд важных для разработчиков функций.
Аппаратная тесселляция вернулась, как ни странно, в процессоре для Xbox 360 и, в дальнейшем, в Radeon HD 2000 для ПК. Технология была схожа с TruForm, но позволяла куда более гибко настраивать параметры тесселляции. Была реализована как расширение для OpenGL, но, как и раньше, не оказалась в составе основных пакетов как OpenGL, так и DirectX10, потому что Nvidia не оказалась заинтересована во внедрении данной технологии.
Основным недостатком оставалось отсутствие адаптивности, т.е. все объекты подвергались тесселляции в равной степени, а это съедало огромное количество ресурсов и не приносило никаких бонусов для объектов, существенно удаленных от камеры.
Shader Model 5.0
Наконец, вместе с выходом шейдерной модели пятой версии, свет увидела та тесселляция, которая останется с нами надолго. Функция на тот момент так и не получила реализации в основном пакете OpenGL и все еще была доступна в рамках расширения. А вот в DirectX11 шейдеры тесселяции были встроены.
Обновление привнесло больше уровней тесселляции, динамическую тесселляцию, а также некоторые другие улучшения, однако базово функция осталась приблизительно такой же как и раньше.
Наличие данной функции в пакете DirectX11 обязало и Nvidia встроить ее поддержку на аппаратном уровне.
С тех пор тесселляцию в той или иной форме можно встретить во многих игровых проектах.