Процедурная генерация: разделение карты на несколько областей

Я создаю генератор мира (как в Minecraft). Я использую шум Перлина для создания карты высот. Но я хочу разделить свою карту на области (или биомы).

Я могу разделить карту на равные полигоны, но я ищу более случайный способ.

Моя карта пиксельная (состоящая из блоков). Каждый пиксель имеет координаты x и y.

Пример: Пример карты


person Bilal HIMITE    schedule 18.05.2020    source источник


Ответы (1)


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

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

Затем для каждой точки на карте вы выбираете ближайший биом по температуре, влажности, …

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

Вот еще несколько советов по фактической реализации:

  1. Убедитесь, что карты температуры и влажности имеют гораздо более низкие частоты, чем карта высот, чтобы биомы не становились слишком маленькими.
  2. Предлагаю также добавить низкочастотную часть, чтобы переход не был таким плавным.
  3. Если вы хотите добавить более естественный переход между биомами, вы можете выбрать случайным образом, если два биома одинаково хороши с точки зрения параметров.
person QuantumDeveloper    schedule 11.07.2020