2012-05-24 6 views
7

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

Оригинальная функция градиента Perlin принимает четыре аргумента: a hash и трехмерную координату (x, y, z). Результат функции возвращается на основании значения hash mod 16, как указано ниже.

  • 0: x + y
  • 1: -x + y
  • 2: x - y
  • 3: -x - y
  • 4: x + z
  • 5: -x + z
  • 6: x - z
  • 7: -x - z
  • 8: y + z
  • 9: -y + z
  • 10: y - z
  • 11: -y - z
  • 12: y + x
  • 13: -y + z
  • 14: y - x
  • 15: -y - z

Возвращаемые значения от 0 к 11 сделать вид шаблона, так как каждая комбинация представлена ​​один раз. Однако последние четыре являются дубликатами. Почему они были выбраны, чтобы соответствовать последним четырем возвращаемым значениям? И что будет с аналогами с двумя (x, y) и одним размером (x)?

ответ

9

... поздно ответ лучше, чем никто? ;-)

Функция grad в реализации «улучшенного шума» вычисляет произведение точек между вектором x, y, z и вектором псевдослучайного градиента.

В этой реализации вектор градиента выбран из 12 вариантов. Они понижают однородность выбора и добавления номера 12 и 14, потому что это быстрее сделать hash & 15 чем hash % 12

Для 2D Перлин шума я использовал только 4 градиентные векторы без каких-либо видимых проблем, как это:

return ((hash & 1) ? x : -x) + ((hash & 2) ? y : -y); 
+1

Спасибо за ответ! Я всегда невероятно благодарен героям, которые нападают, чтобы спасти старые забытые вопросы. –

Смежные вопросы