Шум Перлина для движения?

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

Первое, что пришло мне в голову, это такая карта шума:

  1. Назначьте каждому светлячку случайное начальное местоположение, скорость и угловое ускорение.
  2. На кадре продвиньте положение мухи в соответствии с ее вектором направления.
  3. Прочтите карту шума в новом месте и используйте ее для регулировки углового ускорения, заставляя муху «поворачиваться» в сторону более светлых пикселей.
  4. Снова отрегулируйте угловое ускорение по близости к другим мухам, чтобы они не скапливались вокруг локальных максимумов.

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

Предложения? Учебники или статьи (на английском, пожалуйста)?


person 3Dave    schedule 22.09.2011    source источник


Ответы (2)


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

Просто следуйте этому рецепту, и вы можете создать аналогичные функции шума Перлина для каждой из ваших осей! Объедините эти движения, и ваши руки получат приятный шум. (Вы также можете использовать эти функции шума в качестве случайных ускорений или скоростей. Поскольку функция шума Перлина глобально монотонна, ваши мухи не улетят на сумасшедшие расстояния.)

http://webstaff.itn.liu.se/~stegu/TNM022-2005/perlinnoiselinks/perlin-noise-math-faq.html

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

http://lben.epfl.ch/files/content/sites/lben/files/users/179705/Simulating%20Brownian%20Motion.pdf

Удачного полета!

person Peaches491    schedule 27.05.2013
comment
Тот неловкий момент, когда вы отвечаете на вопрос годичной давности. - person Peaches491; 27.05.2013
comment
Но это хороший ответ. Лучше, чем то, что я делал, и пригодится в будущем. Спасибо. - person 3Dave; 27.05.2013

Может быть, вы ищете боидов?

Страница Википедии

Он не содержит шума Перлина в исходной концепции, возможно, вы могли бы использовать шум для создания аттракторов или репульсоров, как вы пытаетесь сделать с поведением «лететь на светлее».

PS: на указанной выше странице есть ссылка на алгоритм Firefly, возможно, вы ' будет это интересно?

person jv42    schedule 22.09.2011
comment
Я видел алгоритм светлячков (красиво названный, чтобы упростить поиск в Google), но также искал что-то менее специфичное для светлячков. Я посмотрю на боиды. - person 3Dave; 22.09.2011
comment
Это действительно круто для моделирования любого типа стаи, будь то птицы, рыбы и т. Д. ... если вы хотите избежать столкновений. Если вы хотите чего-то хаотичного, то есть не всех элементов, стремящихся к единому направлению, вы можете просто отключить влияние силы «сплоченности». - person jv42; 22.09.2011