Каково современное состояние геометрического LOD в играх?

15

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

  1. Как выглядит конвейер активов? Делают ли художники высокополигональную модель, которую потом уничтожают? Если да, то какие алгоритмы прореживания наиболее популярны? Сетки LOD иногда делаются вручную?
  2. Как двигатели переходят между различными объектными LOD во время выполнения? Есть ли плавные или прогрессивные переходы?

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

ap_
источник
1
У достижений SIGGRAPH 2014 в рендеринге в реальном времени есть действительно интересный разговор о поверхностях подразделений Call of Duty. Вам стоит это увидеть. Вместо того, чтобы иметь сетку с высоким поли, которая сделана более низкой, они аналитически определили формы и добавили больше треугольников по мере необходимости
Алан Вулф
Мы можем поговорить о состоянии дел в алгоритмах LOD и структурах данных здесь, но если вопрос заключается в том, как современные игры делают это конкретно, вам, возможно, повезет больше, задав вопрос в gamedev.se: gamedev.stackexchange.com
Pseudonym
3
Сомневаюсь. Игра Dev очень светлая графика. В основном это вопросы о единстве и java с некоторыми вопросами поиска путей и фиксированной частотой кадров: p
Алан Вулф
1
@Alan, Activision использовала множество современных алгоритмов, чтобы создать настоящую трехмерную стратегическую игру, а не изометрическую базовую Sprite, с которой я согласен, но они проделали большую работу в COD, хотя она все еще немного вялая и ленивая даже на ранних уровнях с небольшим количеством активов (я говорю об их мобильной игре на Iphone 5s). Я думаю, что вам нужно изучить особенности экспертов OpenGLES и нижележащие слои, чтобы успешно написать такую ​​игру.
Иман
Я говорю об их консольной версии Call of Duty на случай, если это прояснится.
Алан Вульф

Ответы:

22

Для геометрии LOD большинство игр просто переключаются между несколькими предопределенными сетками LOD. Например, «Infamous: Second Son» использует 3 сетки LOD ( Адриан Бентли - «inFAMOUS: Посмертное состояние двигателя второго сына», GDC 2014 ), а «Killzone: Shadow Fall» использует 7 сеток LOD на персонажа ( Michal Valient - «Killzone: Shadow fall» демо посмертно ", Devstation2013 ). Большинство из них генерируются, но более важные (например, главный герой) могут быть сделаны вручную. Сетки часто создаются с использованием популярного промежуточного программного обеспечения Simplygon, но иногда они просто создаются графическими художниками в их любимом 3D-пакете.

В играх с большим расстоянием прорисовки дополнительно используются самозванцы для листвы, деревьев и высотных зданий ( Адриан Бентли - «Бедный после смерти двигателя второго сына», GDC 2014 ). Они также используют иерархические LOD, которые заменяют набор объектов одним. Например, в «Just Cause 2» деревья сначала визуализируются индивидуально как обычные LOD-сетки, затем индивидуально как самозванцы и, наконец, как единая объединенная лесная сетка ( Эмиль Перссон, Джоэль де Валь - «Заполнение массового игрового мира», Siggraph2013 ) и в Отдаленные части мира «Sunset Overdrive» заменяются одной автоматически созданной автономной сеткой ( Elan Ruskin - «Потоковый открытый мир Sunset Overdrive», GDC2015 ).

Другим компонентом системы LOD является упрощение материалов и шейдеров. Например, «Killzone: Shadow Fall» отключает касательное пространство и нормальное отображение для удаленных LOD ( Michal Valient - «Killzone: Shadow fall demo postmortem», Devstation2013 ). Обычно это реализуется путем глобального отключения набора функций шейдеров для каждого LOD, но для движков с графами шейдеров, где художники могут создавать собственные шейдеры, это необходимо сделать вручную.

Для переходов LOD некоторые игры просто переключают сетки, а некоторые используют сглаживание для плавных переходов LOD - при переключении LOD визуализируются две сетки: первая постепенно исчезает, а вторая исчезает ( Блог Саймона Шрайбта - «Assassins Creed 3 - LoD Blending» ). Классические методы прогрессивной сетки ЦП не используются, поскольку они требуют дорогостоящего обновления сетки и загрузки в графический процессор. Аппаратная тесселяция используется в нескольких заголовках, но только для уточнения самого подробного LOD, поскольку она медленная и в общем случае не может заменить предопределенные геометрические LOD.

Terrain LOD обрабатываются отдельно, чтобы использовать его специфические свойства. Геометрия ландшафта LOD обычно реализуется с использованием клип-карт ( Marcin Gollent - «Создание и рендеринг ландшафта в REDengine 3» ). Материалы LOD ландшафта либо обрабатываются аналогично сеткам LOD, либо используют какую-то виртуальную текстуру Ка Чен - «Адаптивный рендеринг виртуальных текстур в Far Cry 4» .

Наконец, если вам интересно увидеть реальные конвейеры игровых LOD, просто просмотрите документацию любого из современных игровых движков: Unreal Engine 4 - «Создание и использование LOD» , CryEgnine - статический LOD и Unity - LOD .

Кшиштоф Наркович
источник
1
игровые движки обычно имеют набор предопределенных методов, и вы не можете понять суть фактического изменения алгоритма LOD. я прав? Я говорил о том, что вы сами пишете игру с платформой OpenGL или SpriteKit. Не знаю, можно ли настроить алгоритм LOD в Unity или Unreal, это возможно?
Иман
3

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

  1. Показать / скрыть слои (группы объектов одного типа) в зависимости от величины (масштаб отображения).

  2. Метод, основанный на алгебраической геометрии, называется обобщением (это алгоритм для упрощения многоугольников). посмотрите на следующую картинку

    обобщение

Самый известный и эффективный метод обобщения (упрощения) многоугольной сетки известен как теорема Декарта-Эйлера (уравнение 4.5, извините, если я ссылаюсь на книгу, это было лучше, чем я могу сделать) и используется большинством пространственных баз данных. например модули PostGIS в PostgreSQL. Он просто удаляет меньшие стороны многоугольника и делает его очень округлым (рисунок выше).

Чтобы внедрить LOD в игру, вам нужно сохранять и управлять масштабом вашей карты (сцены) во время операций увеличения / уменьшения масштаба. Масштаб изменяется от нуля до бесконечности, и вы должны разделить это на определенное количество диапазонов, например что-то вроде этого:

  1. 1 / ноль = бесконечность до 1/50
  2. 1/50 до 1/100
  3. 1/100 до 1/1000
  4. 1/1000 до 1 / бесконечность = 0

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

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

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

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

Однако предположим, что вы реализуете полную трехмерную игру с openGl и хотите отфильтровать некоторые сетки перед их переносом на графическое оборудование, и я уверен, что это поможет вам сократить операции связывания / открепления с буферными объектами и массивами вершин (VBO, VAO), пока дело с OpenGl.

Использование только управления слоями или просто реализация обобщения Эйлера

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

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

PS: увеличение - это число с плавающей точкой> 0, которое равно 1 / шкала, а масштаб обычно <1, поскольку шкала 1: 1 означает, что в вашей игре есть длины реального мира.

Иман
источник
Вниз, избиратель, пожалуйста, примите во внимание, что вы голосуете снова, если он все еще -1, рассмотрите возможность оставить комментарий для меня. Спасибо
Иман
Я не понизил голос, но часть меня задается вопросом, каково состояние искусства здесь? Так что я тоже не могу голосовать.
Джуджаа
1
Я понизил голосование, потому что это было трудно читать, и ИМХО, это не относится к LOD в играх. После пересмотра я решил отменить мой donwvote, добавив свой собственный ответ.
Кшиштоф Наркович
Уровень техники предполагает очень выдающуюся работу, но разные методы приводят к разным результатам в разных случаях, например, Call of duty имеет управление слоями и mipmapping, однако Dear haunting (DH 2014) использует фон с параллаксом и mipmapping, которые предварительно преобразованы в обобщенные. текстуры. Subway Surfer - совершенно другая история, и я говорю всем о современном состоянии, даже несмотря на то, что Subway Surfer дискретно рисует здания и другие городские объекты, или Call of Duty немного вялый при масштабировании или панорамировании. Я думаю, что они все лучшие в своем деле.
Иман
3

Иман уже подготовил полный ответ, но я хочу кое-что добавить к нему

LOD можно сделать двумя разными способами

  1. Continous, который называется CLOD и является оптимизацией полигональной сетки
  2. Дискретный, который почти любой другой алгоритм, кроме оптимизации полигональной сетки, считается входящим в эту группу.

Например, мипмапинг - хороший, быстрый, но тяжелый, который относится к второй группе выше.

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

Imzich
источник