В то время как другие ответы здесь действительно хороши для создания видов статических ландшафтов, которые будут работать для этой конкретной потребности. Существуют и другие методы, которые люди, сталкивающиеся с этим вопросом, могут искать, если они хотят создавать пейзажи, которые меняются со временем или кажутся гораздо более реалистичными, вы можете следовать этой методике.
В отличие от других ответов, вы начинаете это с совершенно пустой карты. Начните с того, что вы считаете уровнем моря. Используйте Perlin Noise, чтобы добавить очень небольшое изменение, если у вас есть 256 возможных возвышений, не изменяйте больше чем 3-5 в любом направлении. Это строит первые несколько миллиардов лет вашего ландшафта без необходимости фактически запускать симуляцию так долго.
Тектоника плит
Разделите карту по прямым или изогнутым линиям, чтобы создать пластины. Чем детальнее формы пластин, тем интереснее будет ваш ландшафт. Держите их большими. Дайте каждой пластине направление, скорость. В течение определенного периода времени перемещайте листы по карте пошагово, перетаскивая все плитки над ними.
Когда две пластины пересекаются, сделайте выбор, который переместится, а какой упадет, этот выбор может быть случайным. Плитки на плитах, обозначенных снизу, мгновенно уменьшаются по высоте на 5 ступеней. После того, как табличка будет обозначена над или под, все будущие взаимодействия с табличками будут следовать следующим правилам:
- Если обозначенная пластина пересекает не обозначенную пластину, не обозначенная пластина становится противоположным типом. (Таким образом, пластины UD становятся ниже при пересечении.)
- Там, где верхняя пластина находится над нижней пластиной, все эти плитки перемещаются вверх по ступеням на 0-1, и плитки следуют по пути над плитой.
- Там, где верхняя пластина пересекает верхнюю пластину, все эти плитки перемещаются вверх на 1-2 ступени, и плитки в области пересечения перестают дрейфовать.
- Когда нижняя пластина пересекает нижнюю пластину, любые плитки в области с возвышением, превышающим отметку 66%, для обеих плит в области пересечения перемещаются вверх на 1-3 шага (как будто из-за вулканической активности это приведет к образованию островков в течение достаточного времени ) и плитки в этой области перестают перемещаться.
Все пластины, которые пересекаются, замедляются на 20% от их текущей скорости каждый шаг. Для дополнительной реалистичности добавьте случайное изменение направления движения от -10% до 10%.
После выполнения желаемого количества шагов. Вероятно, 5-10 достаточно. Любые плитки, где нет пластин, должны быть сброшены до самого низкого существующего уровня.
Большой или Маленький?
Эту карту можно использовать как есть или расширить, чтобы создать карту намного большего размера, разбив ее на фрагменты (ячейки) 4X4 и расширив эти участки в зависимости от их отдельных отметок. Рассматривайте высоту каждой ячейки как точку и создавайте плавную градацию на большей карте между этими точками. Таким образом, если бы большая карта была 40X40 вместо 4X4, а точка (0,0) была 10, а точка (0,1) была 1, то плитки на большей карте между ними были бы 10,9,8,7,6 , 5,4,3,2,1 в высоту. Также можно добавить Perlin Noise, чтобы разгладить склоны. В целом эта методика масштабирования аналогична алгоритму Алмазного квадрата .
вода
Для моделирования рек и озер, океанов и грунтовых вод. Я предпочитаю использовать клеточные автоматы .
Высоты становятся поплавками или расширенными диапазонами int для более точного отслеживания. Водяные клетки имеют значения насыщения, скажем, в диапазоне 1-256. Карты должны начинаться равномерно. Вам нужно будет поиграть с числами для ваших индивидуальных размеров карты, однако в целом вы будете следовать правилам примерно так:
- Если соседняя ячейка более насыщена, увеличьте насыщенность и увеличьте высоту.
- Если соседняя ячейка менее насыщена, уменьшите насыщенность и потеряйте высоту.
Сделайте эту проверку для каждой соседней клетки. Запустите достаточное количество шагов. Если вы хотите, вы можете добавить температуру к этому моделированию, изменяя количество потерянного / полученного насыщения этой температурой. Вы также можете изменить его в зависимости от высоты. Естественные озера и реки должны образоваться. Некоторые упадут в океан. (Вероятно, океан не будет заполняться какой-либо метрикой, но в любом случае под уровнем моря вы будете обозначать что-то, что будет заполнено водой)
Вы можете сохранить данные о температуре и насыщенности для использования, как и в других ответах, для создания биомов. Они должны быть НАМНОГО более точными и интересными. Со снежными биомами на полюсах и горячими в середине (если вы используете плавный градуированный список температур.)
Вы также можете моделировать ветер и, следовательно, изменения температуры в зависимости от высоты. Вы можете переключаться между запуском моделирования температуры и воды, если хотите. Однако я не построил ничего, используя изменения температуры, поэтому я не буду комментировать, как это сделать.
Развивающиеся пейзажи
Если вы сохраняете моделирование для земли, воды и тепла вокруг и резко уменьшаете их эффекты, а также останавливаете движение плит, вы можете со временем изменять все эти показатели. Я бы не стал проводить вычисления очень часто, но вы можете получить карту мира, которая реагирует на изменения таким образом.
Заключение
В то время как эти виды техники более сложны, они производят гораздо более реалистичные и развивающиеся эффекты. Взять это за то, что оно того стоит?