Яке обладнання вимагатиме, щоб візуалізувати мінкрафт розміру Землі на зразок карти?


10

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

Ці питання роблять такі припущення:

  • Кожен воксель має роздільну здатність 1 кубічний метр.

  • Для простоти кожному вокселю потрібен лише 1 байт інформації метаданих. Ця інформація буде використана для зберігання ідентифікуючого "типу" вокселя (земля, вода, скеля тощо).

  • Об'єм землі - 1 * 10 € 21 куб.

  • До "сучасних технологій" я включаю все, що є у продажу, але не суперкомп'ютери.

  • Для генерування карти буде використовуватися лише топографія та батиметрія Землі. Людські будівлі, рослини чи печери виключаються. Підземні блоки вибиратимуться на підставі геологічних досліджень, наприклад: якщо глибина перевищує 3000км, то створюють вогню "магми"

  • Як і в Minecraft, карта не є статичною, її можна змінювати в грі.

  • «Нескінченна» відстань для малювання - великий плюс, який сенс мати всю землю на карті, якщо ти не можеш злетіти і дивитися всю планету?

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

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

Відмова від відповідальності

Це теоретичне запитання, я не маю намірів писати землю вокселів

EDIT

ESA GOCE вже картографував геоїд Землі з точністю 1 см-2 см. Я вважаю, що ця інформація може бути використана для створення дуже точної карти висоти Землі. Це виключає необхідність використання алгоритму для заповнення прогалин у топографії Землі.


1
Оскільки варто того, щоб світи в Minecraft були більшими за землю, те, що ви насправді намагаєтеся отримати, - це карта вокселів із роздільною здатністю мульти роздільної здатності, щоб ви могли переглянути все це одразу замість обмеженого діапазону перегляду, знайденого в межах та гра. Це дійсно зводиться до рівня деталізації. Коли ви показуєте окремі вокселі чи коли всі ці вокселі усереднюються в шматок і відображаються як окрема точка на карті нижчої роздільної здатності. Як швидко
Джеймс

@James, ви забуваєте, що Minecraft генерується процедурно, що означає, що не потрібно пам'яті / зберігання даних, поки ви фактично не відвідаєте місцевість. Він хоче мати нашу землю, а значить, вам потрібні дані для всієї планети, аж до кубічного метра.
Вільям Маріагер

1
"для зберігання карти все-таки знадобиться 1 зеттабайт. Значить, потрібне певне стиснення." Я не знаю чому, але це змусило мене посміхнутися :) Вам також може бути цікаво вести вкладки на infinity-universe.com/Infinity
Ray Dey

@RayDey Спасибі за посилання, їх попереднє відео вражає! infinity-universe.com/Infinity/…
Сезар Канаса

Залежить. На моєму моніторі реплікова модель Землі з 1м вокселями могла б одночасно виводити частку вокселя ...
Пітер Тейлор

Відповіді:


6

Це залежить від методу просторового підрозділу, який ви використовуєте, хоча всі методи підрозділу (як і будь-який метод стиснення) врешті-решт відпадають там, де подальше стиснення не може відбуватися, через структуру даних та інші логічні / математичні фактори. Приклад можна знайти в октрисах. Для кожного вузла в octree потрібно вказувати на його батьків та / або дітей (залежно від способу архітектури структури даних), щоб увімкнути значущий проїзд. Будь-яка структура дерева може містити n дітей. Чим менше співвідношення 1: n, тим ефективніше ви використовуєте простір, а отже, і більший накладний обхід у переході до дерев, оскільки у вас повинно бути більше вузлів предків, щоб містити однакову кількість листових вокселів (у вашому випадку приблизно 510 трлн. з них представляють площу поверхні).

Зважаючи на те, що у вашому випадку першочерговими проблемами є вартість зберігання та надання всієї планети (або її частин) з достатньої відстані, немає жодної структури даних, яку я рекомендував би за октрею. Mipmapping - необхідність: діаметр 12,8 мільйонів метрів при найближчій великій потужності 2 дорівнює 2 ^ 24 = 16,8 мільйона. 24 прохідні рівні для проходження буде складати загальну кількість розгалуження - це дуже дорого як для GPU, так і для процесорів. Але за умови, що ви робите все правильно, вам буде потрібно лише пройти кілька рівнів за один раз. Враховуючи кількість необхідного простору, альтернатив мало і далеко між ними (див. Нижче).

Можливості картування октрисів - це те, що робить його неймовірно потужним інструментом для великих обсягів, таких, як ви описуєте. На відміну від усіх відомих методів підрозділу (за винятком KD-дерев), octree зберігає підрозділ за рівнем мінімальним, тобто візуальні та фізичні відмінності між рівнями mipmap також залишаються мінімальними, що означає набагато більш тонкі дельти в деталізації під час прогулянки вгору та вниз по дереву.

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

Якщо говорити про ідеальне співвідношення 1: n, то в цьому відношенні немає кращої структури, ніж kd-дерево. Там, де octree ділиться на 2 для кожної осі, в результаті чого утворюється 2 ^ 3 = 8 окремих дочірніх клітин, kd дерево поділяється рівно один раз на рівень підрозділу. Проблема в цьому полягає в тому, що ви повинні вибрати гіперплан, на який слід розділити, і цей гіперплан можна було вибрати навколо будь-якої з 3 осей. Незважаючи на те, що він є оптимальним з точки зору простору, це робить 3D-траверси (наприклад, під час реймаршів, основоположний варіант використання октрисів для фізики чи візуалізації) набагато складніше, ніж в октрисі, оскільки динамічна структура портального типу повинна зберігатися для запису інтерфейси між окремими вузлами kd-дерева.

RLE - це ще один підхід до стиснення, але багато в чому складніше застосувати до такої проблеми (де база операцій сферична), оскільки стиснення RLE є одновимірним, і ви повинні вибрати вісь, в якій воно працює. планету, можна вибрати полярну вісь, але будь-який вибір з однією віссю спричинить певні проблеми з переходами для візуалізації та фізики при дії з певних неоптимальних ракурсів. Звичайно, ви також можете запустити RLE у 3-х осях одночасно, збільшивши вдвічі вартість зберігання або в 6 осях (-x, + x, -y, + y, -z, + z) для подальшої оптимізації.

Отже, щоб відповісти на ваше запитання (чи ні!)

Я не збираюся вступати безпосередньо у відповідь на те, що таке обладнання, але я думаю, що погляд на нього з точки зору octree починає давати вам уявлення про те, що насправді можливо на тому, яке обладнання. Я б закликав вас піти цим шляхом, якщо ви дійсно хочете знати, можливо, найпростіше реалізувати простий рідкий октрис(див. статтю Лайна в реф. документах) і помістіть у неї сферичну оболонку поверхневих вокселів, і подивіться, як виглядає результативне використання місця. Крок звідти. Подивіться, як далеко ви можете дійти до того, як ваша системна пам'ять почне видавати. Для цього не потрібно писати візуалізатор, якщо ви не хочете візуалізації. Також майте на увазі, що це найкраще робити на процесорі - графічні процесори за великим рахунком не мають ємності пам'яті для вирішення проблем такого масштабу. Це одна з причин, по яких Intel прагне рухатися до масово паралельних процесорів: переваги GPGPU, що краще в подібних речах, можна застосувати до далекого простору пам’яті без вузьких місць шин системи. Тут, мабуть, є й інші, або на matematika.stackexchange.com,

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


4

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

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

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

Що стосується поверхні землі, я, мабуть, сприйняв би зображення як вихідну точку для своїх розрахунків. Можливо, якась карта температури та вологості дозволить вам обчислити тип блоків, які потрібно застосувати. Напр. Вода, пісок (пустеля), трава, сніг тощо. Оскільки зображення, ймовірно, не матиме пікселя інформації для кожного квадратного метра земної поверхні, вам доведеться змішати це з деяким шумом, щоб створити трохи змін поверхня. Якщо ви завжди використовуєте одне і те ж насіння з випадковим набором, результат повинен бути детермінованим.

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

Таким чином, це зводиться до обсягу даних деяких двовимірних зображень, що містять інформацію про земну поверхню. Для всього, що знаходиться зсередини, ви повернетесь до чистого процедурного підходу, коли ви надаєте різні типи блоків, залежно від відстані від землі-центру. Але, як було сказано вище, їх потрібно розраховувати лише тоді, коли хтось викопає яму.

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

Що стосується візуалізації: для цієї роботи вам знадобляться деякі складні алгоритми деталізації та відстеження. Безглуздо зображувати всі поверхневі вокселі, коли камера знаходиться на рівні збільшення, який показує весь світ. На цьому рівні вокселі мають бути набагато більшими, можливо, буде достатньо навіть простої фактурної сфери.

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


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

1
@CesarCanassa Не реалістичний сценарій мати більше модифікованих даних, ніж фактичні дані планети. Подивіться, що ми змінили на землі ... Я б сказав, що це лише невеликий відсоток земної поверхні. Світовий океан в основному недоторканий, що вже складає більшу частину земної поверхні. Уявіть, що 1 мільйон гравців постійно грають у гру та 1 воксель на м2 земної поверхні (510 072 000 км2). Якби кожен гравець міняв 1 воксель кожні 10 секунд, це все одно знадобиться їм ~ 160 років, щоб просто змінити поверхню. І це не рахуючи внутрішньої частини землі!
bummzack

Реалізовано способи масової модифікації вокселів, наприклад, атомна бомба, що вибухає та затоплює цілий острів, або потужні тріщини, що відкриваються у землетрусі. Навіть змінені дані становлять лише 0,0001% від обсягу Землі, який досі становить 10 ^ 15 вокселів
Сезар Канаса

Це правда, що модифікації відносно Землі невеликі, але модифікації, які ми вносили в минулому столітті, все ще є досить вражаючими: порівняйте супутникові знімки для Аральського моря з 1970-х та кінця 1990-х років. (Я колись розглядав зміни, необхідні для відновлення сучасних супутникових знімків у 100-метрову роздільну здатність до 40-х років). І при роздільній здатності 1 м сезонні зміни льоду та снігового покриву також вимагатимуть тонн даних, навіть якщо ви не зайшли так далеко, щоб моделювати айсберги.
Пітер Тейлор

0

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

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

Minecraft зберігає всі ті блоки, які ви відвідали, доповнивши будь-які зміни, можна було просто зберегти лише різницю між генерованим світом та оновленим світом, але я думаю, що зберегти великі блоки було простіше, і вони стискаються порівняно добре.

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


2
Мені невідома математична формула, яка описує землю 1: 1.
MichaelHouse

Не "Земля", а щось подібне.
aaaaaaaaaaaa

0

Ви можете шукати векторні дані земельних масивів Землі, оскільки векторні дані мають перевагу в масштабуванні до будь-якого масштабу. Поєднайте його з картою висот Землі, щоб створити висоту місцевості. Останній крок - кілька детальних супутникових знімків, звідки ви можете вибрати тип верхнього блоку на основі зображення, щоб ви отримали скелю там, де є скеля, пісок, де є пісок і т. Д. Напевно, слід створити фактичні нутрощі планети як Minecraft робить це, якщо ви не можете знайти детальні географічні дані, з яких можна працювати. В основному, ви хочете зробити географічні дані та екстраполювати з них, враховуючи лише координатний вхід XYZ. Це означає, що у вас є обмежені дані, а ви ретельно екстраполюєте решту.

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