Уровень тесселяции что это
Тесселяция
Содержание
Тесселяция и компьютерные модели
В компьютерной графике, так называется технология с помощью которой возможно увеличить количество полигонов в полигональной трёхмерной модели, используя кривые Безье. При этом каждый полигон модели разбивается на заданное число связанных полигонов, которые выстраиваются в соответствии с общим направлением поверхности модели. Таким путём можно сначала создать простую модель, а затем быстро и просто повысить её детализацию. Такой метод обычно используют для рендеринга в реальном времени, где на модель накладываются (так называемые треугольники) который иногда называют триангуляцией. Тесселяция является одной из основных особенностей 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. Содержание … Википедия
Как работает аппаратная тесселяция?
Я просто хотел бы, чтобы кто-то объяснил в относительно четких терминах, как работает аппаратная тесселяция, учитывая, что это новое модное слово в DX11.
Я дам вам «простую» версию и позволю кому-то еще сообщить вам подробности, если вам интересно :).
Другая проблема связана с геометрической сложностью: тогда как основанное на кривой определение цилиндра очень просто (радиус и длина), тесселяционное определение, вероятно, объединяет сотни треугольников, каждый из которых должен быть определен независимо. Следовательно, наш тесселированный файл модели будет намного больше. Допустим, у нас есть математически определенная модель чего-то сложного, например, человека. Размер файла нашей модели может составлять всего 24 КБ. Что ж, после того, как эта модель будет рассортирована, результирующий файл может иметь размер 24 МБ (24 000 КБ). Это большая разница.
Аппаратная тесселяция использует преимущества геометрических шейдеров для выполнения аппаратной тесселяции в режиме реального времени (или почти в реальном времени). По сути, он предоставляет механизм для того, чтобы взять математически определенную трехмерную модель и преобразовать ее в тесселяционный формат, который видеокарта может эффективно визуализировать. Традиционно разработчики игр проводили тесселяцию в студии и поставляли тесселяционные модели вместе с игрой. Аппаратная тесселяция позволяет нам отложить этот процесс до тех пор, пока игра фактически не запустится на компьютере игрока. Это имеет ряд серьезных преимуществ:
Размер трехмерного содержимого игры резко уменьшается (требуется меньше дисков или меньше загрузок, и требуется меньше места на жестком диске).
Так что в этом суть. Это, вероятно, не на 100% точно, так как я не 3D-программист, но это должно дать вам лучшее представление о том, о чем вся эта суета :).
Тесселяция в современном OpenGL
Поскольку передача данных между CPU и GPU сильно ограничена по скорости, то важно уметь генерировать геометрию прямо на GPU. Частично подобную функциональность предоставил так называемый рендеринг в вершинный буфер (R2VB). Следующим шагом в этом направлении стало добавление геометрических шейдеров в конвейер рендеринга/
Рис 1. Конвейер рендеринга с тесселляцией.
Tesselation Control Shader
Все входные параметры, пришедшие от вершинного шейдера, передаются как массивы (так как шейдер имеет доступ ко всем вершинам патча сразу), при этом размер массива указывать не обязательно.
Из уже слинкованной программы можно получить число вершин в примитиве при помощи следующего фрагмента кода:
На вход шейдера поступают как выходные значения вершинного шейдера (в виде массивов), так и следующие встроенные переменные:
Также шейдер может обращаться к uniform-переменным и текстурам. Для него определены следующие стандартные выходные переменные:
Шейдер записывает данные для вершин и задает параметры для тесселляции (через массивы gl_TessLevelOuter и gl_TessLevelInner). Значения из массива gl_TexLevelOuter управляют разбиением границ примитивов (в зависимости от типа примитива используется разное количество значений). Массив gl_TexLevelInner управляет разбиением внутренности примитива. Количество значений из данных массивов, которое реально используется зависит от типа тесселляции.
Кроме того шейдер может вводить и свои выходные переменные, которые должны быть описаны как массивы (указание размера как и для входных переменных не обязательно). Также выходные переменные могут быть типа patch, которые задают значение сразу для всего патча.
Ниже приводится пример простейшего тесселляционного шейдера, который просто передает входные вершины на выход и задает параметры тесселляции в соответствии с uniform-параметром level.
Обратите внимание, что шейдер имеет доступ не только к входным данным для каждой вершины, но также и к выходным данным для каждой вершины патча (независимо от того для какой вершины он был вызван в данный момент). Это позволяет при расчете одних вершин патча обращаться к результатам обработки других вершин того же патча.
Тесселяция примитивов
Рис 2. Типы тесселляции.
Сам тип тесселляции задается в tesselation evaluation shader при помощи директивы layout. Также в этой директиве задается способ разбиения отрезков (equal_spacing, fractional_even_spacing и fractional_odd_spacing) и способ упорядочивание вершин (cw, ccw).
В ходе аппаратной тесселляции по входному патчу генерируется много новых примитивов (в соответствии с типом тесселляции) и для каждой вершины каждого сгенерированного примитива вычисляются специальные координаты (u,v,w), задающие положение сгенерированных вершин в исходном патче, в зависимости от типа тесселляции это будут обычные двухмерные или трехмерные (барицентрические) координаты.
Ключевую роль в тесселляции играют параметры тесселляции. По стандарту наличие tesselaction control shader‘а не является обязательным, в этом случае используются значения параметров тесселляции по умолчанию. Для задания этих значений служит функция glPatchParameterfv:
Если параметр pname равен константе GL_PATCH_DEFAUL_OUTER_LEVEL, то values задают массив из четырех чисел. В случае, когда параметр pname равен GL_PATCH_DEFAULT_INNER_LEVEL, то values задают массив из двух чисел.
Если для примитива любой из используемых внешних уровней тесселляции меньше или равен нулю, то примитив отбрасывается тесселлятором. Для режима тесселляции quads используются все четыре внешних уровня, для режима тесселляции треугольников triangles используются только первые три и для режима isolines используется только первые два внешних уровня тесселляции.
Внешние уровни тесселляции определяют на сколько частей будут разбиты ребра входного примитива. Однако точное число разбиений и длины получившихся отрезков определяются не только внешним уровнем тесселляции, но и выбранным способом разбиения ребер.
Обозначим через max максимальное значение уровня разбиение, оно зависит от реализации и может быть получено при помощи следующего фрагмента кода.
Ниже приводятся скриншоты тесселляции треугольника для разных значений внешнего и внутреннего уровней тесселляции.
Рис 3. Пример тесселляции треугольника для разных значений параметра (equal_spacing).
Если в качестве способа разбиения выбран fractional_even_spacing, то соответствующий уровень разбиения будет приведен к отрезку [2,max], после чего округлен вверх к ближайшему четному целому числу n. Для способа разбиения fractional_odd_spacing отсечение производится по отрезку [1,max-1] и округляется вверх к ближайшему нечетному целому числу n.
Таблица 1. Допустимые значение параметра pname для функции glGetActiveUniformBlockiv.
Способ разбиения | Отсекается по отрезку | Округляется вверх к |
---|---|---|
equal_spacing | [1,max] | ближайшему целому |
fractinal_even_spacing | [2,max] | ближайшему четному целому |
fractional_odd_spacing | [1,max-1] | ближайшему нечетному целому |
Если полученное таким образом значение n равно единице, то соответствующий отрезок не разбивается вообще. В противном случае (для fractional_even_spacing и fractional_odd_spacing) отрезок разбивается на n-2 отрезка одинаковой длины и два дополнительных отрезка. Длины этих дополнительных отрезков равны между собой и они располагаются симметрично относительно концов разбиваемого отрезка.
Ниже показаны скриншоты тесселляции треугольника, соответствующие дробным уровням тесселляции и режимам разбиения fractional_even_spacing и fractional_odd_spacing.
Рис. 4. Разбиение сторон треугольника для дробных уровней тесселляции.
Тесселлятор генерирует примитивы (треугольники и отрезки) с вершинами, упорядоченными либо по часовой стрелке (cw), либо против часовой стрелки (ccw). По умолчанию используется упорядочение против часовой стрелки. Упорядочивание понимается в смысле координат (u,v,w), назначаемых каждой вершине, генерируемого примитива.
Можно в tessellation evalutation shader в директиве layout задать ключевое слово point_mode, тогда на выходе тесселлятора будут не треугольники или отрезки, а точки.
Тесселляция треугольников (triangles)
Первым шагом тесселляции треугольника является построение набора вложенных друг в друга треугольников (см. рис. 5).
Рис 5. Построение системы вложенных треугольников.
Если после отсечения и округления все используемые уровни тесселляции равны единице, то генерируется только один треугольник с координатами вершин равными (0,0,1), (0,1,0) и (1,0,0). Если внутренний уровень равен единице и хотя бы один из внешних уровней больше единицы, то считается, что внутренний уровень задан как 1+eps, после чего производится округление (в соответствии со способом разбиения) к 1 или 2.
Рис 6. Построение внутреннего треугольника.
Если n равно 3, то процесс построения вложенных треугольников прекращается (и ребра внутреннего треугольника больше не разбиваются), в противном случае ребра получившегося внутреннего треугольника разбиваются на n-2 равных отрезка и процесс построения внутреннего треугольника продолжается. Таким образом исходя из первого внутреннего уровня тесселляции строится набор вложенных треугольников.
После того, как все внутренние треугольники построенны описанным выше способом, то области между каждой парой соседних вложенных треугольников заполняется треугольниками, построенными по точкам разбиения и вершинами.
После этого производится разбиение ребер всех этих треугольников. Далее для каждого такого треугольника (кроме исходного) область между ним и вложенным в него треугольником заполняется треугольниками, построенными на вершинах разбиения.
Рис 7. Заполнение областей между вложенными треугольниками.
Для этих шагов используется только первый внутренний уровень тесселляции и первые три внешние уровня.
На заключительном шаге заполняется область между исходным треугольником и первым вложенным в него треугольником. Для этого ребра исходного разбиваются заново (предыдущее разбиение отбрасывается), при этом для разбиения каждого ребра используется свое значение внешнего уровня тесселляции. После чего оставшаяся область заполняется треугольниками, построенными на точках разбиения и вершинах этих двух треугольников.
Конкретный детали тесселляции зависят от реализации и могут отличаться для различных GPU.
Тесселяция четырехугольников (quads)
Тесселляция четырехугольников заметно проще тесселляции треугольников. Сначала два вертикальных ребра (соответствующих u=0 и u=1) разбиваются на равное число одинаковых отрезков, задаваемое первым внутренним уровнем тесселляции. После этого два горизонтальных ребра (соответствующих v=0 и v=1) разбиваются аналогичным образом, но здесь число отрезков определяется уже вторым внутренним уровнем тесселляции.
При этом получается блок из прямоугольников (в координатах (u,v)) и все прямоугольники, не касающиеся сторон исходного четырехугольника, разбиваются на пары треугольников.
Далее каждое из четырех ребер исходного четырехугольника разбивается в соответствии с четырьмя внешними уровнями тесселляции (каждому ребру соответствует свой уровень) и оставшаяся полоса заполняется треугольниками, построенными на точках разбиения и вершинах. Каждая вершина каждого треугольника получает свои координаты (u,v) (обе координаты лежат на отрезке [0,1]), определяющие ее положение в исходном четырехугольнике.
Тесселяция четырехугольников в режиме isolines
Рис 9. Тесселляция в режиме изолиний.
Tesselation Evaluation Shader
Рис 10. Согласование уровней тесселляции для набора патчей.
Tesselation evaluation shader (GL_TESS_EVALUATION_SHADER) вызывается отдельно для каждой вершины созданного тесселлятором примитива. При этом он получает координаты вершины ((u,v) или (u,v,w)). Шейдер имеет доступ сразу ко всем вершинам исходного патча, к uniform-переменными и текстурам.
Этому типу шейдера доступны следующие стандартные входные переменные:
Также шейдер могут получать входные данные от tessellation control shader‘а, они описываются как входные (т.е. имеют спецификатор in) и описаны как массивы. Также шейдеру доступны входные переменные типа patch, задающие значения для всего примитива.
Ниже приводится пример простого tessellation evalutaion shader‘а.
Тесселляция поверхности Безье
Одним из наиболее известных примеров сплайновый поверхностей является кубическая поверхность Безье. Она задается набором из 16 контрольных точек pij и по ним для каждого значения параметров u и v из отрезка [0,1] следующая формула задает соответствующую точку на поверхности:
Здесь через Bi 3 обозначен полином Бернштейна
Для вывода поверхности Безье в качестве патча выступает набор из 16 контрольных точек, tessellation control шейдер применяет матрицы преобразований к контрольным точкам, а tessellation evaluation шейдер по параметрам осуществляет вычисление координат.
Ниже приводятся два скриншота, соответствующие выводу поверхности Безье с разными уровнями тесселляции.
Рис 11. Тесселляция поверхности Безье.
Полностью текст программы можно скачать по ссылке в конце статьи, а ниже приводятся используемые шейдеры.
Максимальный уровень тесселяции что это
Замощение, тесселяция (англ. tessellation ) (компьютерная графика) — автоматизированный процесс добавления новых выпуклых многоугольников в полигональную сетку с целью повышения детализации сетки.
Содержание
Замощения и компьютерные модели [ править | править код ]
В компьютерной графике так называется технология, с помощью которой возможно увеличить количество многоугольников в полигоне (используя, например, кривые Безье). При этом каждый многоугольник модели разбивается на заданное число связанных многоугольников, которые выстраиваются в соответствии с общим направлением поверхности модели. Таким путём можно сначала создать простую модель, а затем быстро и просто повысить её детализацию.
В компьютерной графике и играх данный метод работы с моделью называют тесселяцией. Тесселяция является одной из основных особенностей OpenGL 4 и DirectX 11.
Замощение же в чистом виде здесь называют тайлингом (от английского слова «tiling»), чтобы конкретизировать термин. В период с 1986 по 1999 год тайлинг часто использовался в игровых консолях и был реализован аппаратно. Тесселяция же необходима лишь для 3D-моделей и её поддержка реализована в потребительских GPU, которые заявлены как совместимые с DirectX 11 и OpenGL 4.0. В специализированных 3D-процессорах тесселяция появилась гораздо раньше, как ответ на требования индустрии компьютерной графики.
Замощения в природе [ править | править код ]
Базальтовые потоки лавы часто образуют столбчатые сращивания, по мере остывания лавы возникают трещины. Из большого количества трещин формируется замощение.
Как повысить фпс в играх на видеокартах AMD Radeon?
Этот гайд предполагает, что у вас уже установлена утилита AMD Catalyst Control Center. Если же нет, то скачать можно здесь.
Теперь для повышения фпс сделайте следующее:
Нажмите правой кнопкой мыши по рабочему столу и выберите из контекстного меню Свойства графики.
В открывшемся окне выберите из раскрывающегося списка Игры пункт Настройки 3D-приложений.
Выставите настройки, как на скрине, а именно:
Сглаживание
Текстурная фильтрация
Управление частотой кадров
Тесселяция
Кроме общих настроек можно также сделать персональные для каждого приложения. Для этого перейдём в раздел Параметры приложения переключаемой графики из раздела Питание.
Здесь найдите своё приложение или если его нет, добавьте его, указав к нему путь.
Теперь, когда приложение появилось, можно выбрать один из вариантов производительности выпадающего списка напротив приложения в столбце Настройки графики.
Доступны три варианта: Высокая производительность (Для слабых ПК), Энергосбережение (Для мощных ПК) и Основано на источнике питания (Указан в настройках питания в панели управления).
После выбора нужной настройки, нажмите на кнопку применить.
Вы наверняка помните серию недавних скринов. Тогда Кристина Коффин сказала, единственное что я вижу на скринах – так это отключенную тесселяцию…
Tessellator (модуль тесселяции)
Тесселяция не является совершенно новой технологией, впервые её стали использовать видеопроцессоры Xenos, которые были разработаны компанией AMD для игровых консолей Xbox 360 в 2005 году. Однако модуль тесселяции использованный в DirectX 11 является более устойчивым и гибким, нежели модуль, использованный в графических процессорах Xenos.
Тесселяция – увеличения количества полигонов
Тесселяция улучшает процесс создания авторского контента и позволит разработчикам и художникам создавать более реалистичных и сложных персонажей, избегая при этом огромных расходов производительности системы. В основе тесселяции лежит идея о том, что объект, расположенный далеко от точки обозрения, будет менее детализирован, из-за того, что его тяжело рассмотреть, но по мере его приближения количество треугольников в изображении объекта экспоненциально увеличивается с целью улучшения его детализации для того, чтобы он выглядел более реалистично. Совершенством этого метода является то, что, при рассмотрении просчитанного изображения, среднее число обработанных треугольников остается близко к устойчивому значению, так что игроку существенно реже доведется встречаться с резкими падениями производительности его системы. Подобный выигрыш в производительности наиболее подходит для разработки консольных игр, потому что там аппаратные средства часто очень ограничены, но и для платформы ПК тесселяция принесет значительную выгоду.
Все стадии обрабатываются в графическом процессоре
Процесс тесселяции предмета начинается в Hull Shader (поверхностный шейдер) – он берет контрольные точки и вычисляет нужный уровень тесселяции. После этой базисной реорганизации контрольные точки отправляются в Domain Shader (доменный шейдер) – тесселятор абсолютно ничего не знает о контрольных точках. Вместо этого тесселятору предоставляют некоторое количество параметров тесселяции, которые задают ему требуемый уровень тесселяции на определенном патче (особые минимальные кусочки объекта). Hull Shader сообщает тесселятору, в каком порядке он должен работать – разработчик сможет определить, каким методом произойдет процесс тесселяции, поскольку модуль тесселяции располагает фиксированным комплектом функций, у него есть несколько операционных режимов. Тесселятор берет то, что было подано ему из Hull Shader и действует в патче над формированием требуемой добавочной геометрии. Как только эта стадия будет завершена, он выдаст доменные точки (domain points) и данные топологии. Доменные точки подаются в Domain Shader, который создает на их основе вершины, доступные прочей части конвейера. Одновременно данные топологии адресуются прямо на этап сборки примитивов конвейера – это совершается потому, что данные шейдерам не нужны, они подготовлены для растеризатора. Здесь нужно отметить то, что на всех этапах стадии тесселяции работа ведется не с треугольниками – вместо этого обрабатываются патчи и точки. Патчи представляют собой кривые или области поверхности и практически всегда являются четырехугольниками. Это первый случай, когда DirectX использует в качестве примитивов не треугольники, и это является существенным шагом вперед.
Минимальный уровень тесселяции
Максимальный уровень тесселяции
Все описаное выше осуществляется за один проход через конвейер DirectX 11. Исходя из этого, мы видим, что у него есть значительный потенциал стать невообразимо эффективным способом добавления огромного количества деталей в будущие игры.
Преимущества тесселяции
Поскольку с помощью тесселяции можно не только улучшать форму объектов, но и порою заметно изменять их геометрию, то в ряде источников управляемый процесс тесселяции называют геометрическими шейдерами.
Наиболее существенный вклад в новый уровень графики обеспечивает тесселяция, которую можно будет включить или отключить при необходимости. Именно это нововведение мы рассмотрим повнимательнее. На представленных ниже изображениях, вы сможете увидеть, какие именно изменения вступают в силу при включении и отключении тесселяции.
Без тесселяции
Тесселяция включена
Без тесселяции
Тесселяция включена
Без тесселяции
Тесселяция включена
Тесселяция на порядок повышает количество использованных полигонов в каждой сцене. Конечно, подобные эффекты можно реализовать и другими способами, однако применение тесселяции позволяет более эффективно использовать шину данных, а также легко масштабировать производительность при помощи настроек уровня детализации.