Как я могу генерировать шум Перлина на сферической поверхности? - PullRequest
24 голосов
/ 02 июля 2011

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

Ответы [ 2 ]

6 голосов
/ 27 декабря 2012

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

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

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

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

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

4 голосов
/ 02 июля 2011

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

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

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

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

...