Подтвердить что ты не робот

Как я могу генерировать шум Перлина на сферической поверхности?

Я пытаюсь создать ландшафт с использованием шума Perlin. Я понимаю, как сгенерировать его с помощью декартовых координат, но не могу полностью окутать его в то, как он будет работать на сфере. Я знаю, что вы можете проектировать 2D-поверхности на сферы, но разве искажение не помешает распределению шума? Лучшая идея, которую я могу придумать для создания равномерного шума на поверхности сферы, - это сопоставить точку на сфере с 3D-декартовой координатой и использовать функцию 3D-шума. (В принципе, для создания куба шума и "сбрить" углы, чтобы сделать его круглым.) Есть ли лучший метод, который мне не хватает?

4b9b3361

Ответ 1

Реальная головоломка здесь заключается в том, как изменить базовые функции шума Perlin (называемые октавами?), которые определяются с использованием частоты и амплитуды так, чтобы они были над сферой вместо n-мерной плоскости.

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

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

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

Ответ 2

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

При использовании функции 2D-шума для создания карты высоты вы смещаете значение z в соответствии со значением шума.

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

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

Это, очевидно, может быть применено к любой произвольной форме.