Альтернативы ромбовидному квадрату для инкрементной процедурной генерации ландшафта?

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

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

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

Я также изучил Midpoint Displacement / Diamond-Square. Заполнив карту высот каждого фрагмента значениями границ соседних фрагментов и рандомизировав углы фрагментов, у которых нет других фрагментов поблизости, я смог создать мозаичный ландшафт, который демонстрирует желаемое поведение. Тем не менее, результаты выглядят довольно скучно. В частности, поскольку этот метод основан на картах высот, в нем отсутствуют выступы и тому подобное. Более того, даже при рандомизации углов особенности рельефа, как правило, ограничены небольшими участками, т. е. отсутствуют многоуровневые холмы или подобные ориентиры.

Теперь мне было интересно, есть ли другие подходы к этому, о которых я еще не слышал/не думал. Любая помощь высоко ценится! :)

Ваше здоровье!


person Zultar    schedule 26.08.2014    source источник


Ответы (1)


Постобработка!

После того, как вы сделаете карты высот, вернитесь к добавлению функций.

Вот как Minecraft делает это, чтобы получить различные пещеры и выступы скал.

person Eben    schedule 01.09.2014
comment
На самом деле это то, что я делаю прямо сейчас, чтобы сгладить поля высот, созданные алгоритмом Diamond-Square. Думаю, мне следует еще немного изучить его для других приложений. - person Zultar; 04.09.2014
comment
@Zultar, если вы считаете, что этот ответ отвечает на вопрос, отметьте его как ответ :) - person Eben; 07.09.2014
comment
Эм... Я почти уверен, что Minecraft использует шумовую турбулентность для создания утесов и выступов. Ввод искаженных координат x, y и z в вашу функцию карты высот создает очень красивый ландшафт, похожий на карту высот, со случайными выступами и обрывами. - person Barry Smith; 06.06.2015
comment
Это хороший момент, алгоритм турбулентности позволит вам получить такие функции с первого прохода. - person Eben; 07.06.2015