Як зробити нескінченний Всесвіт?


15

Мені цікаво, які найкращі практики в індустрії розробки ігор для створення всесвіту 3d?

Щоб бути більш конкретним:

  • Точки даних задані та статичні. Кожна точка має положення, колір та розмір;
  • Весь набір даних набагато більший, ніж наявна пам'ять;
  • Користувач повинен мати можливість "зменшити масштаб", щоб одразу побачити велику картину;

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

Я шукаю технологічне агностическое рішення.


2
Чи плануєте ви мати якусь максимальну відстань перегляду, або у вас є якийсь спосіб об'єднання віддалених точок, щоб вам не довелося відображати їх окремо, або ж "точки" непрозорі і розташовані так, що більшість з них буде бути прихованим від будь-якої точки зору? Тому що якщо жодне з вищезазначених не дотримується, я не бачу жодного способу завадити користувачеві знайти кути камери, з яких більшість точок (або принаймні значна їх частина) будуть видні одночасно.
Ільмарі Каронен

4
До речі, трохи екзотично, але ви розглядали процедурно генеровані дані? Ви не маєте переваги у спеціальних областях для створення, але підсумок полягає в тому, що вміст базується на рівняннях, а не великій кількості даних. Маючи трохи креативності, це може спростити багато речей (:
Алан Вулф,

1
Зменшення / зменшення масштабу для зображення infinite universeможе бути подібним до відстеження відносин між двома точками на деякій кривій Мандельброта після збільшення на різних рівнях. На якомусь рівні ви можете втратити точність і не зможете їх розрізнити або навіть знову знайти їх.
користувач2338816

1
@AlanWolfe Виготовлення на замовлення все ще можливе - головним прикладом є старі ігри Frontier, у яких реальні позиції зірок наближаються до 1000 зорок або близько до Соля (включаючи Соля та його фактичні планети та місяці). Ви просто переконайтеся, що вони знаходяться в місцях, які не створюються процедурно, і додаєте їх як ще один "шар".
Луань

@IlmariKaronen так, ви праві. У мене максимальна відстань для перегляду, і я думав, що
з’єднаю

Відповіді:


8

Це ґрунтується на моїх спекуляціях та утисках через вихідний код Celestia.

Celestia дозволяє літати навколо планети і зменшувати масштаб, щоб побачити всю галактику. Я переглянув його вихідний код і виявив, що він використовує октрі, структуру для рекурсивного поділу місця на 8 октантів.

Візуалізатор виведе навколишнє середовище, об’їжджаючи октрис, і не пересуває глибокі предмети глибоко.

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

Також може бути змістовна ієрархія, приєднана до об’єктів. Наприклад, якщо ви близькі (радіус оголошений у базі даних) до зірки, її планети відображаються. Якщо планета досить близька (зріз пікселів на екрані), її 3D-модель намальована.

Інші космічні ігри, яких я можу назвати, - це космічна програма Orbiter та Kerbal, які є закритим кодом. Я також заглянув у Граничну Галактику, яка процедурно створила зіркову карту. Існує веб-сайт, який аналізує, як працює гра шляхом її розбирання: http://www.jongware.com/galaxy1.html


12

До цієї головоломки є ряд фрагментів, кожен з яких забезпечить глибоку та цікаву кролячу нору розвідки. Деякі з них:

  • Рівень деталізації - автоматично (або "вручну"), вибираючи деталізовані або спрощені моделі, або навіть спрайти або просто крапки, або для об'єктів у міру віддалення.
  • Кулінг - вибір лише для того, щоб намалювати те, що потрібно. Це може бути те, що знаходиться в полі зору (фрустування), що не приховується за іншими речами (оклюзійне відсікання) або іншими спеціальними методами. (Відповідь @Alan Wolfe описує деякі способи впорядкування ваших даних, що сприяють спрощенню вибору даних.)
  • Потокове передавання - витягнення світових даних із пам’яті в потрібну пам’ять, якщо вони не всі вміщуються в пам’яті відразу
  • Sky box - дуже віддалені об'єкти можна заздалегідь винести на сферу, що знаходиться на "нескінченній відстані" від камери.

І ваш власний секретний соус - це поєднання цих та інших прийомів, які ви використовуєте, і коли, виходячи з ваших потреб у застосуванні.


2

Все, що є ієрархічним та / або рідким, повинно вам допомогти тут.

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

Октрис також дуже хороший тим, що ви можете запитати його для списку всіх об’єктів у вікні фрустуму, який дозволить вам отримати список лише тих об’єктів, які знаходяться в межах вашого кута огляду та не надто віддалені. Рідке рішення може бути чимось на зразок розрідженої сітки, де ви можете запитати інформацію про будь-яке розташування x, y, z, але вам потрібно зберігати інформацію лише для клітин, які не мають порожнього простору.

Інші поширені ієрархічні підходи включають дерева BSP (вони розділяють простір на 2 половини рекурсивно), а також kd дерева, які роблять подібні.

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

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

Сподіваюся, що це допоможе, повідомте мені, якщо у вас є якісь питання щодо деталей!

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