В настоящее время я пытаюсь создать Minecraft-подобный ландшафт вокселей с 3D Simplex Noise, а также хочу реализовать пещеры.
В этой теме я нашел метод Perlin Worms , который дает действительно хорошие результаты. Тем не менее, я понятия не имею, как генерировать его по частям. Возможно ли это, или есть какие-то альтернативы, которые производят похожую червеобразную пещеру по частям?
Изменить: это проблема, которую я не знаю, как решить.
Edit2: это результат объединения 2D Ridged Multifractal Noise с картой высот Simplex Noise. Все еще нуждается в некоторой настройке, но это в значительной степени результат, который я хотел. Спасибо Byte56.
terrain
minecraft-modding
voxels
perlin-noise
user000user
источник
источник
Ответы:
Большинство алгоритмов перлин-шума позволят вам получить значение шума в любом заданном месте, например
noise(x,y,z)
. Это делает довольно простым создание шума на основе фрагментов. Все, что вам нужно сделать, это передать глобальную позицию вместо позиции чанка.Итак, вы можете видеть, что мы генерируем ландшафт для фрагмента, перебирая границы фрагментов и проверяя, является ли эта глобальная позиция твердой или нет. Вероятно, это та же методология, которую вы используете для генерации ландшафта в целом.
perlinNoise.get
занимает глобальную позицию и возвращает ее плотность. ГдеisSolid
просто будет простой тест, чтобы увидеть, является ли воксель "достаточно плотным", чтобы претендовать на твердое тело.perlinNoise.get
может быть более сложным, чем простой алгоритм шума. Вы можете иметь чеки, основанные на глубине вокселя в вашем мире. Например, если воксел находится ниже того, что вы определили как «абсолютный базовый уровень земли», он может использовать алгоритм Perlin Worm для получения плотности, если он выше абсолютного базового уровня, он может использовать функцию нормальной плотности, чтобы дать вам более разнообразная местность. Однако я бы порекомендовал немного смешаться между ними.Комбинирование различных шумовых функций Perlin - это то, с чем вам нужно поиграть и посмотреть, что работает. Лучше всего настроить свою среду так, чтобы вы могли просто изменить некоторые значения и выполнить горячую замену местности без необходимости перезагружать игру. Удачного эксперимента.
источник
Я думаю, что так работает в Minecraft. Каждый червь имеет максимальную длину (назовем это
M
). Головки каждого червя рассчитываются исходя из положения куска. При рендеринге каждого чанка вы должны проверить все чанки вM
радиусе и следовать всем их червям. Это не идеально с точки зрения производительности, но это работает.источник