Тесселяция в играх что это

Сейчас все говорят о DirectX 11, и вы уже, наверное, много слышали об одной из самых важных новых возможностей – тесселяции. Концептуальная идея тесселяции довольно проста: вы берете полигон и режете его на небольшие части. Но почему эта возможность так важна? И чем она полезна для игр? В данной статье мы расскажем, почему тесселяция способна внести значительные изменения в работу с 3D графикой на ПК и как графические процессоры NVIDIA® серии GeForce® GTX 400 обеспечивают революционную производительность во время тесселяции.

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

Самый простой и популярный способ использования новых треугольников – это применение карты смещения. Карта смещения – это текстура, хранящая информацию о высотах. Примененная к поверхности карта позволяет «сместить» вершины поверхности вверх или вниз на основе данных о высотах. К примеру, художник может использовать мраморную плитку и сместить вершины, создавая рельеф. Другой популярный способ применения карт смещения – это создание рельефных ландшафтов с кратерами, каньонами и пиками.

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

Благодаря DirectX 11 тесселяция и карты смещения, наконец, образовали успешный союз, и разработчики уже этим пользуются. В популярных играх, таких как Alien vs. Predator и Metro 2033, тесселяция используется для создания ровных и плавных линий моделей, разработчики в компаниях Valve и id Software проделали большую работу по применению этих технологий к уже существующим игровым персонажам и получили многообещающие результаты.

Благодаря поддержке программирования конвейер тесселяции DirectX 11 позволяет разрешить большое количество задач компьютерной графики. Давайте рассмотрим четыре примера.

Совершенный Bump Mapping

По своей сути, карты смещения могут быть использованы в качестве заменителей для существующих техник bump mapping. Сегодняшние техники, например, метод создания рельефа при помощи нормалей, создают иллюзию неровной поверхности благодаря более точной закраске пикселей. Все эти техники работают лишь в определенных случаях и выглядят лишь частично убедительными. К примеру, метод создания рельефа при помощи параллаксного смещения (parallax occlusion mapping) – самый продвинутый метод создания неровности. Несмотря на то, что создается иллюзия собственного затенения геометрии, метод применим только к плоским поверхностям и создает эффект только на внутренней части объекта (см. изображение выше). Настоящее создание рельефа при помощи карт смещения не имеет таких проблем и обеспечивает точные результаты с любого угла зрения.

Более гладкие персонажи

Еще один близкий партнер тесселяции – это алгоритмы усовершенствования моделей. Алгоритм усовершенствования берет грубую модель и использует тесселяцию для создания более плавной и точной модели. Примером популярного алгоритма является PN-Triangles (также известный как N-patches). Алгоритм PN-Triangles конвертирует модели низкого разрешения в изогнутые поверхности, которые затем перерисовываются в сетку мелко тесселированных треугольников. Эти алгоритмы позволяют избавиться от многих визуальных артефактов современных игр, с которыми мы привыкли мириться, например, грубые ступенчатые стыки конечностей персонажей, колеса машин с полигональным внешним видом, грубые черты лиц. К примеру, PN-Triangles используется в игре Stalker: Call of Pripyat, обеспечивая более плавный и правдоподобный внешний вид персонажей.

Плавное изменение уровня детализации.

Наверное, вы уже заметили, что в играх с большими открытыми ландшафтами удаленные объекты то исчезают, то появляются в сцене. Это происходит вследствие того, что игровой движок переключается между уровнями детализации (LOD), оптимизируя нагрузку при обработке геометрии. Прежде не было простого и удобного метода плавного изменения уровня детализации, так как для этого потребовалось бы держать в сцене множество версий одной модели или окружения. Динамическая тесселяция позволяет избавиться от этой проблемы благодаря изменению уровня детализации в реальном времени. К примеру, при первом появлении удаленное здание рендерится с использованием лишь десяти треугольников. При приближении проявляются более детальные черты, и дополнительные треугольники используются для уточнения деталей, таких как окна и крыша. Когда вы, наконец, достигаете двери, тысячи треугольников используются для визуализации одной только латунной ручки, и каждый изгиб тщательно вырезан при помощи карт смещения. Благодаря динамической тесселяции объекты больше не исчезают и не появляются в кадре, а игровые окружения могут бесконечно детализироваться.

Тесселяция имеет большое значение и для разработчиков, предлагая значительное улучшение конвейера для создания контента. Отдавая свое предпочтение тесселяции, Джейсон Митчелл (Jason Mitchell) из Valve объясняет: «Нам важна возможность создания материалов, поддерживающих как уменьшение, так и увеличение масштаба… Мы, наоборот, хотим правдоподобно уменьшать масштаб материала, обеспечивая рендеринг в реальном времени в заданной системе.» Данная возможность создания модели и использования ее с различными платформами позволит сократить время разработки, а для геймеров будет означать самое высокое возможное качество изображения на их GPU.

Как графические процессоры GeForce GTX 400 поддерживают тесселяцию

Традиционно GPU используют одиночный геометрический движок для создания тесселяции. Этот подход очень похож на конструкцию ранних GPU, использовавших один пиксельный конвейер для закраски пикселей. Основываясь на опыте пиксельных конвейеров, которые превратились из одного блока во множество параллельных блоков и захватили первенство в создании 3D реализма, мы спроектировали нашу архитектуру тесселяции с учетом параллельных вычислений с самого начала.

Графические процессоры GeForce GTX 400 содержат до 15 блоков тесселяции, каждый из которых представлен специальным аппаратным обеспечением для выбора вершины, проведения тесселяции и трансформаций координат. Они работают вместе с четырьмя параллельными растровыми движками, превращающими вновь тесселированные треугольники в точный поток пикселей для закраски. Результатом такого подхода становится революционный прорыв в производительности при проведении тесселяции – более 1.6 миллиарда треугольников в секунду при постоянной производительности. По результатам тестирования независимого веб-сайта Bjorn3D, GeForce GTX 480 почти в 7.8 раз опережает своих самых быстрых конкурентов.

После многих лет проб и ошибок тесселяция, наконец, стала приносить свои плоды на ПК. Уже сегодня вы можете оценить потенциал тесселяции благодаря таким сногсшибательным играм, как Metro 2033. Со временем, тесселяция времени займет позицию такого же важного и незаменимого инструмента, как закраска пикселей. Осознавая важность тесселяции, компания NVIDIA начала создание архитектуры параллельной тесселяции с самого начала. Результатом стало семейство графических процессоров GeForce GTX 400, обеспечивающих настоящую революцию в геометрическом реализме и производительности при проведении тесселяции.

Режим тесселяции amd что это?

Что такое тесселяция в игре?

Если у вас есть игровой ПК и вы решили пойти по менее проторенному (но все еще живописному) пути AMD для вашей видеокарты, то вы будете знакомы с настройками Radeon, ранее известными как AMD Catalyst Control Center. Для большинства людей это, вероятно, запретная зона. И вы очень рады, что каждая отдельная игра решает, какие графические настройки лучше всего подходят для вас. Настройки видеокарт AMD Radeon что они все значат — об этом далее.

Однако используйте это с умом, и этот инструмент может помочь вам в игре. до нескольких ступеней. Итак, чтобы помочь вам, вот список всех основных функций, которые вы найдете в настройках Radeon, с особым акцентом на разделы «Игры» и «Экран».

Неисправности материнской платы признаки которые можно обнаружить

Игровые настройки Radeon Gaming

Настройки, приведенные ниже, окажут самое непосредственное влияние на вашу игровую производительность. Нажмите «Игры», затем «Глобальные настройки». Давайте поговорим о трех заголовках, которые вы видите на этом экране.

Global WattMan

В разделе «Глобальные настройки» средняя вкладка в верхней части настроек Radeon — «Global WattMan a». инструмент, который позволяет разогнать видеокарту AMD. Нажмите на нее, и вы увидите ползунок вверху, который позволяет выбирать из нескольких предустановок разгона.

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

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

Мониторинг производительности

Эта легко пропускаемая функция в глобальных настройках позволяет вам открыть небольшое наложение контроля производительности в любое время с помощью быстрого сочетания клавиш. Настройки видеокарт AMD Radeon что они все значат? Нажмите на нее, и вы увидите, что вы можете вносить различные изменения, например, какую информацию отображать в оверлее (частота кадров, температура графического процессора, использование видеопамяти и т. Д.) И какое сочетание клавиш вы хотите использовать для его открытия.

Режим сглаживания

Особенно на экранах с более низким разрешением, диагональные линии в видеоиграх (которые состоят из отдельных квадратных пикселей ) может выглядеть неровно и лестница, а не гладкая. Сглаживание (AA) решает эту проблему, эффективно заполняя промежутки в этих выделенных линиях, чтобы сгладить их.

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

Метод сглаживания

Существует три типа сглаживания, которые вы можете использовать в настройках Radeon:

  • Мультисэмплинг (MSAA) Самый простой в вашем графическом процессоре MSAA уменьшает алиасы только на тех частях экрана, которые действительно в этом нуждаются, обычно по краям объектов.
  • Адаптивная мультисэмплинг (Adaptive MSAA) Средний уровень. Уменьшает неровности на краях объектов с прозрачными элементами (заборы из колючей проволоки и т. Д.).
  • Суперсэмплинг (SSAA) Самый мощный (и требующий графической обработки) метод АА, который уменьшает наложение на весь экран.

Морфологическая фильтрация (MLAA)

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

Режим анизотропной фильтрации

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

Если вы включите это, вы получите опции для 2x, 4x, 8x и 16x. анизотропная фильтрация, причем даже на самом высоком уровне она неплохо работает на современных видеокартах.

Качество фильтрации текстур

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

Оптимизация формата поверхности

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

Ожидание вертикального обновления

Это немного окольный способ сказать VSync (вертикальная синхронизация), о котором вы, возможно, слышали. Если у вас есть игра, которая работает с более высокой частотой кадров (fps), чем частота обновления (Гц) вашего монитора, то вы можете увидеть на экране дрожащие горизонтальные линии, известные как разрыв экрана. VSync борется с этим, ограничивая частоту кадров вашего графического процессора частотой обновления ваших мониторов.

Тройная буферизация OpenGL

В наши дни API OpenGL используют не так много игр. (вот список тех, кто это делает), но для тех, кто это делает, включение этого параметра вместе с VSync позволит более плавно колебаться с частотой смены кадров.Таким образом, там, где двойная буферизация снизит частоту кадров до 30, даже если технически она может работать на 55, чтобы компенсировать задержку, вызванную синхронизацией, тройная буферизация устраняет эту проблему, позволяя частоте кадров работать с любой частотой кадров, которую может обработать ваш графический процессор. p47>

Shader Cache

Хранит шейдеры для игр локально на жестком диске, значительно увеличивая время загрузки (особенно если у вас нет SSD). Имейте в виду, что это занимает довольно много места на жестком диске (3 ГБ или около того).

Режим тесселяции

Увеличивает игровую графику, разбивая большие полигоны на более мелкие части, делая графику более гладкий (немного похоже на дробление горошин перца в молотый перец, если вы в ваших пищевых аналогиях). AMD Optimized использует тесселяцию x64, но если вы выберете «Изменить настройки приложения», вы можете установить более низкую скорость, если считаете, что влияние на производительность слишком велико.

Энергоэффективность

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

Target Control (Частота кадров)

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

Функции Adrenalin Edition

По состоянию на декабрь 2017 года в Radeon Settings появилось множество полезных новых функций. благодаря так называемому обновлению Adrenalin. Вот лучшие из них:

AMD Link

Рядом с параметром «Уведомления» на главном экране настроек Radeon есть новая вкладка AMD Link. Это позволяет синхронизировать настройки Radeon и мониторинг GPU с приложением AMD Link на вашем телефоне, чтобы вы могли отслеживать такие вещи, как скорость вращения вентилятора GPU, температуру и частоту кадров. Вы даже можете использовать свой телефон для записи своих игр, используя ReLive!

1. Настройка драйверов — обновление

Прежде чем приступать к изменению настроек видеокарты, рекомендую проверить и обновить драйвера.Драйвера могут очень сильно влиять на производительность, да и вообще на работу в целом!

Например, лет 12-13 назад, была у меня видеокарта Ati Radeon 9200 SE и были установлены драйвера, если не ошибаюсь, версии 3 (

Catalyst v.3.x) . Так вот, долгое время не обновлял драйвера, а устанавливал их с диска, который шел вместе с ПК. В играх у меня плохо отображался огонь (его практически не было видно), каково же было удивление, когда я установил другие драйвера — картинку на мониторе как будто подменили! (небольшое лирическое отступление)

Driver Pack Solution — представляет собой на 7-8 ГБ. Его нужно скачать один раз и затем можно использовать на ноутбуках и компьютерах, которые даже не подключены к интернету. Т.е. данный пакет — это просто огромная база драйверов, которую можно поместить на обычную флешку.

Программа, которая просканирует ваш компьютер (точнее все его оборудование), а затем проверит в интернете — нет ли новых драйверов. Если нет — выдаст зеленую галочку, что все в порядке; если будут — даст прямые ссылки по которым можно скачать обновления. Очень удобно!

Slim drivers. Были найдены драйвера более новее, чем установленные на ПК.

Билинейная фильтрация

Используя вместе линейную фильтрацию и MIP-текстурирование, получаем билинейный алгоритм, который позволяет ещё лучше отображать удалённые объекты и поверхности. Однако всё те же 4 текселя не дают технологии достаточной гибкости, к тому же билинейная фильтрация не маскирует переходы на следующий уровень масштабирования, работая с каждой частью текстуры по отдельности, и их границы могут быть видны. Таким образом, на большом удалении или под большим углом текстуры сильно размываются, делая картинку неестественной, как будто для людей с близорукостью, плюс для текстур со сложными рисунками заметны линии стыка текстур разного разрешения. Но мы же за экраном монитора, не нужна нам близорукость и разные непонятные линии!

Читайте также:  Отключение автозапуска программ в Виндовс 10

Требования Метро Exodus для ПК

Прежде чем мы рассмотрим настройки ПК Metro Exodus, мы должны поговорить об оборудовании, которое вам нужно для запуска игры. Ознакомьтесь с рекомендуемыми и минимальными требованиями к игре, прежде чем начать соответствующую оптимизацию игры.

Metro Исход PC Минимальные системные требования

  • ОС: Windows 7/8/10
  • Процессор: Intel Core i5-4440 или эквивалентный
  • Оперативная память: 8 ГБ
  • Графический процессор: Nv >Metro Эксодус PC Рекомендуемые системные требования
  • ОС: Windows 10
  • Процессор: Intel Core i7-4770k или эквивалентный
  • Оперативная память: 8 ГБ
  • Графический процессор: GeForce GTX 1070 / GeForce RTX 2060 / AMD RX VEGA 56
  • Свободное дисковое пространство: 59 ГБ
  • Выделенное видео RAM: 8192 МБ

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

Для этих тестов мы использовали Intel 8700K в паре с графической картой Nvidia RTX 2060 и 16 ГБ оперативной памяти.

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

4. Увеличение детализации в зависимости от расстояния до камеры.

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

Процедурная растительность на OpenGL и GLSL

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

Повествование будет вестись на примере небольшой демки, которая генерирует сцену как на картинке выше. Мы пройдём увлекательное путешествие от подготовки данных на CPU до записи значений цвета на выход фрагментного шейдера.

Цели и средства

При написании демки я поставил перед собой следующие цели:

  • Максимально сократить объём данных, хранимых в видеопамяти. Как следствие:
  • Максимально утилизировать графический процессор, используя все доступные стадии конвейера.
  • Сделать некоторые параметры сцены настраиваемыми.
  • Сосредоточиться на геометрии и написании шейдеров, потратив минимум усилий на остальные компоненты. Поэтому был использован наиболее привычный мне инструментарий: C++11 (gcc), Qt5 + qmake, GLSL.
  • По возможности упростить сборку и запуск получившейся демки на различных платформах.
  • Основной цикл сделан примитивно. Поэтому скорость анимации и перемещения камеры зависит от частоты кадров, а значит и от положения камеры в пространстве.
  • В единый класс камеры замешаны её координаты, ориентация, проекция и функции для изменения всего этого. В таком виде его написание не заняло много времени и позволило сделать достаточно оптимальный проброс параметров камеры в шейдер.
  • Класс шейдера выполнен в виде достаточно тонкой обёртки над соответствующим классом Qt5. Общие для различных стадий куски кода склеиваются воедино и отдаются на откуп оптимизатору компилятора, который выкинет неиспользуемый код и глобальные переменные.
  • В программе используется единственный шейдер, поэтому передача данных в него сделана без «новомодных» UBO. В этом случае они не добавили бы производительности, усложнив код.
  • Счётчик кадров в секунду сделан на основе запросов OpenGL. Поэтому он показывает не «настоящие» FPS, а немного завышенный идеализированный показатель, в котором не учитывается оверхед, привносимый Qt.
  • Крутое освещение не было целью написания данной демки, поэтому используется простая реализация освещения Фонга с одним, захардкоженным в шейдере, источником света.
  • Реализация шумов в шейдерах была взята у стороннего автора.

Краткий обзор генерации геометрии

Мы будем отрисовывать набор патчей, каждый из которых содержит единственную вершину. Каждая вершина, в свою очередь, содержит единственный четырёхкомпонентный атрибут. Используя эту минимальную порцию данных в качестве затравки, мы «нарастим» на каждый такой патч (т.е. на одну точку) целый куст шевелящихся стеблей. Кроме того, все кусты могут быть подвержены действию ветра с задаваемыми пользователем параметрами. Большая часть работы по генерации куста выполняется в шейдере тесселяции (Tesselation evaluation shader) и в геометрическом шейдере. Так, в шейдере тесселяции генерируется скелет куста со всеми деформациями, вносимыми шевелением и ветром, а в геометрическом шейдере на этот скелет натягивается полигональная «плоть», толщина которой зависит от высоты кости на скелете. Фрагментный шейдер, как водится, вычисляет освещение и наносит процедурно генерируемую текстуру на основе диаграммы Вороного.

Путь данных к раскрашиванию пикселей монитора начинается с их подготовки на CPU. Как было сказано выше, каждая «модель» сцены изначально состоит из одной вершины. Сделаем эту вершину четырёхмерной, где первые три компоненты — это положение вершины в пространстве, а четвёртая компонента — количество стеблей в кусте. Таким образом, кусты смогут отличаться друг от друга количеством стеблей. Начнём генерацию координат с узлов квадратной решётки конечного размера, и возмутим каждую координату на случайную величину из заданного интервала:

Сгенерированные данные отправим в видеопамять:

Теперь метод отрисовки всего газона из сгенерированной травы выглядит очень лаконично:

Кроме геометрии, в шейдерах нам понадобятся равномерно распределённые случайные числа. Наиболее оптимально на CPU получить числа в интервале [0; 1], а на GPU в каждом конкретном месте приводить их к требуемому интервалу. В видеопамять мы их доставим в виде одномерной текстуры, у которой в качестве фильтрации установлен выбор ближайшего значения. Напомню, что в двумерном случае такая фильтрация приводит к подобному результату:

foobar
Источник

Код генерации и настройки текстуры:

Вершинный шейдер

Как правило, при использовании тесселяции вершинный шейдер получается очень ленивым, так как с него начинается конвейер, а геометрии как таковой ещё нет. В нашем случае вершинный шейдер тривиален. В нём мы просто отправим точку со входа сразу на выход:

Тесселяция

Аппаратная тесселяция — это мощная техника повышения детализации полигональных моделей средствами GPU. Не путайте с алгоритмами разбиения полигонов на треугольники, выполняемыми на центральном процессоре. Аппаратная тесселяция состоит из трёх стадий графического конвейера, две из которых можно программировать (выделены жёлтым):

Подробнее о шейдерах и их входах/выходах рассказано ниже. Здесь стоит сказать, что на вход тесселяции подаётся патч, состоящий из произвольного количества вершин, которое фиксировано для каждого вызова glDraw* и ограничено как минимум числом 32. Атрибуты этих вершин не имеют каких либо выделенных значений, а значит в обоих шейдерах программист волен интерпретировать их как угодно. Это даёт поистине фантастические возможности по сравнению со старыми вершинными шейдерами.

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

Шейдер управления тесселяцией

В общем случае шейдеру управления тесселяцией доступны все вершины входного патча, прошедшие через вершинный шейдер по отдельности. На его вход поступает поступает количество вершин в патче gl_PatchVerticesIn, порядковый номер патча gl_PrimitiveID и порядковый номер выходной вершины gl_InvocationID, о котором позже. Порядковый номер патча gl_PrimitiveID считается в рамках одного вызова glDraw*. Сами данные вершин доступны через массив структур gl_in, объявленный следующим образом:

Этот массив индексируется от нуля до gl_PatchVerticesIn — 1. Наибольший интерес в этом объявлении представляет поле gl_Position, в котором записаны данные с выхода вершинного шейдера. Количество вершин выходного патча задаётся в коде самого шейдера глобальным объявлением:

и оно не обязано совпадать с количеством вершин во входном патче. Количество вызовов шейдера равно количеству выходных вершин. В каждом вызове шейдер имеет доступ ко всем входным вершинам патча, но при этом имеет право записывать только по индексу gl_InvocationID выходного массива gl_out, который объявлен как

Теперь перейдём к более интересному факту. Шейдер может записывать только по индексу gl_InvocationID, однако он может читать выходной массив по любому индексу! Мы помним, что работа шейдеров очень сильно распараллелена, и порядок их вызова не детерминирован. Это накладывает ограничения на совместное использование данных шейдерами, но делает возможным SIMD-параллелизм и даёт компилятору карт-бланш на использование самых суровых оптимизаций. Чтобы эти правила не нарушались, в шейдере управления тесселяцией доступна барьерная синхронизация. Вызов встроенной функции barrier() блокирует исполнение до тех пор, пока все шейдеры патча не вызовут эту функцию. На вызов этой функции наложены серьёзные ограничения: её нельзя вызывать из любой функции, кроме main, её нельзя вызывать ни в одной конструкции управления потоком (for, while, switch), и её нельзя вызывать после return.

И, наконец, самое интересное на этой стадии конвейера: выходные данные вершин — не главное. Полигоны будут собираться не из координат, записанных в gl_out. Основным продуктом шейдера управления тесселяцией является запись в следующие выходные массивы:

Эти массивы управляют количеством вершин в так называемых абстрактных патчах, и именно поэтому данная стадия называется управлением тесселяцией. Абстрактный патч — это набор точек двумерной геометрической фигуры, который генерируется на стадии tessellation primitive generation. Абстрактные патчи бывают трёх видов: треугольники, квадраты и изолинии. При этом для каждого вида абстрактного патча шейдер должен заполнить только нужные ему индексы gl_TessLevelOuter и gl_TessLevelInner, а остальные индексы этих массивов игнорируются. Генерируемый патч содержит не только вершины геометрической фигуры, но и координаты точек на границах и внутри фигуры. Например, квадрат при некоторых значениях gl_TessLevelOuter и gl_TessLevelInner будет сформирован из треугольников такого вида:

Левый нижний угол квадрата всегда имеет координату [0; 0], правый верхний — [1; 1], а все остальные точки будут иметь соответствующие координаты со значениями от 0 до 1.

Изолинии — это по сути тоже квадрат, разбитый на прямоугольники, а не на треугольники. Значения координат точек на изолиниях так же будут принадлежать интервалу от 0 до 1.

А вот координаты внутри треугольника устроены принципиально по-другому: в двумерном треугольнике используются трёхкомпонентные барицентрические координаты. При этом их значения так же лежат в отрезке от 0 до 1, а треугольник является равносторонним.

Конкретный вид разбиения (которое, собственно, и называется тесселяцией в изначальном смысле) абстрактного патча сильно зависит от gl_TessLevelOuter и gl_TessLevelInner. Мы здесь не будем останавливаться на нём подробно, как и не будем разбирать чем Inner отличается от Outer. Всё это подробно изложено в соответствующем разделе руководства по OpenGL.

Теперь вернёмся к нашим растениям. На данном этапе графического конвейера мы ещё не можем выполнить какие-либо осмысленные преобразования над имеющейся единственной точкой, поэтому на выход этого шейдера подадим входную вершину без изменений:

Для генерации геометрии мы будем использовать прямоугольную решётку, то есть абстрактный патч типа «изолинии». Генерация изолиний управляется только двумя переменными: gl_TessLevelOuter[0] — количество точек по координате y, и gl_TessLevelOuter[1] — количество точек по x. В нашей программе цикл по y будет пробегать по стеблям куста, а для каждого стебля цикл по x будет пробегать вдоль стебля. Поэтому количество стеблей (четвёртую координату входной точки) мы записываем на соответствующий выход:

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

Со стороны CPU перед каждым вызовом glDraw* заполняются однородные переменные:

Первая из них — это координаты камеры в пространстве, а вторая — направление взгляда. Зная положение камеры, направление взгляда и координату куста, мы можем узнать, находится ли этот куст позади камеры:

Если куст находится спереди, то угол между направлением из камеры вперёд и из камеры на куст будет острым, в противном случае — тупым. Соответственно, в первом случае скалярное произведение изображённых на рисунке векторов будет больше нуля, а во втором — меньше. Вычислим скалярное произведение и воспользуемся функцией step со ступенькой в нуле, чтобы получить переменную, которая равна нулю, если куст позади и единице если он спереди:

Наконец, мы можем записать количество точек для стеблей будущего куста:

Шейдер тесселяции

Замечание о терминологии: в английском оригинале этот шейдер называется Tesselation evaluation shader. В русском интернете можно найти дословные переводы вроде «шейдер оценки тесселяции» или «шейдер вычисления тесселяции». Они выглядят неуклюже и, на мой взгляд, не отражают суть этого шейдера. Поэтому здесь tesselation evaluation shader будет называться просто шейдером тесселяции, в отличие от предыдущей стадии, где был шейдер управления тесселяцией.

Тесселяция включается только если в шейдерную программу добавлен шейдер тесселяции. При этом шейдер управления тесселяцией не является обязательным: его отсутствие равносильно подаче входного патча на выход без изменений. Значения массивов gl_TessLevel* при этом можно задать со стороны CPU вызовом glPatchParameterfv с параметром GL_PATCH_DEFAULT_OUTER_LEVEL или GL_PATCH_DEFAULT_INNER_LEVEL. В этом случае все абстрактные патчи в шейдере тесселяции будут одинаковыми. Добавление в программу только шейдера управления тесселяцией не имеет смысла и приводит к ошибке компоновки шейдера. Вид абстрактного патча, в отличие от его параметров, определяется в коде шейдера тесселяции:

Шейдер тесселяции вызывается для каждой точки абстрактного патча. Например, если мы заказали изолинии с точками 64х64, то шейдер будет вызван 4096 раз. На его вход поступают все вершины с выхода шейдера управления тесселяцией:

а так же уже знакомые нам gl_PatchVerticesIn, gl_PrimitiveID, gl_TessLevelOuter и gl_TessLevelInner. Две последние переменные имеют тот же самый тип, что и в шейдере управления тесселяцией, но доступны только на чтение. Наконец, самая интересная входная переменная — это

В ней находятся координаты текущей (для данного вызова) точки абстрактного патча. Она объявлена как vec3, однако gl_TessCoord.z имеет смысл только для треугольников. Чтение этой координаты для квадратов или изолиний не определено.

На выход шейдера можно подать несколько переменных. Главная из них — vec4 gl_Position, в которую нужно записывать координаты вершин, из которых будут собраны примитивы для следующей стадии конвейера. В нашем случае это последовательность отрезков, т.к. шейдер тесселяции изготавливает только скелет для будущего куста.

Итак, у нас есть много (вплоть до 4096) вершин абстрактного патча, организованных в линии, которые разбиты на равные отрезки. Если мы отрисуем эту фигуру в виде линий без изменений:

то увидим нечто, похожее на картинки в документации:


Здесь и далее на скриншотах вид немного сбоку

Как же сделать из этих линий стебли? Для начала поставим их вертикально:

и научимся располагать их по кругу, поворачивая вокруг вертикальной оси:

Однако, такие линии больше похожи на забор, чем на куст. Чтобы сделать наш куст натуральнее, давайте изогнём линию как кубическую кривую Безье:

Картинка из Википедии, статья про кривые Безье.

И здесь очень пригодится координата gl_TessCoord.x, про которую мы условились думать, что она пробегает вдоль каждого стебля от нуля до единицы. Вид кривой полностью зависит от опорных точек P… P3. Низ стебля у нас всегда будет располагаться на земле, а его верх должен обязательно смотреть в сторону неба, поэтому примем P = (0; 0). А для выбора хотя бы приблизительного положения оставшихся свободных точек прекрасно подойдёт сайт cubic-bezier.com, единственной целью которого является построение кривой требуемого вида. Теперь если gl_TessCoord.x подставить в формулу кривой Безье, то получится ломаная, вершины которой лежат на кривой, а отрезки аппроксимируют кривую:

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

Для однозначного задания плоскости нам нужен ещё один вектор. В нашем случае вся кривая расположена в вертикальной плоскости XY, а значит главная нормаль к расположена в ней же. Поэтому бинормаль к кривой достаётся нам даром — это всего лишь постоянный вектор (0; 0; 1). Теперь мы вспоминаем, что из уютной плоскости XY стебель поворачивается вокруг начала координат, а значит и нормальную плоскость тоже надо повернуть. Для этого достаточно умножить оба её образующих вектора на ту же матрицу поворота, что и точки стебля. Собираем всё воедино:

Читайте также:  Компьютер не видит сканер что делать

И для наглядности уменьшим детализацию стеблей. Нормали отрисованы красным, а бинормали — синим:

Теперь коротко об анимации. Во-первых, стебли шевелятся сами по себе. Это сделано через круговое вращение опорных точек кривой вокруг других, первоначальных точек. При этом положение первоначальных точек и начальная фаза вращения зависят от случайной величины (помните случайную одномерную текстуру?), которая, в свою очередь, зависит от gl_TessCoord.y и gl_PrimitiveID. Таким образом, каждый стебель в каждом кусте шевелится по своему, что создаёт иллюзию хаоса. А так как шевеление сделано через передвижение опорных точек, то нормали и бинормали остаются полностью корректными. По сути, у нас получилась скелетная анимация, у которой кости генерируются налету, а не занимают память.

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

взятую от координаты вдоль стебля t1. Пользовательские параметры ветра называются «скоростью» и «турбулентностью» чисто условно, потому что их изменение в доступном пользователю диапазоне похоже на изменение этих параметров воздушного потока. Тем не менее, этот «ветер» не имеет никакого отношения к реальной физике. Ползунок скорости в интерфейсе намеренно ограничен небольшой величиной, потому что ветер применяется к скелету уже после вычисления нормалей без их корректировки. Из-за этого нормали перестают быть таковыми, и при сильном искажении скелета (большой «скорости» ветра), появляются самопересечения полигонов.

Зачем шум Перлина, если есть «шумная» текстура? Дело в том, что значения текстуры не являются непрерывной функцией от координаты, в отличие от шума Перлина. Поэтому, если в каждом кадре делать смещение, зависящее от шумной текстуры, мы получим хаотичное дёрганье с частотой кадров вместо плавного ветра. Качественная реализация шумов Перлина взята у Стефана Густавсона.

Что ещё понадобится для наращивания полигонов? Во-первых, толщина стебля должна уменьшаться от корня к верхушке. Поэтому заведём соответствующую выходную переменную и передадим в неё толщину, зависящую от координаты вдоль стебля:

Саму координату вдоль стебля и номер стебля в кусте тоже передадим дальше по конвейеру:

Они понадобятся нам при наложении текстуры.

Геометрический шейдер

Наконец мы подошли к завершению геометрической части нашего пути. На вход геометрического шейдера мы получаем примитивы целиком. Если на входе стадии тесселяции были произвольные патчи, которые могли содержать приличное количество данных, то здесь примитивы — это точки, линии, либо треугольники. Если шейдеры тесселяции отсутствуют, то на вход геометрического шейдера появляются примитивы (как правило, треугольники) из вызова glDraw*, которые, возможно, было повершинно обработаны вершинным шейдером. В нашем же случае тесселяция выдаёт изолинии, которые мы принимаем в виде отрезков, то есть пар вершин:

Эти вершины записаны во встроенный входной массив

который в нашем случае можно индексировать только нулём иди единицей. Пользовательские входные переменные так же определены как массивы с тем же диапазоном индексов:

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

Шейдер вызывается для каждого входного примитива и может выдать несколько примитивов. Это делается с помощью двух встроенных функций. Как и на предыдущих стадиях, выходная переменная называется gl_Position. После её заполнения шейдер должен вызвать встроенную функцию EmitVertex(), чтобы сообщить видеокарте об окончании формирования вершины. По окончании формирования всех вершин примитива вызывается функция EndPrimitive();

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

Например, вот так выглядит куст из 5-секторных стеблей с неинтерполированными (flat) координатами и нормалями фрагментов для наглядности:

А вот код, реализующий описанный подход:

Фрагментный шейдер

Фрагментный шейдер выглядит довольно стандартно, поэтому расскажу о нём коротко. В нём обычное освещение по Фонгу суммируется с процедурной текстурой в виде клеток на основе диаграммы Вороного, взятой у уже знакомого нам Стефана Густавсона. Цвет «текселя» зависит не только от текстурных координат, но так же от времени (номера кадра) и от номера стебля в кусте:

Таким образом, клетки плавно «ползут» по стеблю, выглядя разными на различных стеблях.

На этом путь данных по графическому конвейеру заканчивается, а значит самое время подвести итог.

Зачем?

Итак, что же мы выиграли по сравнению с более традиционными подходами? Ответ: память, гибкость и экономию пропускной способности. При попытке сделать анимацию аналогичной гибкости другим способом, нам пришлось бы делать что-то из этого:

  • Стримить геометрию в видеопамять, а заодно и грузить центральный процессор. Это самый лобовой способ, так вряд ли кто-то делает для таких объёмов данных.
  • Хранить в памяти кости и использовать геометрический шейдер. Но тогда скорее всего понадобились бы дополнительные атрибуты вершин под какие-нибудь метаданные, плюс проброс больших объёмов данных через однородные переменные.
  • Пожертвовать хаотичностью анимации или добавить больше случайных величин. Это вылилось бы в большие объемы текстур со случайными данными или же в большее количество вычислений шума Перлина.

Полезные ссылки

Большая часть ссылок уже находится в тексте. Здесь я хотел бы оставить полезные ссылки, которые были использованы в ходе работы над демкой:

СОДЕРЖАНИЕ

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

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

В 1619 году Иоганн Кеплер провел раннее задокументированное исследование мозаики. Он писал о регулярных и полурегулярных мозаиках в своей Harmonices Mundi ; Возможно, он был первым, кто исследовал и объяснил шестиугольную структуру сот и снежинок .

Примерно двести лет спустя, в 1891 году, русский кристаллограф Евграф Федоров доказал, что каждое периодическое разбиение плоскости имеет одну из семнадцати различных групп изометрий. Работа Федорова положила начало неофициальному началу математического исследования мозаики. Среди других выдающихся авторов — Алексей Шубников и Николай Белов (1964), а также Генрих Хеш и Отто Кинцле (1963).

Этимология

На латыни тесселла — это небольшой кубический кусок глины , камня или стекла, используемый для изготовления мозаики. Слово «тесселла» означает «маленький квадрат» (от tessera , квадрат, которое, в свою очередь, происходит от греческого слова τέσσερα, означающего четыре ). Это соответствует повседневному термину « черепица» , который относится к нанесению мозаики, часто сделанной из глазурованной глины.

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

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

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

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

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

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

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 1

Вертикальная синхронизация

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

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

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

Впрочем, есть у Vsync и недостатки. Главная — очень заметный «инпут-лаг», задержка между вашими командами (например, движениями мыши) и их отображением в игре.

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

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

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

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

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 2

Сглаживание (Anti-aliasing)

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

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 3

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

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

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

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

От ничтожного (FXAA) до колоссального (SSAA). В среднем — умеренное.

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 4

Качество текстур

Один из самых важных параметров в настройках игры. Поверхности всех предметов во всех современных трехмерных играх покрыты текстурами, а потому чем выше их качество и разрешение — тем четче, реалистичнее картинка. Даже самая красивая игра с ультра-низкими текстурами превратится в фестиваль мыловарения.

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

Если в видеокарте достаточно видеопамяти, то практически никакого. Если же ее не хватает, вы получите ощутимые фризы и тормоза. 4 гигабайт VRAM хватает для подавляющего числа современных игр, но лучше бы в вашей следующей видеокарте памяти было 8 или хотя бы 6 гигабайт.

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 5

Анизотропная фильтрация

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

Чем выше степень фильтрации, чем четче будут поверхности в отдалении.

Этот параметр влияет на общее качество картинки довольно сильно, но систему при этом практически не нагружает, так что в графе «фильтрация текстур» советуем всегда выставлять 8x или 16x. Билинейная и трилинейная фильтрации уступают анизотропной, а потому особенного смысла в них уже нет.

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

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 6

Тесселяция

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

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

Зависит от игры, от того, как именно движок применяет ее к объектам. Чаще всего — среднее.

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 7

Качество теней

Все просто: чем выше этот параметр, тем четче и подробнее тени, отбрасываемые объектами. Добавить тут нечего. Иногда в играх также встречается параметр «Дальность прорисовки теней» (а иногда он «вшит» в общие настройки). Тут все тоже понятно: выше дальность — больше теней вдалеке.

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

Зависит от игры. Чаще всего разница между низкими и средними настройками не столь велика, а вот ультра-тени способны по полной загрузить ваш ПК, поскольку в этом случае количество объектов, отбрасывающих реалистичные тени, серьезно вырастает.

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 8

Глобальное затенение (Ambient Occlusion)

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

Существует два основных вида глобального затенения:

SSAO (Screen space ambient occlusion). Впервые появилось в Crysis — потому тот и выглядел для своего времени совершенно фантастически. Затеняются пиксели, заблокированные от источников света.

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

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 9

Глубина резкости (Depth of Field)

То самое «боке», которое пытаются симулировать камеры большинства современных объектов. В каком-то смысле это имитация особенностей человеческого зрения: объект, на который мы смотрим, находится в идеальном фокусе, а объекты на фоне — размыты. Чаще всего глубину резкости сейчас используют в шутерах: обратите внимание, что когда вы целитесь через мушку, руки персонажа и часть ствола чаще всего размыты.

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

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

Целиком и полностью зависит от игры. От ничтожного до довольно сильного (как, например, в Destiny 2).

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 10

Bloom (Свечение)

Этот параметр отвечает за интенсивность источников света в игре. Например, с включенным Bloom, свет, пробивающийся из окна в помещение, будет выглядеть куда ярче. А солнце создавать натуральные «засветы». Правда, некоторые игры выглядят куда реалистичнее без свечения — тут нужно проверять самому.

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

Чаще всего — низкое.

Гайд. За что отвечают настройки графики в играх и как они влияют на FPS | Канобу - Изображение 11

Motion Blur (Размытие в движении)

Motion Blur помогает передать динамику при перемещениях объекта. Работает он просто: когда вы быстро двигаете камерой, изображение начинает «плыть». При этом главный объект (например, руки персонажа с оружием) остается четким.

Поговорим о тесселяции в DirectX 11

Вы наверняка помните серию недавних скринов. Тогда Кристина Коффин сказала, единственное что я вижу на скринах – так это отключенную тесселяцию…

Tessellator (модуль тесселяции)

Тесселяция не является совершенно новой технологией, впервые её стали использовать видеопроцессоры Xenos, которые были разработаны компанией AMD для игровых консолей Xbox 360 в 2005 году. Однако модуль тесселяции использованный в DirectX 11 является более устойчивым и гибким, нежели модуль, использованный в графических процессорах Xenos.

Тесселяция – увеличения количества полигонов

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

Все стадии обрабатываются в графическом процессоре

Процесс тесселяции предмета начинается в Hull Shader (поверхностный шейдер) – он берет контрольные точки и вычисляет нужный уровень тесселяции. После этой базисной реорганизации контрольные точки отправляются в Domain Shader (доменный шейдер) – тесселятор абсолютно ничего не знает о контрольных точках. Вместо этого тесселятору предоставляют некоторое количество параметров тесселяции, которые задают ему требуемый уровень тесселяции на определенном патче (особые минимальные кусочки объекта). Hull Shader сообщает тесселятору, в каком порядке он должен работать – разработчик сможет определить, каким методом произойдет процесс тесселяции, поскольку модуль тесселяции располагает фиксированным комплектом функций, у него есть несколько операционных режимов. Тесселятор берет то, что было подано ему из Hull Shader и действует в патче над формированием требуемой добавочной геометрии. Как только эта стадия будет завершена, он выдаст доменные точки (domain points) и данные топологии. Доменные точки подаются в Domain Shader, который создает на их основе вершины, доступные прочей части конвейера. Одновременно данные топологии адресуются прямо на этап сборки примитивов конвейера – это совершается потому, что данные шейдерам не нужны, они подготовлены для растеризатора. Здесь нужно отметить то, что на всех этапах стадии тесселяции работа ведется не с треугольниками – вместо этого обрабатываются патчи и точки. Патчи представляют собой кривые или области поверхности и практически всегда являются четырехугольниками. Это первый случай, когда DirectX использует в качестве примитивов не треугольники, и это является существенным шагом вперед.

Читайте также:  Kaspersky Anti-Virus 19.0.0.1088 RC

Минимальный уровень тесселяции

Максимальный уровень тесселяции

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

Преимущества тесселяции

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

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

Без тесселяции

Тесселяция включена

Без тесселяции

Тесселяция включена

Без тесселяции

Тесселяция включена

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

Тесселяция в играх что это

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

Анизотропная фильтрация

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

Настройки графики в играх на что они влияют? Настройки графики в играх на что они влияют?
трилинейная анизотропная

Билинейная фильтрация является самым простым алгоритмом и требует меньше вычислительной мощности, однако и дает наихудший результат. Трилинейная добавляет четкости, но по-прежнему генерирует артефакты. Наиболее продвинутым способом, устраняющим заметные искажения на объектах, сильно наклоненных относительно камеры, считается анизо­тропная фильтрация. В отличие от двух предыдущих методов она успешно борется с эффектом ступенчатости (когда одни части текстуры размываются сильнее других, и граница между ними становится явно заметной). При использовании билинейной или трилинейной фильтрации с увеличением расстояния текстура становится все более размытой, анизотропная же этого недостатка лишена.

Учитывая объем обрабатываемых данных (а в сцене может быть множество 32-битовых текстур высокого разрешения), анизотропная фильтрация особенно требовательна к пропускной способности памяти. Уменьшить трафик можно в первую очередь за счет компрессии текстур, которая сейчас применяется повсеместно. Ранее, когда она практиковалась не так часто, а пропуская способность видеопамяти была гораздо ниже, анизотропная фильтрация ощутимо снижала количество кадров. На современных же видеокартах она почти не влияет на fps.

Анизотропная фильтрация имеет лишь одну настройку – коэффициент фильтрации (2x, 4x, 8x, 16x). Чем он выше, тем четче и естественнее выглядят текстуры. Обычно при высоком значении небольшие артефакты заметны лишь на самых удаленных пикселах наклоненных текстур. Значений 4x и 8x, как правило, вполне достаточно для избавления от львиной доли визуальных искажений. Интересно, что при переходе от 8x к 16x снижение производительности будет довольно слабым даже в теории, поскольку дополнительная обработка понадобится лишь для малого числа ранее не фильтрованных пикселов.

Шейдеры

Шейдеры – это небольшие программы, которые могут производить определенные манипуляции с 3D-сценой, например, изменять освещенность, накладывать текстуру, добавлять постобработку и другие эффекты.

Шейдеры делятся на три типа: вершинные (Vertex Shader) оперируют координатами, геометрические (Geometry Shader) могут обрабатывать не только отдельные вершины, но и целые геометрические фигуры, состоящие максимум из 6 вершин, пиксельные (Pixel Shader) работают с отдельными пикселами и их параметрами.

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

Шейдеры очень продуктивно работают в параллельном режиме, и именно поэтому в современных графических адаптерах так много потоковых процессоров, которые тоже называют шейдерами. Например, в GeForce GTX 580 их целых 512 штук.

Parallax mapping

Parallax mapping – это модифицированная версия известной техники bumpmapping, используемой для придания текстурам рельефности. Parallax mapping не создает 3D-объектов в обычном понимании этого слова. Например, пол или стена в игровой сцене будут выглядеть шероховатыми, оставаясь на самом деле абсолютно плоскими. Эффект рельефности здесь достигается лишь за счет манипуляций с текстурами.

Настройки графики в играх на что они влияют?

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

Parallax mapping существенно экономит вычислительные ресурсы компьютера, поскольку при использовании объектов-аналогов со столь же детальной 3D-структурой производительности видеоадаптеров не хватало бы для просчета сцен в режиме реального времени.

Эффект чаще всего применяется для каменных мостовых, стен, кирпичей и плитки.

Anti-Aliasing

До появления DirectX 8 сглаживание в играх осуществлялось методом SuperSampling Anti-Aliasing (SSAA), известным также как Full-Scene Anti-Aliasing (FSAA). Его применение приводило к значительному снижению быстродействия, поэтому с выходом DX8 от него тут же отказались и заменили на Multisample Аnti-Аliasing (MSAA). Несмотря на то что данный способ давал худшие результаты, он был гораздо производительнее своего предшественника. С тех пор появились и более продвинутые алгоритмы, например CSAA.

Настройки графики в играх на что они влияют? Настройки графики в играх на что они влияют?
AA off AA on

Учитывая, что за последние несколько лет быстродействие видеокарт заметно увеличилось, как AMD, так и NVIDIA вновь вернули в свои ускорители поддержку технологии SSAA. Тем не менее использовать ее даже сейчас в современных играх не получится, поскольку количество кадров/с будет очень низким. SSAA окажется эффективной лишь в проектах предыдущих лет, либо в нынешних, но со скромными настройками других графических параметров. AMD реализовала поддержку SSAA только для DX9-игр, а вот в NVIDIA SSAA функционирует также в режимах DX10 и DX11.

Принцип работы сглаживания очень прост. До вывода кадра на экран определенная информация рассчитывается не в родном разрешении, а увеличенном и кратном двум. Затем результат уменьшают до требуемых размеров, и тогда «лесенка» по краям объекта становится не такой заметной. Чем выше исходное изображение и коэффициент сглаживания (2x, 4x, 8x, 16x, 32x), тем меньше ступенек будет на моделях. MSAA в отличие от FSAA сглаживает лишь края объектов, что значительно экономит ресурсы видеокарты, однако такая техника может оставлять артефакты внутри полигонов.

Раньше Anti-Aliasing всегда существенно снижал fps в играх, однако теперь влияет на количество кадров незначительно, а иногда и вовсе никак не cказывается.

Тесселяция

С помощью тесселяции в компьютерной модели повышается количество полигонов в произвольное число раз. Для этого каждый полигон разбивается на несколько новых, которые располагаются приблизительно так же, как и исходная поверхность. Такой способ позволяет легко увеличивать детализацию простых 3D-объектов. При этом, однако, нагрузка на компьютер тоже возрастет, и в ряде случаев даже не исключены небольшие артефакты.

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

Технология тесселяции известна в кинематографе еще с 80-х го­дов, однако в играх она стала поддерживаться лишь недавно, а точнее после того, как графические ускорители наконец достигли необходимого уровня производительности, при котором она может выполняться в режиме реального времени.

Чтобы игра могла использовать тесселяцию, ей требуется видеокарта с поддержкой DirectX 11.

Вертикальная синхронизация

V-Sync – это синхронизация кадров игры с частотой вертикальной развертки монитора. Ее суть заключается в том, что полностью просчитанный игровой кадр выводится на экран в момент обновления на нем картинки. Важно, что очередной кадр (если он уже готов) также появится не позже и не раньше, чем закончится вывод предыдущего и начнется следующего.

Настройки графики в играх на что они влияют?

Если частота обновления монитора составляет 60 Гц, и видео­карта успевает просчитывать 3D-сцену как минимум с таким же количеством кадров, то каждое обновление монитора будет отображать новый кадр. Другими словами, с интервалом 16,66 мс пользователь будет видеть полное обновление игровой сцены на экране.

Следует понимать, что при включенной вертикальной синхронизации fps в игре не может превышать частоту вертикальной развертки монитора. Если же число кадров ниже этого значения (в нашем случае меньше, чем 60 Гц), то во избежание потерь производительности необходимо активировать тройную буферизацию, при которой кадры просчитываются заранее и хранятся в трех раздельных буферах, что позволяет чаще отправлять их на экран.

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

Post-processing

Это общее название всех эффектов, которые накладываются на уже готовый кадр полностью просчитанной 3D-сцены (иными словами, на двухмерное изображение) для улучшения качества финальной картинки. Постпроцессинг использует пиксельные шейдеры, и к нему прибегают в тех случаях, когда для дополнительных эффектов требуется полная информация обо всей сцене. Изолированно к отдельным 3D-объектам такие приемы не могут быть применены без появления в кадре артефактов.

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 способно добавить кинематографичности в происходящее на экране.

Настройки графики в играх на что они влияют? Настройки графики в играх на что они влияют?

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

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

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

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

Cel shading

Игры с эффектом Cel shading начали делать с 2000 г., причем в первую очередь они появились на консолях. На ПК по-настоящему популярной данная техника стала лишь через пару лет, после выхода нашумевшего шутера XIII. С помощью Cel shading каждый кадр практически превращается в рисунок, сделанный от руки, или фрагмент из детского мультика.

Настройки графики в играх на что они влияют?

В похожем стиле создают комиксы, поэтому прием часто используют именно в играх, имеющих к ним отношение. Из последних известных релизов можно назвать шутер Borderlands, где Cel shading заметен невооруженным глазом.

Особенностями технологии является применение ограниченного набора цветов, а также отсутствие плавных градиентов. Название эффекта происходит от слова Cel (Celluloid), т. е. прозрачного материала (пленки), на котором рисуют анимационные фильмы.

Depth of field

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

Настройки графики в играх на что они влияют?

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

Лицезреть эффект глубины резкости в гипертрофированной форме можно на некоторых фотографиях. Именно такую степень размытия часто и пытаются симулировать в 3D-сценах.

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

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

Чтобы выяснить, как включение тех или иных опций сказывается на производительности, мы воспользовались игровым бенчмарком 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 кадров/с.

Ссылка на основную публикацию