Решением может быть следующее:
Изобретите функцию dist (x, y), возвращающую расстояние до ближайшей к (x, y) точки берега.Затем создайте стандартное поле высоты перлин-шума, но умножьте каждую высоту на dist (x, y).dist (x, y) должно быть на самом деле отрицательным расстоянием, если вы находитесь на воде, и положительным расстоянием, если вы находитесь на суше.Таким образом, поле высоты сдвигается вниз или поднимается в зависимости от того, как далеко вы находитесь от берега, но местность все еще довольно сплошная.Если результаты выглядят странно, вы можете немного исказить dist (x, y), например, используя sqrt (dist (x, y)) или sgn (dist (x, y)) * log (1 + abs (dist)(х, у))) или что-то в этом роде.