Объем тесселяции моделей что это
Объем тесселяции моделей что это
Думаю, с понятием разрешения знакомы уже более-менее все игроки, но на всякий случай вспомним основы. Все же, пожалуй, главный параметр графики в играх.
Изображение, которое вы видите на экране, состоит из пикселей. Разрешение — это количество пикселей в строке, где первое число — их количество по горизонтали, второе — по вертикали. В Full HD эти числа — 1920 и 1080 соответственно. Чем выше разрешение, тем из большего количества пикселей состоит изображение, а значит, тем оно четче и детализированнее.
Влияние на производительность
Очень большое.Увеличение разрешения существенно снижает производительность. Именно поэтому, например, даже топовая RTX 2080 TI неспособна выдать 60 кадров в 4K в некоторых играх, хотя в том же Full HD счетчик с запасом переваливает за 100. Снижение разрешения — один из главных способов поднять FPS. Правда, и картинка станет ощутимо хуже.
В некоторых играх (например, в Titanfall) есть параметр так называемого динамического разрешения. Если включить его, то игра будет в реальном времени автоматически менять разрешение, чтобы добиться заданной вами частоты кадров.
Вертикальная синхронизация
Если частота кадров в игре существенно превосходит частоту развертки монитора, на экране могут появляться так называемые разрывы изображения. Возникают они потому, что видеокарта отправляет на монитор больше кадров, чем тот может показать за единицу времени, а потому картинка рендерится словно «кусками».
Вертикальная синхронизация исправляет эту проблему. Это синхронизация частоты кадров игры с частотой развертки монитора. То если максимум вашего монитора — 60 герц, игра не будет работать с частотой выше 60 кадров в секунду и так далее.
Есть и еще одно полезное свойство этой опции — она помогает снизить нагрузку на «железо» — вместо 200 потенциальных кадров ваша видеокарта будет отрисовывать всего 60, а значит, загружаться не на полную и греться гораздо меньше.
Впрочем, есть у Vsync и недостатки. Главная — очень заметный «инпут-лаг», задержка между вашими командами (например, движениями мыши) и их отображением в игре.
Поэтому играть со включенной вертикальной синхронизацией в мультипеере противопоказано. Кроме того, если ваш компьютер «тянет» игру при частоте ниже, чем заветные 60 FPS, Vsync может автоматически «лочиться» уже на 30 FPS, что приведет к неслабым таким лагам.
Лучший способ бороться с разрывами изображения на сегодняшний день — купить монитор с поддержкой G-Sync или FreeSync и соответствующую видеокарту Nvidia или AMD. Ни разрывов, ни инпут-лага.
Влияние на производительность
В общем и целом — никакого.
Сглаживание(Anti-aliasing)
Если нарисовать из квадратных по своей природе пикселей ровную линию, она получится не гладкой, а с так называемыми «лесенками». Особенно эти лесенки заметны при низких разрешениях. Чтобы устранить этот неприятный дефект и сделать изображения более четким и гладким, и нужно сглаживание.
Здесь и далее — слева изображение с отключенной графической опцией (или установленной на низком значении), справа — с включенной (или установленной на максимальном значении).
Технологий сглаживания несколько, вот основные:
Влияние на производительность
От ничтожного (FXAA) до колоссального (SSAA). В среднем — умеренное.
Качество текстур
Один из самых важных параметров в настройках игры. Поверхности всех предметов во всех современных трехмерных играх покрыты текстурами, а потому чем выше их качество и разрешение — тем четче, реалистичнее картинка. Даже самая красивая игра с ультра-низкими текстурами превратится в фестиваль мыловарения.
Влияние на производительность
Если в видеокарте достаточно видеопамяти, то практически никакого. Если же ее не хватает, вы получите ощутимые фризы и тормоза. 4 гигабайт VRAM хватает для подавляющего числа современных игр, но лучше бы в вашей следующей видеокарте памяти было 8 или хотя бы 6 гигабайт.
Анизотропная фильтрация
Анизотропная фильтрация, или фильтрация текстур, добавляет поверхностям, на которые вы смотрите под углом, четкости. Особенно ее эффективность заметна на удаленных от игрока текстурах земли или стен.
Чем выше степень фильтрации, чем четче будут поверхности в отдалении.
Этот параметр влияет на общее качество картинки довольно сильно, но систему при этом практически не нагружает, так что в графе «фильтрация текстур» советуем всегда выставлять 8x или 16x. Билинейная и трилинейная фильтрации уступают анизотропной, а потому особенного смысла в них уже нет.
Влияние на производительность
Тесселяция
Технология, буквально преображающая поверхности в игре, делающая их выпуклыми, рельефными, натуралистичными. В общем, тесселяция позволяет отрисовывать гораздо более геометрически сложные объекты. Просто посмотрите на скриншоты.
Влияние на производительность
Зависит от игры, от того, как именно движок применяет ее к объектам. Чаще всего — среднее.
Качество теней
Все просто: чем выше этот параметр, тем четче и подробнее тени, отбрасываемые объектами. Добавить тут нечего. Иногда в играх также встречается параметр «Дальность прорисовки теней» (а иногда он «вшит» в общие настройки). Тут все тоже понятно: выше дальность — больше теней вдалеке.
Влияние на производительность
Зависит от игры. Чаще всего разница между низкими и средними настройками не столь велика, а вот ультра-тени способны по полной загрузить ваш ПК, поскольку в этом случае количество объектов, отбрасывающих реалистичные тени, серьезно вырастает.
Глобальное затенение (Ambient Occlusion)
Один из самых важных параметров, влияющий на картинку разительным образом. Если вкратце, то AO помогает имитировать поведения света в трехмерном мире — а именно, затенять места, куда не должны попадать лучи: углы комнат, щели между предметами и стенами, корни деревьев и так далее.
Существует два основных вида глобального затенения:
SSAO (Screen space ambient occlusion). Впервые появилось в Crysis — потому тот и выглядел для своего времени совершенно фантастически. Затеняются пиксели, заблокированные от источников света.
HBAO (Horizon ambient occlusion). Работает по тому же принципу, просто количество затененных объектов и зон гораздо больше, чем при SSAO.
Влияние на производительность
Глубина резкости (Depth of Field)
То самое «боке», которое пытаются симулировать камеры большинства современных объектов. В каком-то смысле это имитация особенностей человеческого зрения: объект, на который мы смотрим, находится в идеальном фокусе, а объекты на фоне — размыты. Чаще всего глубину резкости сейчас используют в шутерах: обратите внимание, что когда вы целитесь через мушку, руки персонажа и часть ствола чаще всего размыты.
Впрочем, иногда DoF только мешает — складывается впечатление, что у героя близорукость.
Влияние на производительность
Целиком и полностью зависит от игры. От ничтожного до довольно сильного (как, например, в Destiny 2).
Bloom (Свечение)
Этот параметр отвечает за интенсивность источников света в игре. Например, с включенным Bloom, свет, пробивающийся из окна в помещение, будет выглядеть куда ярче. А солнце создавать натуральные «засветы». Правда, некоторые игры выглядят куда реалистичнее без свечения — тут нужно проверять самому.
Влияние на производительность
Чаще всего — низкое.
Motion Blur (Размытие в движении)
Motion Blur помогает передать динамику при перемещениях объекта. Работает он просто: когда вы быстро двигаете камерой, изображение начинает «плыть». При этом главный объект (например, руки персонажа с оружием) остается четким.
Тесселяция
Содержание
Тесселяция и компьютерные модели
В компьютерной графике, так называется технология с помощью которой возможно увеличить количество полигонов в полигональной трёхмерной модели, используя кривые Безье. При этом каждый полигон модели разбивается на заданное число связанных полигонов, которые выстраиваются в соответствии с общим направлением поверхности модели. Таким путём можно сначала создать простую модель, а затем быстро и просто повысить её детализацию. Такой метод обычно используют для рендеринга в реальном времени, где на модель накладываются (так называемые треугольники) который иногда называют триангуляцией. Тесселяция является одной из основных особенностей DirectX 11 и OpenGL.
Тесселяция в природе
Базальтовые потоки лавы, часто демонстрируют столбчатые сращивания в результате сокращения сил, по мере остывания лавы образуются трещины. Обширные сети трещин образуют тесселяцию.
См. также
Ссылки
Полезное
Смотреть что такое «Тесселяция» в других словарях:
Direct3D 11 — Стиль этой статьи неэнциклопедичен или нарушает нормы русского языка. Статью следует исправить согласно стилистическим правилам Википедии. Direct3D 11 (D3D11) компонент интерфейса программирования приложений (англ. … Википедия
Radeon R600 — Графический процессор (GPU) под кодовым названием Radeon R600, лежащий в основе серий видеокарт Radeon HD 2000/3000 и FireGL 2007, разработан корпорацией ATI Technologies. Видеокарты серии HD 2000 были выпущены для конкуренции с видеокартами… … Википедия
Stone Giant — Тип графический бенчмарк, технологическая демонстрация Разработчики BitSquid, Fatshark Операционная система Microsoft Windows Языки интерфейса английский Первый выпуск 21 апреля 2010 года … Википедия
Гексагональная решётка — Треугольная тесселяция. Вершины формируют шестиугольную решётку с горизонтальными рядами, с треугольниками, указывающими вверх и вниз. Есть три способа сгруппировать треугольники 6 на 6, чтобы сформировать шестиугольную тесселяцию. В каждом… … Википедия
Графический конвейер — Графический конвейер аппаратно программный комплекс визуализации трёхмерной графики. Содержание 1 Элементы трехмерной сцены 1.1 Аппаратные средства 1.2 Программные интерфейсы … Википедия
Asura (игровой движок) — Asura Игровой движок (Список) Разработчик … Википедия
Шестиугольная решётка — Треугольная тесселяция. Вершины формируют шестиугольную решётку с горизонтальными рядами, с треугольниками, указывающими вверх и вниз. Есть три способа сгруппировать треугольники 6 на 6, чтобы сформировать шестиугольную тесселяцию. В каждом… … Википедия
компьютерная графика — визуализация изображения информации на экране дисплея (монитора). В отличие от воспроизведения изображения на бумаге или ином носителе, изображение, созданное на экране, можно почти немедленно стереть или (и) подправить, сжать или растянуть,… … Энциклопедический словарь
PlayStation Portable — В этом разделе не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактироват … Википедия
Сравнение графических процессоров NVIDIA — Эта таблица содержит основную информацию о графических процессорах NVIDIA серии GeForce и видеокартах, построенных на официальных спецификациях NVIDIA. Содержание … Википедия
Поговорим о тесселяции в DirectX 11
Вы наверняка помните серию недавних скринов. Тогда Кристина Коффин сказала, единственное что я вижу на скринах – так это отключенную тесселяцию…
Tessellator (модуль тесселяции)
Тесселяция не является совершенно новой технологией, впервые её стали использовать видеопроцессоры Xenos, которые были разработаны компанией AMD для игровых консолей Xbox 360 в 2005 году. Однако модуль тесселяции использованный в DirectX 11 является более устойчивым и гибким, нежели модуль, использованный в графических процессорах Xenos.
Тесселяция – увеличения количества полигонов
Тесселяция улучшает процесс создания авторского контента и позволит разработчикам и художникам создавать более реалистичных и сложных персонажей, избегая при этом огромных расходов производительности системы. В основе тесселяции лежит идея о том, что объект, расположенный далеко от точки обозрения, будет менее детализирован, из-за того, что его тяжело рассмотреть, но по мере его приближения количество треугольников в изображении объекта экспоненциально увеличивается с целью улучшения его детализации для того, чтобы он выглядел более реалистично. Совершенством этого метода является то, что, при рассмотрении просчитанного изображения, среднее число обработанных треугольников остается близко к устойчивому значению, так что игроку существенно реже доведется встречаться с резкими падениями производительности его системы. Подобный выигрыш в производительности наиболее подходит для разработки консольных игр, потому что там аппаратные средства часто очень ограничены, но и для платформы ПК тесселяция принесет значительную выгоду.
Все стадии обрабатываются в графическом процессоре
Процесс тесселяции предмета начинается в Hull Shader (поверхностный шейдер) – он берет контрольные точки и вычисляет нужный уровень тесселяции. После этой базисной реорганизации контрольные точки отправляются в Domain Shader (доменный шейдер) – тесселятор абсолютно ничего не знает о контрольных точках. Вместо этого тесселятору предоставляют некоторое количество параметров тесселяции, которые задают ему требуемый уровень тесселяции на определенном патче (особые минимальные кусочки объекта). Hull Shader сообщает тесселятору, в каком порядке он должен работать – разработчик сможет определить, каким методом произойдет процесс тесселяции, поскольку модуль тесселяции располагает фиксированным комплектом функций, у него есть несколько операционных режимов. Тесселятор берет то, что было подано ему из Hull Shader и действует в патче над формированием требуемой добавочной геометрии. Как только эта стадия будет завершена, он выдаст доменные точки (domain points) и данные топологии. Доменные точки подаются в Domain Shader, который создает на их основе вершины, доступные прочей части конвейера. Одновременно данные топологии адресуются прямо на этап сборки примитивов конвейера – это совершается потому, что данные шейдерам не нужны, они подготовлены для растеризатора. Здесь нужно отметить то, что на всех этапах стадии тесселяции работа ведется не с треугольниками – вместо этого обрабатываются патчи и точки. Патчи представляют собой кривые или области поверхности и практически всегда являются четырехугольниками. Это первый случай, когда DirectX использует в качестве примитивов не треугольники, и это является существенным шагом вперед.
Минимальный уровень тесселяции
Максимальный уровень тесселяции
Все описаное выше осуществляется за один проход через конвейер DirectX 11. Исходя из этого, мы видим, что у него есть значительный потенциал стать невообразимо эффективным способом добавления огромного количества деталей в будущие игры.
Преимущества тесселяции
Поскольку с помощью тесселяции можно не только улучшать форму объектов, но и порою заметно изменять их геометрию, то в ряде источников управляемый процесс тесселяции называют геометрическими шейдерами.
Наиболее существенный вклад в новый уровень графики обеспечивает тесселяция, которую можно будет включить или отключить при необходимости. Именно это нововведение мы рассмотрим повнимательнее. На представленных ниже изображениях, вы сможете увидеть, какие именно изменения вступают в силу при включении и отключении тесселяции.
Без тесселяции
Тесселяция включена
Без тесселяции
Тесселяция включена
Без тесселяции
Тесселяция включена
Тесселяция на порядок повышает количество использованных полигонов в каждой сцене. Конечно, подобные эффекты можно реализовать и другими способами, однако применение тесселяции позволяет более эффективно использовать шину данных, а также легко масштабировать производительность при помощи настроек уровня детализации.
Уроки по OpenGL с сайта OGLDev
Внимание: текстуры цвета и смещения, используемые в демо, были созданы Ben Cloward.
Тесселяция была определена и интегрирована в спецификацию OpenGL после нескольких лет исследований и в академиях и в индустрии. Ее дизайн вобрал геометрию поверхностей, кривую Безье и разделение. Мы покорим тесселяцию в 2 этапа. В этом уроке мы фокусируемся на новом устройстве конвейера для того, что бы настроить и запустить тесселяциб не сильно вдаваясь в математическую часть. Сам метод будет не трудным, но он раскроет все используемые компоненты. В следующем уроке мы изучим часть Безье и увидим, как применить ее в методе тесселяции.
TCS работает с группой вершин, называемых Control Points (CP). CPs не составляют какого-то конкретного полигона типа треугольника, прямоугольника, пятиугольника или какого-то еще. Вместо этого они определяют поверхность. Она обычно определяется некоторой полиномной формуле, и идея в том, что перемещая CP, мы создаем эффект на главной поверхности. Вы, наверное, уже знакомы с графическим по, которое позволяет вам определять поверхности или кривые, используя набор CPs, и изменять их перемещая CPs. Группа CPs обычно называется Патчем (Patch). Желтая поверхность на следующем изображении определена патчем с 16 CPs:
PG принимает TLs и, основываясь на их значениях, генерирует набор точек внутри треугольника. Каждая точка определяется ее барицентрическими координатами. Разработчик может изменить выходящую топологию на точки или треугольники. Если выбраны точки, тогда PG просто отправит их дальше по конвейеру для растеризации их как точки. Если треугольники, тогда PG соединит все точки вместе так, что лицевая сторона треугольника тесселируется с меньшими треугольниками.:
В общем TLs сообщает PG количество сегментов на выходящей стороне треугольника и количество колец в сторону центра
Итак, после того, как PG завершит разделение треугольной области, нам все еще требуется кто-то, кто принял бы результат разделения и что-нибудь сделал с ним. Кроме того, PG не имеет доступа к патчу. Он просто выдает барицентрические координаты и их связь. Войдем в TES. Этот шейдерный этап имеет доступ и к вышедшему из TCS патчу и к барецентрическим координатам, которые генерировал PG. PG запускает TES на каждую барецентрическую координату и работа TES состоит в генерации вершин для этих точек. Так как TES имеет доступ к патчу, он может брать из него данные, такие как позиция, нормаль и прочее, и использовать их для генерации вершин. После того, как PG запустит TES для каждых трех барецентрических координат «маленького» треугольника, он примет три вершины созданные TES и отправит их дальше на растеризацию.
После прохода TES по позиции области, PG принимает новые вершины и посылает их как треугольники в следующий этап конвейера. После TES наступает время для GS или растеризатора, а дальше как обычно.
Давайте подведем итоги:
Прямиком к коду!
Когда включена тесселяция (т.е. когда мы имеем или TCS или TES) конвейеру требуется знать, как много вершин включает в себя патч. Вспомним, что патч не обязательно имеет определенную геометрическую форму. Это просто список контрольных точек. Вызов glPatchParameteri() в коде выше сообщает конвейеру, что размер входящего патча будет равен 3. Количество может быть увеличено до ограничения драйвера в GL_MAX_PATCH_VERTICES. Это значение может меняться в зависимости от GPU / драйвера, поэтому мы получаем его через glGetIntegerv() и выводим на экран.
Это наш VS, и вся разница между этим и предыдущем в том, что мы больше не преобразуем локальные координаты в пространство клипа (через умножение на матрицу мировой проекции (WVP)). Причина в том, что в этом больше нет смысла. Мы собираемся создать множество новых вершин, которые все равно потребуется преобразовывать. Поэтому это действие отложено до TES.
Это начало TCS. Он вызывается для каждой вершины в output патче, и мы начинаем с определения количества CP в выходящем патче. Затем мы определяем uniform-переменную, которая нам потребуется для вычисления TLs. После этого мы получаем несколько атрибутов для входящих и выходящих CP. В этом уроке мы используем одинаковую структуру и для входящих и выходящих патчей, но это не всегда хорошее решение. Каждая входящая и выходящая CP имеет мировую позицию, координаты текстуры и нормаль. Так как мы можем иметь более одной CP в входящем и выходящем патче, то каждый атрибут определен как массив через модификатор []. Это позволит нам свободно нумеровать любую CP.
Мы начинаем главную функцию TCS с копирования входящих CP в выходящие CP. Эта функция вызывается один раз для выходящей CP, и встроенная переменная gl_InvocationID хранит индекс текущего вызова. Порядок вызовов не определен, поскольку GPU возможно распределяет CPs по своим ядрам и запускает процесс параллельно. Мы используем gl_InvocationID как индекс и в входящем и в выходящем патчах.
После создания выходящего патча мы вычисляем TL. TL может быть установлен различным для каждого выходящего патча. OpenGL предоставляет 2 строенных массива вещественного типа для TL: gl_TessLevelOuter (размер 4) и gl_TessLevelInner (размер 2). В случае треугольной области мы можем использовать только первых 3 члена gl_TessLevelOuter и первый член из gl_TessLevelInner (помимо треугольной области существуют прямоугольная и изолиния, которые дают различный доступ к массиву). gl_TessLevelOuter[] приблизительно определяет количество сегментов на каждой стороне, а gl_TessLevelInner[0] грубо определяет, как много колец будет содержать треугольник. Если мы определим вершины треугольника как U, V и W, то соответствующая сторона для каждой вершины будет той, которая ее противоположна:
Алгоритм, который мы использовали для вычисления TLs очень прост и основывается на расстоянии от вершины до камеры в мировом пространстве. Он реализован в функции GetTessLevel (смотри ниже). Мы вычисляем расстояние между камерой и всеми вершинами и вызываем GetTessLevel() 3 раза для обновления каждого члена gl_TessLevelOuter[]. Каждый вход отображается на сторону согласно изображению выше (TL стороны 0 идет в gl_TessLevelOuter[0] и т.д.) и TL для этой стороны вычисляется основываясь на расстоянии от камеры до двух вершин, которые ее создают. Внутренний TL выбирается таким же, как и TL стороны W.
Вы можете использовать любой алгоритм какой захотите для вычисления TLs. Например, один алгоритм предполагает размер итогового треугольника на экране в пикселях и устанавливает TLs так, что не один тесселируемый треугольник не станет меньше, чем данное число пикселей.
Эта функция вычисляет TL для стороны, основываясь на расстоянии от камеры до 2-х вершин на этой стороне. Мы берем среднее значение и устанавливаем TL в 10 или 7 или 3. При увеличении расстояния мы предпочитаем уменьшать TL, что бы не тратить силы GPU впустую.
Это начало TES. Ключевое слово ‘layout’ определяет 3 элемента конфигурации:
Заметим, что вы можете так же указать каждый конфигурационный элемент с его собственным словом layout. В примере выше мы просто уменьшаем требуемое пространство.
Это главная функция TES. Давайте повторим все, что мы сделали, что бы дойти до сюда. Вершины меша были обработаны VS, а позиция и нормаль были найдены в мировом пространстве. TCS получил каждый треугольник как патч с тремя CP и просто передал их в TES. PG разделил равносторонние треугольники на маленькие треугольники и запустил TES для каждой созданной вершины. В каждом вызове TES мы можем получить доступ к барецентрическим координатам (или координатам тесселяции) вершины в 3D-векторе gl_TessCoord. Так как барецентрические координаты в треугольнике представляют комбинацию веса 3 вершин, мы можем использовать их для интерполяции всех атрибутов новой вершины. Функции interpolate2D() и interpolate3D() (ниже) делают следующее: они принимают атрибуты из CPs из патча и интерполируют их, используя gl_TessCoord.
Имея разделенный на маленькие треугольник оригинального меша, мы не сильно изменили внешний вид меша, поскольку маленькие треугольники в той же плоскости, что и большой треугольник. Мы хотим сместить (или переместить) каждую вершину в сторону, которая будет соответствовать содержанию нашей текстуре цвета. Например, если текстура хранит изображение кирпича или камня, мы хотели бы, что бы наши вершины двигались влодь стороны кирпича или камня. Что бы сделать это, нам потребуется дополнить нашу текстуру цвета картой смещения (displacement map). Существует множество инструментов и редакторов, которые создают карту смещения, и мы не собираемся вдаваться в подробности. Больше информации о ней в сети. Для использования карты мы просто берем сэмпл из нее используя текущие координаты текстуры, и это даст нам высоту текущей вершины. Затем мы смести вершину в мировом пространстве через умножение нормали вершины на ее высоту и через коэффициент смещения в виде uniform-переменной, которая может быть настроена через приложение. Поэтому каждая вершина перемещается вдоль своей нормали согласно ее весу. Наконец, мы умножаем новые координаты в мировом пространстве на матрицу проекции и устанавливаем значение в ‘gl_Position’.
Эти 2 функции интерполируют между тройкой 2D-векторов и 3D-векторов используя ‘gl_TessCoord’ как вес.
Не забудьте компилировать 2 новых шейдера!
Демо
Демо в этом уроке показывает как тесселировать прямоугольную поверхность и смещать вершины вдоль камней на текстуре цвета. Вы можете использовать ‘+’ и ‘-‘ на клавиатуре для обновления коэффициента смещения и через него управлять уровнем перемещения. Вы так же можете переключиться в режим каркаса (wireframe) через ‘z’ и увидеть, как текущие треугольники создаются процессом Тесселяции. Интересно так же наблюдать с различных дистанций в режиме каркаса и видеть, как уровень Тесселяции изменяется в зависимости от расстояния. Вот почему нам требуется TCS.