Генерация ландшафта на лету на основе существующего ландшафта

Этот вопрос очень похож на тот, что задан здесь .

Моя проблема в том, что у меня есть карта, примерно такая:

Main Map

Эта карта сделана с использованием 2D-шума Перлина, а затем проходит через созданную карту высот, присваивая типы и значения цвета каждому элементу ландшафта на основе высота или наклон соответствующего элемента, так что довольно стандартно. Массив карты является двухмерным и имеет точные размеры экрана (пиксель на пиксель), поэтому при 1200 на 800 генерация на моей установке занимает около 2 секунд.

Теперь увеличиваем выделенный прямоугольник:

http://i.stack.imgur.com/hrZnM.png

Очевидно, что с увеличением размера теряются детали. И в этом проблема. Я хочу создавать дополнительные детали на лету, а затем записывать их на диск по мере того, как игрок перемещается (игрок будет просто точкой, ограниченной движением по сетке). Я вижу два подхода для этого, и первый, который пришел в голову, я быстро реализовал:

http://i.stack.imgur.com/bbLia.png

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

http://i.stack.imgur.com/6shKz.png

Итак, чтобы это работало правильно, вы Мне нужно было сделать чрезмерное количество, я полагаю, слово было бы интерполяцией, чтобы создать плавный переход, когда игрок перемещал 40 или около того сетки.пространства в локальном мире, необходимые для перехода к следующему тайлу в другом мире. Это кажется сложным и очень неэлегантным.

Второй подход заключался бы в том, чтобы разбить сетку исходной карты на более мелкие части, может быть, разделив каждый квадрат на 4? Я не реализовал это, и я не уверен, как бы я мог на самом деле увеличить детализацию, но я думаю, что это, вероятно, будет лучшим решением.

Есть идеи, как я могу подойти к этому? Имейте в виду, что он должен быть локальным и оперативным. Я хочу избежать увеличения разрешения карты любой ценой.

8
задан Community 23 May 2017 в 12:16
поделиться