Этап тесселятора (ts)tessellator (ts) stage

2 ответы

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

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

Этап тесселятора (ts)tessellator (ts) stage

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

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

Этап тесселятора (ts)tessellator (ts) stage

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

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

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

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

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

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

22

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

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

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

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

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

6

Tesselation Evaluation Shader

Обратите внимание, что при тесселляции треугольников и четырехугольников (triangles и quads) явно задается разбиение для каждого
из ребер исходного примитива. Это позволяет избегать разрывов при выводе большого числа патчей — необходимо только назначать одинаковые
внешние уровни разбиения для ребер, принадлежащих сразу двум примитивам (см

рис 10).

Этап тесселятора (ts)tessellator (ts) stage

Рис 10. Согласование уровней тесселляции для набора патчей.

Tesselation evaluation shader (GL_TESS_EVALUATION_SHADER) вызывается отдельно для каждой вершины созданного тесселлятором примитива.
При этом он получает координаты вершины ((u,v) или (u,v,w)).
Шейдер имеет доступ сразу ко всем вершинам исходного патча, к uniform-переменными и текстурам.

Этому типу шейдера доступны следующие стандартные входные переменные:

  • gl_in выходные значения для всех вершин патча от tessellation control shader‘а (gl_Position, gl_PointSize gl_ClipDistance);
  • gl_PatchVerticesIn — число вершин исходного патча;
  • gl_PrimitiveID — номер примитива (в текущей команде glDraw*);
  • gl_TessCoord (u,v,w) — трехмерный вектор с координатами, идентифицирующими положение вершины в патче;
  • gl_TessLevelInner — массив внутренних уровней тесселляции;
  • gl_TessLevelOuter — массив внешних уровней тесселляции.

Также шейдер могут получать входные данные от tessellation control shader‘а, они описываются как входные
(т.е. имеют спецификатор in) и описаны как массивы. Также шейдеру доступны входные переменные типа patch, задающие значения
для всего примитива.

Результаты своей работы шейдер записывает с стандартные выходные переменные —
gl_Position gl_PointSize и gl_ClipDistance.

Ниже приводится пример простого tessellation evalutaion shader‘а.

High dynamic range (HDR)

Эффект, часто используемый в игровых сценах с контрастным освещением. Если одна область экрана является очень яркой, а другая, наоборот, затемненной, многие детали в каждой из них теряются, и они выглядят монотонными. HDR добавляет больше градаций в кадр и позволяет детализировать сцену. Для его применения обычно приходится работать с более широким диапазоном оттенков, чем может обеспечить стандартная 24-битовая точность. Предварительные просчеты происходят в повышенной точности (64 или 96 бит), и лишь на финальной стадии изображение подгоняется под 24 бита.

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

Bloom

Bloom нередко применяется совместно с HDR, а еще у него есть довольно близкий родственник – Glow, именно поэтому эти три техники часто путают

.

Bloom симулирует эффект, который можно наблюдать при съемке очень ярких сцен обычными камерами. На полученном изображении кажется, что интенсивный свет занимает больше объема, чем должен, и «залазит» на объекты, хотя и находится позади них. При использовании Bloom на границах предметов могут появляться дополнительные артефакты в виде цветных линий.

Film Grain

Зернистость – артефакт, возникающий в аналоговом ТВ при плохом сигнале, на старых магнитных видеокассетах или фотографиях (в частности, цифровых изображениях, сделанных при недостаточном освещении). Игроки часто отключают данный эффект, поскольку он в определенной мере портит картинку, а не улучшает ее. Чтобы понять это, можно запустить Mass Effect в каждом из режимов. В некоторых «ужастиках», например Silent Hill, шум на экране, наоборот, добавляет атмосферности.

Motion Blur

Motion Blur – эффект смазывания изображения при быстром перемещении камеры. Может быть удачно применен, когда сцене следует придать больше динамики и скорости, поэтому особенно востребован в гоночных играх. В шутерах же использование размытия не всегда воспринимается однозначно. Правильное применение Motion Blur способно добавить кинематографичности в происходящее на экране.

Влияние на производительность

Чтобы выяснить, как включение тех или иных опций сказывается на производительности, мы воспользовались игровым бенчмарком Heaven DX11 Benchmark 2.5. Все тесты проводились на системе Intel Core2 Duo e6300, GeForce GTX460 в разрешении 1280×800 точек (за исключением вертикальной синхронизации, где разрешение составляло 1680×1050).

Как уже упоминалось, анизо­тропная фильтрация практически не влияет на количество кадров. Разница между отключенной анизотропией и 16x составляет всего лишь 2 кадра, поэтому рекомендуем ее всегда ставить на максимум.

Сглаживание в Heaven Benchmark снизило fps существеннее, чем мы того ожидали, особенно в самом тяжелом режиме 8x. Тем не менее, поскольку для ощутимого улучшения картинки достаточно и 2x, советуем выбирать именно такой вариант, если на более высоких играть некомфортно.

Тесселяция в отличие от предыдущих параметров может принимать произвольное значение в каждой отдельной игре. В Heaven Benchmark картинка без нее существенно ухудшается, а на максимальном уровне, наоборот, становится немного нереалистичной. Поэтому следует устанавливать промежуточные значения – moderate или normal.

Для вертикальной синхронизации было выбрано более высокое разрешение, чтобы fps не ограничивался вертикальной частотой развертки экрана. Как и предполагалось, количество кадров на протяжении почти всего теста при включенной синхронизации держалось четко на отметке 20 или 30 кадров/с. Это связано с тем, что они выводятся одновременно с обновлением экрана, и при частоте развертки 60 Гц это удается сделать не с каждым импульсом, а лишь с каждым вторым (60/2 = 30 кадров/с) или третьим (60/3 = 20 кадров/с). При отключении V-Sync число кадров увеличилось, однако на экране появились характерные артефакты. Тройная буферизация не оказала никакого положительного эффекта на плавность сцены. Возможно, это связано с тем, что в настройках драйвера видеокарты нет опции принудительного отключения буферизации, а обычное деактивирование игнорируется бенчмарком, и он все равно использует эту функцию.

Если бы Heaven Benchmark был игрой, то на максимальных настройках (1280×800; AA – 8x; AF – 16x; Tessellation Extreme) в нее было бы некомфортно играть, поскольку 24 кадров для этого явно недостаточно. С минимальной потерей качества (1280×800; AA – 2x; AF – 16x, Tessellation Normal) можно добиться более приемлемого показателя в 45 кадров/с.

SSAO

Ambient occlusion – техника, применяемая для придания сцене фотореалистичности за счет создания более правдоподобного освещения находящихся в ней объектов, при котором учитывается наличие поблизости других предметов со своими характеристиками поглощения и отражения света.

Screen Space Ambient Occlusion является модифицированной версией Ambient Occlusion и тоже имитирует непрямое освещение и затенение. Появление SSAO было обусловлено тем, что при современном уровне быстродействия GPU Ambient Occlusion не мог использоваться для просчета сцен в режиме реального времени. За повышенную производительность в SSAO приходится расплачиваться более низким качеством, однако даже его хватает для улучшения реалистичности картинки.

SSAO работает по упрощенной схеме, но у него есть множество преимуществ: метод не зависит от сложности сцены, не использует оперативную память, может функционировать в динамичных сценах, не требует предварительной обработки кадра и нагружает только графический адаптер, не потребляя ресурсов CPU.

Тесселляция поверхности Безье

Одним из наиболее известных примеров сплайновый поверхностей является кубическая поверхность Безье. Она задается набором из 16 контрольных
точек pij и по ним для каждого значения параметров u и v из отрезка следующая формула задает
соответствующую точку на поверхности:

Здесь через Bi3 обозначен полином Бернштейна

Для вывода поверхности Безье в качестве патча выступает набор из 16 контрольных точек, tessellation control шейдер
применяет матрицы преобразований к контрольным точкам, а tessellation evaluation шейдер по параметрам осуществляет вычисление
координат.

Ниже приводятся два скриншота, соответствующие выводу поверхности Безье с разными уровнями тесселляции.

Этап тесселятора (ts)tessellator (ts) stage

Этап тесселятора (ts)tessellator (ts) stage

Рис 11. Тесселляция поверхности Безье.

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS

Игра на ПК в числе прочих дает одно важное преимущество: возможность настроить картинку «под себя», найти баланс между производительностью и качеством графики. Есть, правда, загвоздка: многие игроки не до конца понимают, на что влияет тот или иной параметр в настройках

Рассказываем, что к чему.

Думаю, с понятием разрешения знакомы уже более-менее все игроки, но на всякий случай вспомним основы. Все же, пожалуй, главный параметр графики в играх.

Изображение, которое вы видите на экране, состоит из пикселей.

Разрешение — это количество пикселей в строке, где первое число — их количество по горизонтали, второе — по вертикали. В Full HD эти числа — 1920 и 1080 соответственно.

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

Влияние на производительность

Очень большое.Увеличение разрешения существенно снижает производительность.

Именно поэтому, например, даже топовая RTX 2080 TI неспособна выдать 60 кадров в 4K в некоторых играх, хотя в том же Full HD счетчик с запасом переваливает за 100.

Снижение разрешения — один из главных способов поднять FPS. Правда, и картинка станет ощутимо хуже.

В некоторых играх (например, в Titanfall) есть параметр так называемого динамического разрешения. Если включить его, то игра будет в реальном времени автоматически менять разрешение, чтобы добиться заданной вами частоты кадров.

Если частота кадров в игре существенно превосходит частоту развертки монитора, на экране могут появляться так называемые разрывы изображения.

Возникают они потому, что видеокарта отправляет на монитор больше кадров, чем тот может показать за единицу времени, а потому картинка рендерится словно «кусками».

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

Есть и еще одно полезное свойство этой опции — она помогает снизить нагрузку на «железо» — вместо 200 потенциальных кадров ваша видеокарта будет отрисовывать всего 60, а значит, загружаться не на полную и греться гораздо меньше.

Поэтому играть со включенной вертикальной синхронизацией в мультипеере противопоказано. Кроме того, если ваш компьютер «тянет» игру при частоте ниже, чем заветные 60 FPS, Vsync может автоматически «лочиться» уже на 30 FPS, что приведет к неслабым таким лагам.

Лучший способ бороться с разрывами изображения на сегодняшний день — купить монитор с поддержкой G-Sync или FreeSync и соответствующую видеокарту Nvidia или AMD. Ни разрывов, ни инпут-лага.

Влияние на производительность

В общем и целом — никакого.

Если нарисовать из квадратных по своей природе пикселей ровную линию, она получится не гладкой, а с так называемыми «лесенками». Особенно эти лесенки заметны при низких разрешениях. Чтобы устранить этот неприятный дефект и сделать изображения более четким и гладким, и нужно сглаживание.

Здесь и далее — слева изображение с отключенной графической опцией (или установленной на низком значении), справа — с включенной (или установленной на максимальном значении).

Технологий сглаживания несколько, вот основные:

  • Суперсэмплинг (SSAA) — самое эффективное сглаживание, но вместе с тем — жутко требовательное к ресурсам. Работает оно просто: ваша видеокарта рендерит картинку в гораздо более высоком разрешении, чем задано в настройках, а потом «ужимает» его обратно. Чем выше это значение, тем лучше сглаживание и тем выше нагрузка на компьютер. Грубо говоря, при значении SSAA 4X ваш ПК будет вынужден за одно и то же время обсчитать одну и ту же сцену четыре раза, а не один.
  • MSAA — мультисемплинг. По эффективности схож с SSAA, но работает совершенно по-другому (объяснить его простыми словами довольно сложно, но это, пожалуй, и не нужно), а потому менее требователен к ресурсам. Если компьютер позволяет, именно это сглаживание стоит пробовать включать в первую очередь. Картинка лишь едва-едва потеряет в четкости, зато лесенки почти исчезнут.
  • FXAA (Быстрое сглаживание) — более простой способ сглаживания. На всю картинку попросту накидывается размытие. Вообще не влияет на производительность, но добавляет в изображение очень много «мыла». В большинстве случаев уж лучше терпеть «лесенки», но тут кому как.
  • TXAA («Временное сглаживание») / MLAA («Морфологическое сглаживание») — то же самое, что MSAA, но еще эффективнее. Первый тип поддерживается видеокартами Nvidia, второй — AMD. Если в игре есть один из этих вариантов, лучше всего использовать именно его. Почти идеальный баланс между эффективностью и производительностью.