Промежутки сшивания ландшафта Unity

Итак, я пытаюсь создать простой динамический бесконечный ландшафт, используя симплексный шум. До сих пор шум работал нормально, однако у меня возникли проблемы с ландшафтом, имеющим разрывы по краям. Сначала я подумал, что это связано с тем, что я не вызывал SetNeighbors для объектов Terrain, но добавление этого, похоже, не дало никаких улучшений.

terrain.GetComponent<Terrain>().SetNeighbors(left, top, right, bottom);

Эта проблема, по-видимому, вызвана небольшими различиями в высоте между каждым положением ландшафта, но их одинаковый набор повлияет на качество ландшафта (в некоторых случаях уменьшит неровность ландшафта) и, как правило, выглядит неэлегантно. Я просматривал документы Unity, пытаясь найти, как решить эту проблему, но пока ничего не нашел.

Есть что-то, что мне не хватает? Или мой единственный вариант - изменить высоту на одной из сторон, чтобы она соответствовала другой?

Спасибо за прочтение, как всегда приятно.

Изображение местности для справки


person Sam Holder    schedule 11.03.2016    source источник
comment
Общее решение состоит в том, чтобы получить функцию шума, которая дает одинаковую высоту для одних и тех же позиций — тогда ребра естественным образом сцепляются без каких-либо ручных изменений. Как вы упомянули, ручное затухание будет выглядеть очень плохо и создаст заметные швы. Я предлагаю поискать (лучше?) учебники/ресурсы по генерации ландшафта, чтобы найти тот, который может создать бесконечный ландшафт.   -  person 31eee384    schedule 12.03.2016


Ответы (1)


Пара вещей-

Во-первых, убедитесь, что вы устанавливаете SetNeighbors() для ВСЕХ объектов ландшафта, а не только для одного.

Во-вторых, если ландшафт не совпадает точно, это либо означает, что ландшафты не совсем правильно вычисляют свои данные, либо происходит какая-то ошибка с плавающей запятой. Однако у меня есть подозрение, что это первое, учитывая, что ручная смена точек влияет на качество. Убедитесь, что вы знаете, что ландшафты имеют n ^ 2 + 1 точек, а также убедитесь, что точка для запроса из вашей симплексной функции вычисляется в мировом пространстве.

Если вы не можете понять это, опубликуйте свой код, и я посмотрю.

Кроме того, ваш ландшафт может выглядеть лучше, если вы использовали октавный (также известный как фактальный) шум в своей функции шума Simplex, в зависимости от того, что вы ищете.

Ваше здоровье!

person HalpPlz    schedule 11.03.2016
comment
Спасибо за ваш вклад, мне удалось исправить это, как только я обнаружил ошибку. Знаменатель масштабирования был установлен на 1 слишком высоко, что привело к небольшому смещению и несогласованности мировых координат. Сейчас попробую октавный шум, спасибо! - person Sam Holder; 12.03.2016
comment
привет @SamHolder .. рад, что это было исправлено, действительно важно отметить любой полезный ответ. это единственный способ содержать доску в порядке, а для себя избежать модерации. Люди тратят много времени на ответы ... они хотят, чтобы доски SO содержались в чистоте. Беспорядок означает, что мы все не можем задавать вопросы, спасибо - person Fattie; 12.03.2016