Який стан мистецтва в геометричному LOD в іграх?


15

Як сучасні ігри роблять деталізацію геометрії для об'єктних сіток, таких як символи, місцевість та листя? У моєму питанні є дві частини:

  1. Як виглядає трубопровід активів? Чи роблять художники високополіграфічну модель, яку згодом зруйнують? Якщо так, то які алгоритми децимації є найпопулярнішими? Чи іноді сітки LOD роблять вручну?
  2. Як двигуни переходять між різними об'єктами LOD під час виконання? Чи є плавні чи прогресивні переходи?

Відповідь може бути "різні студії використовують різні методи". Якщо так, будь ласка, визначте деякі найпоширеніші практики. Було б також чудово, якби ви могли вказати мені на білі шпалери / слайди, які висвітлюють конкретні приклади.


1
Про успіхи рендерингу в реальному часі SIGGRAPH 2014 по-справжньому цікаві розмови щодо поверхонь підрозділу чергових служб. Ви повинні це перевірити. Замість того, щоб мати високу полімережу, яку роблять нижньою полі, вони аналітично визначили фігури та додали більше трикутників за потребою
Алан Вулф,

Тут ми можемо поговорити про найсучасніші алгоритми та структури даних LOD, але якщо питання стосується того, як сучасні ігри роблять це конкретно, можливо, вам пощастить запитати у gamedev.se: gamedev.stackexchange.com
Псевдонім

3
Сумніваюсь у цьому. Ігровий розробник - це дуже графічне світло. Це здебільшого питання єдності та Java з деякими питаннями пошуку шляху та фіксованою частотою кадрів, закинуті: p
Алан Вулф,

1
@Alan, Activision використав багато алгоритму найсучасніших мистецтв, щоб створити справжню 3D-стратегічну гру, а не ізометричну базу Sprite, яку я з цим добре, але вони зробили чудову роботу в COD, проте це все ще трохи мляво і ліниво навіть на ранніх рівнях з невеликою кількістю активів (я кажу про їх мобільну гру на Iphone 5s). Я думаю, що вам потрібно вивчити функції експертів OpenGLES та основні шари, щоб успішно написати таку гру.
Іман

Я говорю про їх консольну версію призову на випадок, якщо це очистить.
Алан Вулф

Відповіді:


23

Для геометрії LOD більшість ігор просто перемикаються між кількома заздалегідь заданими LOD-сітками. Наприклад, "Зрамний: Другий син" використовує 3 сітки LOD ( Адріан Бентлі - "INFAMOUS: Second Son postmortem", GDC 2014 ) та "Killzone: Shadow Fall" використовує 7 сіток LOD на персонажа ( Michal Valient - "Killzone: Shadow fall demo postmortem ", Devstation2013 ). Більшість з них генеруються, але більш важливі (як головний герой) можуть бути зроблені вручну. Мережі часто генеруються за допомогою популярного середнього програмного забезпечення Simplygon, але іноді їх просто генерують графіки в улюбленому 3D-пакеті.

Ігри з великою дистанцією малювання додатково використовують саморобці для листя, дерев та високих будівель ( Адріан Бентлі - "INFAMOUS: Second Son postmortem", GDC 2014 ). Вони також використовують ієрархічні LOD, які замінюють набір об'єктів одним. Наприклад, у "Просто причині 2" дерева спочатку відображаються окремо як звичайні сітки LOD, потім окремо як імпостери та, нарешті, як єдина злита лісова сітка ( Еміль Перссон, Джоел де Валь - "Населення масивного ігрового світу", Siggraph2013 ) та в "Захід Overdrive" віддалених частин світу замінюється єдиною автоматично створеною офлайн-сіткою ( Елан Рускін - "Потоковий відкритий світ Sunset Overdrive", GDC2015 ).

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

Для переходів LOD деякі ігри просто перемикають сітки, а деякі використовують дитрінг для плавних переходів LOD - при перемиканні LOD виводяться дві сітки: перша поступово згасає, а друга затухає ( Simon schreibt Blog - "Assassins Creed 3 - LoD Blending" ). Класичні процесорні прогресивні методи сітки не використовуються, оскільки вони вимагають дорогого оновлення сітки та завантаження в GPU. Технічне обладнання Tessellation використовується в декількох заголовках, але тільки для вдосконалення найбільш детального LOD, оскільки це повільно, і в загальному випадку він не може замінити задану геометрію LOD.

Ландшафти місцевості обробляються окремо з метою використання його властивостей. Геометрія місцевості LOD зазвичай реалізується за допомогою кліпів ( Marcin Gollent - "Створення ландшафту та візуалізація в REDengine 3" ). Місцеві матеріали LOD або обробляються аналогічно сітчастим LOD, або використовують якусь віртуальну текстуру Ka Chen - "Адаптивне віртуальне відображення текстури в Far Cry 4 .

Нарешті, якщо вам цікаво побачити справжні ігрові конвеєри LOD, тоді просто перегляньте документацію будь-якого із сучасних ігрових двигунів: Unreal Engine 4 - «Створення та використання LOD» , CryEgnine - Static 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 миттєво показує невеликий, без текстури прямокутник, щоб показати будівлю далеко, і, наблизившись раптом, він набуває текстури, геймер відчуває це. Ви не говорили про свою проекційну систему, що дуже важливо і не говорили про те, яку гру ви створюєте.

Однак припустимо, що ви реалізуєте повну 3D-гру з openGl і хочете відфільтрувати деякі сітки перед тим, як перенести їх на графічне обладнання, я впевнений, що це допоможе вам зменшити операції зв’язування / розв’язування з буферними об'єктами та вершинними масивами (VBO, VAO). мати справу з OpenGl.

Використовуючи лише управління шарами або просто реалізувати Узагальнення Ейлера

У більшості випадків не потрібно реалізовувати алгоритм узагальнення, а фільтрація об'єктів просто працює і приводить вас до необхідної ефективності (частоти оновлення), однак це повністю залежить від конкретного випадку. Хоча це простий алгоритм, який просто видаляє невеликі сторони багатокутника, вам потрібно визначити поріг, який є добутком величини та постійним числом, тому більші сторони фільтруються в набагато більш далекій точці зору.

Забувши манагменти шару та реалізуючи лише алгоритм узагальнення Eulers, забезпечує дуже акуратний та безперервний метод, при якому ви просто перевіряєте кожну сторону та рядки за попередньо визначеним порогом та показуєте їх лише у випадку, якщо вони є досить великими, щоб їх можна було дискримінувати на екрані.

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


Виборця, будь ласка, врахуйте, що ви проголосуєте ще раз, якщо це все ще -1, Подумайте, залиште коментар для мене. Дякую
Іман

Я не спростував, але частина мене цікавить, що тут мистецтво? Тож я і не можу голосувати.
joojaa

1
Я вважаю, що важко читати, і IMHO не стосується LOD в іграх. Після повторного розгляду я вирішив скасувати свою донорську скаргу, переконавшись, і просто додати власну відповідь.
Кшиштоф Нарковіч

Найсучасніші припущення, мабуть, означають дуже видатну роботу, але різні методи призводять до різного результату в різних випадках, наприклад, Call of duty має управління шаром та мипмейпінг, проте Dear haunting (DH 2014) використовує фон із паралаксами та міпмейпінг, які попередньо узагальнили текстури. Серфер метро - це зовсім інша історія, і я кажу, що це сучасне для всіх, навіть якщо Subway Surfer дискретно малює будівлі та інші міські об’єкти або Call of duty трохи млявий під час збільшення або панорамування. Я думаю, що в їхньому випадку все найкраще.
Іман

3

Іман вже підготував повну відповідь, але я хотів би додати щось до неї

LOD можна зробити двома різними способами

  1. Безперервний, який називається CLOD і є оптимізацією багатокутної сітки
  2. Дискретний, який майже в будь-якому іншому алгоритмі, крім оптимізації багатокутної сітки, вважається в цій групі.

Наприклад, міпмейпінг - це хороший, швидкий, але важкий, який належить до групи відомих вище

тут ви можете знайти хороше пояснення міпмейпінгу та коду реалізації за допомогою OpenGl.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.