Каков "правильный" способ объединения диаграмм Вороного с шумом Перлина для генерации текстуры?

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

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

Я был бы рад включить мой код, но я не думаю, что в этом случае он является частично ценным.

Как примечание: моя реализация Вороного возвращает список объектов многоугольника с соответствующими угловыми точками, ребрами, центроидами и т. Д.

Заранее спасибо:)

2 ответа

Решение

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

Если у вас уже есть алгоритм Вороного, генерирующий геометрию, одним из вариантов является создание шейдера для вашей местности, который измеряет шум Перлина в координатах мирового пространства (таким образом, вы не столкнетесь с какими-либо проблемами с мозаикой в ​​полигональной сетке). Если шум должен использоваться в качестве карты высот, тесселяция может увеличить разрешение вашей сетки. Однако, если вы не использовали шейдеры до того, как вы сможете быстрее увидеть результаты, используя текстурный подход. И было бы бессмысленно делать половину шума местности в шейдере, если вы делаете вторую половину в C#.

Поскольку эта тема может быть довольно широкой, я очень рекомендую видео Себастьяна Лейга о создании ландшафта. https://www.youtube.com/watch?v=wbpMiKiSKm8&list=PLFt_AvWsXl0eBW2EiBtl_sxmDtSgZBxB3

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

Другие вопросы по тегам