Як я можу зробити надзвичайно величезні місцевості в Unity? Здається, я можу встановити величину ширини та довжини. Але роздільна здатність Heightmap досягає лише 4097, а роздільна здатність - до 4048.
Будь-які ідеї?
Як я можу зробити надзвичайно величезні місцевості в Unity? Здається, я можу встановити величину ширини та довжини. Але роздільна здатність Heightmap досягає лише 4097, а роздільна здатність - до 4048.
Будь-які ідеї?
Відповіді:
Розділіть місцевість на квадратні «шматки», завантажте тих, хто вас хвилює (в основному: тих, хто поруч із активною камерою) в Update () і - якщо ви прив’язані до місця (швидше за все, будете), вивантажте непотрібних далеко далеко .
Використовуйте заздалегідь розраховані низькополімерні моделі для далекої місцевості LoD, якщо ви не заперечуєте, що відстань з низьким оглядом. Крім того, якщо вам потрібна карта висоти місцевості для далекої місцевості для чого-небудь (наприклад, руху NPC або якогось іншого моделювання), створіть варіант низької роздільної здатності або змінної роздільної здатності своєї місцевості для збереження в пам’яті; не використовуйте для цього повні дані про місцевість. Це можна зробити автоматично при завантаженні гри, але, як правило, краще створити інструмент, який створює ці попередньо сформовані дані під час збирання чи пакету.
Нарешті: Щоб уникнути проблем із точністю з плаваючою точкою, вам доведеться переставляти всю сцену щоразу, коли ваша основна камера віддаляється далеко (0,0f, 0,0f, 0,0f).
Можливо відповідне питання щодо відповідей Unity http://answers.unity3d.com/questions/17225/dynamic-terrain-loading.html
Вам потрібно буде розбити місцевості по шматках, тобто. кілька менших місцевостей. Йому потрібно буде «зашивати» тих, хто перебуває один раз (із сценарієм), щоб між ними не було «дірок», але в іншому випадку ви можете просто почати робити їх відразу.
Ви можете також знати, що оскільки Unity3D ~ 3.0 ви не можете переміщати предмети (читати місцевості та предмети) занадто далеко (наприклад, +/- 100000 кроків IIRC), тому це вплине на максимальний розмір вашого світу.
Я все-таки використовую це в своїй онлайн-грі RPG (за винятком того, що я використовую тільки Unity3D для рівня дизайну, а не для фактичної гри).
Просто тому, що мені цікаво, чи хотіли б ви поділитися якоюсь інформацією про вашу гру (наприклад, просування, тип, графіка, стиль тощо)?
Ми реалізували величезні місцевості в Unity5, обробляючи дані SRTM для всієї Землі, у карти висоти для TerrainData
об'єктів з різними рівнями деталей [1]. Є кілька речей, які слід врахувати:
Самі краї карт висоти потрібно перекривати хоча б одним зразком, і ви повинні розташовувати свої місцевості відповідно. Terrain.SetNeighbors
не з'єднає сітку, лише враховуйте різні рівні деталізації, зроблені Unity.
Вам, обов'язково, потрібно 2 ^ n + 1 зразка висоти на один TerrainData
об'єкт, інакше Unity просто призначить висоті 0 нульовим частинам.
Якщо у вас менше 2 Гб TerrainData
, ви можете піти від того, щоб мати їх як "Активи" у папці "Ресурси" та Resource.Load
їх під час виконання. Якщо у вас більше 2 Гб, такий підхід більше не працюватиме, оскільки не може бути більше 2 ГБ ресурсів з Unity build. У цьому випадку вам потрібно буде скласти AssetBundles і асинхронно завантажити їх WWW
об'єктом. Це має небажаний побічний ефект для виклику Shader.Parse
для кожного з накладними витратами приблизно 500 мс. Я повідомив про це на форумах [2] і все ще чекаю відповіді. Зрештою я надішлю звіт про помилку.
Не думайте про використання AssetDatabase.LoadAssetAtPath
, воно доступне лише в редакторі, а не в побудовах Unity.
[1] https://www.youtube.com/watch?v=2UsyVuWoFbQ
[2] http://forum.unity3d.com/threads/shader-parse-delays-loading-of-assetbundle-contain-no-shader .358235 /
Є сторонні рішення.
цей код може зробити місцевості шириною 99 999 метрів, гори - будь-які формули шуму, але ви можете змішати 100 формул шуму на одній карті, якщо хочете. Наприклад, у цій місцевості загальна кількість трикутників, наявних на карті, становить від 66 до мільйонів, низької роздільної здатності та 200 мільйонів середньої роздільної здатності. ось 66-мільйонна трикутна карта, де навколо камери оновлюється 0,7 млн трикутників. єдність гравця гігантського рельєфу, WASD та Space
Я рекомендую завантажувати свою місцевість шматками. Використовуючи менші місцевості, і, можливо, ваш сценарій міг би перевірити, чи ви знаходитесь у певній близькості від вашої місцевості, використовуючи transform.position - terrain.transform.position. Я фактично написав допис у блозі про те, як оптимізувати свою гру в цілому, і я говорив про завантаження шматка. Сподіваюся, це допомагає.