Генерация глубин морского дна на 2D-карте

У меня есть 2D-карта тайлов размером 100x100 тайлов. Большинство из них представляют собой морские плитки и остров посередине. Я хочу, чтобы каждая морская плитка имела значение глубины.

Я думал об использовании чего-то вроде карты шума для создания местности, а затем переворачивал ее вверх дном, но я не уверен, как учесть уже существующую землю. Потому что чем ближе к земле, тем меньше глубина.

Должен отметить, что остров посередине спроектирован, а не сгенерирован макетом.

Итак, в основном я хочу создать карту, которая выглядит примерно так, где 0 — плоская земля, а другие значения — глубина в метрах, например.

9 9 9 9 9 8 9 8 7
9 7 7 8 7 6 7 6 6
9 7 4 3 3 3 4 5 6
9 6 2 0 0 0 0 3 6
9 6 2 0 0 0 0 1 6
9 6 2 0 0 0 0 3 6
9 7 4 2 2 2 1 3 6
9 7 7 8 7 6 7 6 6

Если бы кто-нибудь мог указать мне в правильном направлении, это было бы здорово.


person antonigiske    schedule 08.12.2017    source источник
comment
Двухмерное распределение Гаусса имеет более или менее такую ​​форму.   -  person dmedine    schedule 08.12.2017
comment
Другим методом может быть использование стандартного шума перлина (учебники повсюду) и фильтрация вывода, добавляющая отрицательное смещение по мере удаления от центра. Вы можете настроить смещение, чтобы создать более крупные острова или более глубокие воды.   -  person    schedule 08.12.2017


Ответы (1)


Используйте Perlin Noise и увеличьте значения вблизи того места, где вы хотите остров, на коэффициент, например, 1,2 (или уменьшите все остальные значения).

Улучшен шум: https://gist.github.com/Flafla2/1a0b9ebef678bbce3215

Я рекомендую вам добавить турбулентность для получения более качественных результатов: http://paulbourke.net/fractals/perlin/

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

person Christophe Roussy    schedule 11.12.2017