Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Perlin noise for motion?

I'm successfully using Perlin noise to generate terrain, clouds and a few other nifty things. However, I'm now trying to animate a group of flying insects (specifically fireflies), and it was suggested to me to use Perlin noise for this, as well. However, I'm not really sure how to go about this.

The first thing that occurred to me was, given a noise map like so:

  1. Assign each firefly a random initial location, velocity and angular acceleration.
  2. On frame, advance the fly's position following its direction vector.
  3. Read the noise map at the new location, and use it to adjust the angular acceleration, causing the fly to "turn" towards lighter pixels.
  4. Adjust angular acceleration again by proximity of other flies to avoid having them cluster around local maximums.

However, this doesn't cover cases where flies reach the edge of the map, or cases where they might wind up just orbiting a single point. The second case might not be a big deal, but I'm unsure of a reliable way to have them turn to avoid collisions with the map edge.

Suggestions? Tutorials or papers (in English, please)?

like image 716
3Dave Avatar asked Sep 22 '11 14:09

3Dave


2 Answers

Here is a very good source for 2D perlin noise. You can follow the exact same principles, but instead of creating a 2D grid of gradients, you can create a 1D array of gradients. You can use this to create your noise for a particular axis.

Simply follow this recipe, and you can create similar perlin noise functions for each of your other axes too! Combine these motions, and you should have some good looking noise on your hands. (You could also use these noise functions as random accellerations or velocities. Since the Perlin noise function is globally monotonous, your flies won't rocket off to crazy distances.)

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

If you're curious about other types of motion, I would suggest Brownian Motion. That is the same sort of motion that dust particles exhibit when they are floating around your room. This article gets into some more interesting math at the end, but if you're at all familliar with Matlab, the first few sets of instructions should be pretty easy to understand. If not, just google the funcitons, and find their native equivalents for your environment (or create them yourself!) This will be a little more realistic, and much quicker to calculate than perlin noise

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

Happy flying!

like image 107
Peaches491 Avatar answered Sep 19 '22 12:09

Peaches491


Maybe you're looking for boids?

Wikipedia page

It doesn't feature Perlin noise in the original concept, maybe you could use the noise to generate attractors or repulsors, as you're trying to do with the 'fly to lighter' behavior.

PS: the page linked above features a related link to Firefly algorithm, maybe you'll be interested in that?

like image 38
jv42 Avatar answered Sep 18 '22 12:09

jv42