В графических настройках компьютерных игр часто встречается опция «Тесселяция», от включения которой в современных проектах на первый взгляд картинка особо не меняется, а производительность становится ниже. За что она отвечает, как работает, и в чем смысл этой технологии?
Для многих любителей компьютерных игр не секрет, что выдаваемая на экраны картинка, в случае современных проектов так часто потрясающая воображение, состоит из полигонов. Полигоны — это мелкие треугольники, которые с помощью множества этапов сложной обработки, выполняемых видеокартой, в итоге превращаются в игровую картинку. Качество компьютерной 3D-графики зависит от многих переменных, но за всю ее историю остается неизменным одно правило — чем больше полигонов в кадре, тем детализированнее получается итоговое изображение.
Видеокарты становятся все мощнее с каждым годом, но бесконечно наращивать число полигонов невозможно, так как нужные для них ресурсы — геометрическая производительность и канал шины — у любого графического ускорителя все же ограничены. Именно поэтому потребовалась относительно простая техника увеличения детализации без чрезмерной нагрузки на графический процессор. Ею стала тесселяция.
2001: TruForm от ATI
В начале века, еще до появления техник рельефного текстурирования, единственным способом повысить геометрическую сложность сцены было добавление в нее полигонов, что значительно сказывалось на производительности графических процессоров того времени. Первую технологию, призванную повысить детализацию сцены без чрезмерной нагрузки на ГП в 2001 году внедряет компания ATI. Называется она TruForm, и, по сути, является первой реализацией тесселяции в компьютерных играх.
Обычный треугольник в представлении видеокарты состоит из трех вершин и трех нормалей к ним. Используя информацию от игрового движка, графический процессор создает треугольники, соединяя их вершины. После этого ГП накладывает освещение и тени с помощью нормалей — они показывают, как свет должен отражаться от треугольника.
TruForm работает иначе. После передачи ГП информации о треугольнике, движок начинает разбивать базовый треугольник сеткой из N-патчей, используя в качестве опоры две контрольные точки. Вычисляются они с помощью информации из той самой карты нормалей — ведь именно способ отражения света от объекта указывает его форму и кривизну поверхности. Внутри базового треугольника формируется кривая поверхность из более мелких треугольников, которых в сумме теперь девять. После преобразования поверхности в кривую происходит еще несколько этапов деления на мелкие треугольники — столько, сколько прописано в игровом движке для объекта, частью которого является базовый треугольник.
По сути, TruForm является собственной для ATI реализацией N-патчей, включенной в состав графических API DirectX 8 и OpenGL. Тем не менее, компания первой среди производителей видеокарт доработала блок трансформации и освещения собственного графического процессора, позволив ему выполнять простую по современным меркам тесселяцию поверхностей.
Для качественной работы без графических артефактов TruForm требовал, чтобы нужные полигональные модели в сцене были явно указаны для обработки и изначально разрабатывались с ее учетом — иначе ненужное «округление» могло появиться и у объектов, которые должны быть плоскими.
Патчи с поддержкой технологии получили в основном только крупные известные проекты, такие как: Half-Life, Counter-Strike, Rainbow Six, первая и вторая части Soldier of Fortune, трилогия Quake, Return to Castle Wolfenstein, первые три части Unreal Tournament. Конкурирующая NVIDIA немного позже предложила собственную реализацию N-патчей, не совместимую с ATI, но это решение было распространено еще меньше. Разработчики игр не торопились тратить силы на внедрение технологии, положительные изменения от которой увидели бы только владельцы карт Radeon. В итоге перспективная технология была на несколько лет забыта.
2002: Displacement Mapping от Matrox
С развитием распространившихся после провала TruForm технологий рельефного текстурирования — сначала Bump mapping, затем Normal mapping, и, наконец, Parallax mapping, — стало возможно визуально добавлять плоским поверхностям объема и делать их «бугристыми» без непосредственного добавления новой геометрии. Простоту использования в играх дополняло то, что технологии этого типа работают с помощью пиксельного шейдера, не требуя других специальных блоков в видеокарте. Однако реального увеличения полигонов в кадре с такими техниками не происходит, и увеличить детализацию с их помощью можно далеко не для любого объекта в сцене.
В 2002 году компания Matrox Graphics, тогда еще являющаяся игроком рынка дискретных видеокарт наряду с NVIDIA и ATI, представила новую технологию Displacement Mapping. В отличие от вышеописанных видов, Displacement Mapping использует технологию N-патчей. Но не как TruForm, а по-другому: плоская поверхность разбивается на множество треугольников, а затем с помощью заранее заданной карты смещений «вытягивается» в нужных местах согласно ей, создавая объемный объект.
Детализация объектов в демо-сценах, созданных с помощью Displacement Mapping, была великолепной для своего времени при скромном потреблении ресурсов. Аппаратной поддержкой технологии обладал выпущенный в 2002 году графический ускоритель Matrox Parhelia-512. Однако к этому моменту компания уже была в незавидном положении — по чистой производительности ее видеокарты были медленнее конкурентов.
Немалая цена, проблемы с драйверами и неполное соответствие Parhelia-512 стандартам DirectX 9.0 стали последними каплями, упавшими на камень производителя графического оборудования — от дальнейшей разработки собственных ГП компания отказалась. Несмотря на то, что описание перспективной технологии было у конкурентов, никто из них тогда не взялся за ее собственную реализацию. Вследствие этого Displacement Mapping так и не появился в игровой графике тех лет.
2005: тесселяция в Xbox 360
Графический процессор приставки Xbox 360 под кодовым названием «Xenos» впервые получил поддержку тесселяции в том виде, в котором она применяется и в наши дни.
Разработка графического процессора была поручена компании ATI, которая к тому времени уже делала наброски архитектуры своей первой серии видеокарт с поддержкой DirectX10 и универсальными шейдерными процессорами — Radeon HD2000. Учитывая ограниченную вычислительную способность консольного чипа, компания разработала для него аппаратный блок тесселяции: ведь помимо насыщения геометрии уже имеющейся сцены, грамотная тесселяция может использоваться для воссоздания геометрии определенного уровня из меньшего количества исходной. Для приставки игры пишутся с учетом «железа», поэтому возможности тесселятора были весьма кстати — в отличие от компьютерных проектов, где разработчики не горели желанием оптимизировать проекты под одного из производителей графических чипов.
Графическая часть Xbox 360 получилась достаточно успешной. В 2007 году ATI интегрировали похожий блок тесселяции и в десктопные видеокарты серии HD2000. Тесселятор в графических процессорах линейки программируемый, и может использовать кроме N-патчей и другие типы поверхностей: патчи Безье, B-Spline, NURBs и Subdivision Surfaces. Это дает больше выбора разработчикам игр, для корректной работы тесселяции необходимо было лишь написать необходимый вершинный шейдер.
С таким блоком тесселяции можно было использовать и Displacement Mapping. Но на практике все оказалось не так-то просто: разработчики игровых движков не были заинтересованы во внедрении технологии в компьютерные игры, потому что у графических процессоров NVIDIA подобного блока не было — история повторилась. Подобный программируемый тесселятор был и в следующих сериях карт серий Radeon HD3000 и HD4000, но в итоге этот блок так и не был задействован в реальных играх, за исключением собственных демок ATI.
2009: тесселяция как стандарт DirectX 11
После успешного старта Xbox 360 компания Microsoft стала задумываться о внедрении поддержки тесселяции в стандарт графического API DirectX. Поддержка тесселяции появилась в DirectX 11 в 2009 году, одновременно с выходом знаменитой ОС Windows 7.
Реализация в старых картах Radeon не была совместима с API Microsoft, поэтому в плане поддержки этой технологии они остались не у дел. Но ATI вовремя подсуетилась, и к выходу новой операционной системы выпустила новую линейку видеокарт серии HD5000 с обновленным тесселятором, полностью совместимым с DirectX 11. NVIDIA запустила линейку совместимых видеокарт серии GTX400 в 2010 году. В 2012 году совместимость с новым API получила встроенная графика Intel.
Для удобства работы технологии в стандарт DirectX 11 были добавлены новые типы шейдеров: Hull и Domain. Тесселяция в новом API позволяет использовать еще более широкий набор методов и алгоритмов, чем в ранней реализации ATI — поддерживаются N-патчи, патчи Безье, Displacement Mapping, Catmull-Clark Subdivison, адаптивная тесселяция с применением LOD и прочие методы.
В 2010 году аналогичная поддержка тесселяции появилась и в другом графическом API — OpenGL 4.0. Естественно, что поддерживают технологию и современные «наследники» этих графических API: DirectX 12 и Vulkan.
При всем многообразии применяемых методов, суть тесселяции не изменилась со времен TruForm: разбиение существующих полигонов на более мелкие с целью увеличить детализацию моделей в 3D-сцене. Это все так же самый «легкий» для графического оборудования способ проделать аналогичную работу. Помимо этого, грамотная тесселяция помогает сэкономить графические ресурсы при одинаковом или лучшем уровне картинки, чем без использования этой технологии.
Влияние на производительность
У первых графических процессоров с поддержкой тесселяции включение последней отнимало достаточно много производительности. Особенно этим страдали «пионеры» серии Radeon HD5000 — первый блок тесселяции, совместимый с DirectX 11, был довольно медленным и часто просаживал производительность в первых играх с ее поддержкой до некомфортных значений. Серия карт Radeon HD6000 получила улучшенный блок тесселяции, но значительный рывок в этом плане совершила только следующая серия карт на новой графической архитектуре AMD GCN — HD7000, увидевшая свет в 2012 году.
У первых карт NVIDIA с поддержкой новой технологии — GeForce GTX 400 и 500 серии на архитектуре Fermi — блок тесселяции был быстрее, чем у конкурирующих линеек Radeon. Но принимая во внимание рывок тесселятора в Radeon HD7000, для GTX 600 серии на новой графической архитектуре Kepler тоже был разработан новый, более производительный блок тесселяции. Начиная с видеокарт этих поколений, тесселяция перестала быть крайне трудоемкой задачей для производительных ГП обеих компаний в большинстве игровых проектов.
На сегодняшний день тесселяция стала стандартной техникой для многих игровых движков, и в некоторых играх она работает по умолчанию без опции отключения. В других же играх такая опция есть, и ее отключение может как не добавлять производительности вообще, так и заметно «бустить» FPS, особенно на бюджетных видеокартах. В чем же подвох?
Дело в том, в разных играх используются разные объекты для тесселяции. В одних обрабатывается большее количество объектов, в других — меньшее, в третьих — лишь определенные, например только колеса машин и прочие круглые предметы. К тому же, и сама тесселяция бывает разного уровня — от x2 до x64. То есть один и тот же базовый треугольник может быть разбит на более мелкие от 2 до 64 раз, это значение задает движок игры. В играх 2010-х годов нередко встречались настройки уровня тесселяции, сейчас же их практически не встретить — иногда эта настройка зависит от других графических опций, но чаще всего управление ею отсутствует вообще.
В современных проектах тесселяция может как почти не влиять на производительность, так и забирать ее часть. Но таких провалов кадровой частоты, как ранее, она не вызывает — одна из самых «тяжелых», реализация тесселяции на движке 4A Engine в игре Metro: Exodus, понижает частоту кадров на 15–25%, в зависимости от сцены. В большинстве игр и такого падения от активации технологии нет — в среднем, оно на уровне около 5–10%, хотя для самых бюджетных карт может составлять и больше.
Бенчмарки
Самым известным бенчмарком с поддержкой и явной визуализацией тесселяции, безусловно, является Unigine Heaven. Он был презентован на выходе Windows 7, и является первым графическим тестом с поддержкой API DirectX 11.
Несмотря на почтенный возраст, бенчмарк до сих пор показывает вполне неплохую графику. Но, что самое главное, в нем есть инструменты активации и регулирования уровня тесселяции в режиме реального времени. За счет этого можно оценить вносимые ей улучшения графики, меняя параметры и получая изменения прямо «на лету».
К тому же, имеется специальный режим включения сетки — при его задействовании края полигонов очерчиваются. Комбинируя с этим режимом инструменты изменения уровня тесселяции, можно наглядно наблюдать, как сильно растет геометрическая сложность сцены с повышением ее уровня.
3DMark 11 и последняя версия теста 3DMark без цифрового префикса тоже используют тесселяцию. Но в режиме реального времени ее параметры изменить не получится — для этого нужно остановить тест и перейти в его расширенные настройки. К тому же, тесты серии сфокусированы не только на тесселяции, поэтому в динамике существенную разницу в картинке с разными настройками будет заметить достаточно сложно.
Однако тесты серии гораздо лучше и комплексно оценивают производительность современных видеокарт, чем Unigine Heaven, который для актуальных моделей среднего класса достаточно легок даже на максимальных настройках графики.
Примеры в играх
Так как же выглядит «волшебная» тесселяция в играх? Часто в случае с современными проектами заметить ее влияние сложно, так как актуальные игры и без ее применения выдают достаточно насыщенные полигонами кадры. В динамике эта разница становится еще менее различимой, поэтому обратимся к статическим изображениям — скриншотам популярных игр, где управление тесселяцией отдано на откуп пользователю.
Metro: Exodus. Тесселяцию можно включить или отключить, управления уровнями не предусмотрено. Итак, сначала кадр без тесселяции, затем с тесселяцией:
Первое, что бросается в глаза — «округлившееся» колесо грузовика. При детальном рассмотрении становится заметно, что тесселяция применяется и на земле: она становится более неровной и бугристой, что лучше всего заметно в правой части кадра. На остальных объектах в кадре технология либо не применяется, либо ее влияние малозаметно.
Sniper Elite 3. Кадр сначала с отключенной, затем со включенной технологией.
Становятся заметны более гладкие края автомобильных шин, бочки и особенно камней под ногами — это тесселяция в деле. Но обратите внимание на следующие скриншоты:
Здесь тесселяция заметна только на камнях на земле. Несмотря на сложное строение скал, при включенной и отключенной тесселяции они выглядят одинаково — то есть рисуется такая непростая картинка без использования этой технологии.
В отличие от прошлых игр, в Red Dead Redemption 2 есть управление уровнем тесселяции. Правда, отключить ее полностью нельзя — доступно лишь переключение между низким, средним и высоким уровнем. Согласно описанию опции в графических настройках, тесселяция в игре применяется лишь для деревьев, следов на снегу, грязи и воды.
И действительно, негусто: по ходу игры не удалось обнаружить отличия между низким и высоким уровнем тесселяции, если не искать специально описанные в настройках объекты. Пришлось так и поступить, для начала посмотрим на дерево при низком и высоком уровне тесселяции:
Ствол дерева становится объемнее и немного детальнее, но каких-либо значимых изменений в картинке не происходит. Что ж, тогда обратимся ко следам на снегу, может хоть по ним будет видна более значимая разница. Высокий уровень тесселяции:
На высоком уровне исчезают присутствующие ранее артефакты, и следы становятся наиболее гладкими, но на этом все.
Заключение
Тесселяция — современная графическая технология, призванная увеличить количество геометрии в сцене и сделать ее более достоверной. В играх в первую очередь она используется для создания объектов с округлыми формами — колес, камней, частей тел персонажей и прочего. Помимо этого, тесселяция часто применяется для создания ландшафта и эффектов сложных поверхностей, вроде водной.
С помощью бенчмарка Unigine Heaven можно убедиться, насколько сильно можно преобразить виртуальные миры благодаря тандему тесселяции с Displacement Mapping. Почему же такой разительной разницы при активации технологии даже спустя 13 лет после появления бенчмарка нет в современных играх?
Дело в том, что разработчики игровых проектов чаще всего все также предпочитают рисовать геометрию вручную для большинства внутриигровых объектов. Происходит это и благодаря появившимся в последние годы более производительным видеокартам, которые значительно прибавили в мощности. В итоге тесселяция в современных играх используется гораздо менее активно, чем могла бы — в основном, лишь для малой части объектов игровых миров.
В современных играх нечасто можно найти настройки работы тесселяции, а во многих проектах она и вовсе неотключаема. Из громкой новинки со временем технология стала бойцом невидимого фронта: ее «шестеренки» тихо крутятся внутри современных графических движков, успешно делая свою работу: круглое — круглым, а угловатое — гладким.