Обязательно при помощи шума > Нет, не обязательно
1) Ставим точку в случайном месте поля. Это будет исток реки;
2) Теперь немного протянем реку. Для этого задействуем 2 параметра: длинна и направление. Определяем их случайным образом и по соответствующим блокам/точкам прокладываем прямую/кривую.
3) Далее мы можем создать разветвление реки, тупик, а можем повторить второй шаг. Определяем случайным образом.
4) Когда из-за множества разветвлений у нас несколько притоков, то перед повторением 3го шага, определяем случайным образом к концу какого из них мы его будем применять.
5) По ходу реализации поймешь, как сделать так, что бы притоки не пересекались и не создавали островки. А если захочешь, сможешь контролировать появление островков.
Генерируя реки/подземелья/лабиринты по схожему алгоритму, мы можем контролировать весь процесс возведения (расставляя ловушки, водопады, тупики, npc, определяя уровень запутанности), оставляя волю случаю.
Я не достаточно подробно описал алгоритм, но уверен, идею ты уловил.