Как я могу сделать чрезвычайно огромные территории в Unity? Кажется, я могу установить ширину и длину для больших значений. Но разрешение карты высот достигает только 4097, а разрешение деталей - только до 4048.
Есть идеи?
unity
optimization
terrain-rendering
terrain
heightmap
Даниэль Пендергаст
источник
источник
Ответы:
Разделите местность на квадратные «куски», загрузите те, которые вам интересны (в основном: те, которые находятся рядом с активной в данный момент камерой) в 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 ГБ, этот подход больше не будет работать, поскольку в сборках Unity не может быть более 2 ГБ ресурсов. В этом случае вам нужно будет собрать 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-contained-no-shader 0,358235 /
источник
Есть сторонние решения.
этот код может создавать ландшафты шириной 99 999 метров, горы - это любые формулы шума, но вы можете смешать 100 формул шума в одну карту, если хотите. например, в этой местности общее количество треугольников, доступных на карте, составляет от 66 миллионов в низком разрешении до 200 миллионов в среднем разрешении. вот карта треугольника 66 миллионов, где 0,7 миллиона треугольников обновляются вокруг камеры. Unipplayer гигантская местность, WASD и Космос
источник
Я бы порекомендовал загружать вашу местность кусками. Используя меньшую территорию, и, возможно, ваш сценарий может проверить, находитесь ли вы в определенной близости от вашей местности, используя transform.position - terrain.transform.position. На самом деле я написал пост в блоге о том, как оптимизировать вашу игру в целом, и я говорил о загрузке чанка. Надеюсь это поможет.
источник