Skip to main content

Perlin Noise Generator

A Perlin Noise Generator.


Ian Mallett
(geometrian)
I needed Perlin noise for a program I'm writing, and there weren't any good, easy implementations to use, nor any I could find in Python.

In a few hours I came up with this. It should be pretty straightforward. All the parameters are laid out--though you'll probably need to look around to find what they actually mean in detail. In brief, Perlin noise functions provide randomly generated noise. The features of this noise are all precisely the same size. By layering different frequency "waves" of this noise on top of each other, you can get chaotic looking random stuff. Higher frequency waves have less influence (amplitude). The number of waves is defined by "octaves" (line 98), the "persistence" (line 99) tells the factor by which the amplitude decreases over each harmonic, "tiledim" (line 21) is the number of cycles in the 1st order harmonic in one tile (before it repeats), and "repeats" (line 22) is the number of repeated tiles on the screen. The inputs as they are now generated the screenshot.

The screen shot was generated using an unmodified version of this program (the parameters are all the same). The screenshot is a single tileable 512x512 image in greyscale. I included a tiletester, which allows you to select a file and then visually see if the edges line up. All images created by this program should, as long as "repeats" is an integer.

Released as open source, as always. Give me a ping if you find this useful :-)

Links

Home Page
http://geometrian.com/programming/index.php

Releases

Perlin Noise Generator 1.0 — 28 Feb, 2009

Pygame.org account Comments

  • Guest 2011-04-30 16:40:56

    "Your" noise code is copied-and-pasted from here: http://homepages.nyu.edu/~jek3...

    ... which is copied-and-pasted from here, with added comments: http://mrl.nyu.edu/~perlin/noi...

    Your "contribution" seems to be limited to deleting the copyright notice and attempting to take credit for it.

    Ian Mallett 2013-03-13 23:27:43

    First, both of your links are written in Java, while this is written in Python. So no, I didn't copy+paste. At worst, I ported.

    Second, as omnirizon notes, if you look at the code, you'll find that it's actually very different from either of those links. I indeed used Ken Perlin's original source (your second link) as a reference (it's called a "reference implementation" for a reason), but the specific Python code was, out of necessity, all mine. As I wrote, one of the motivations for this project was a lack of sufficiently understandable Python code demonstrating Perlin Noise.

    Third, the copyright notice for Perlin's code is specific to that source and only restricts its direct use. I didn't use either source directly (items 1 and 2), so their copyrights are irrelevant. As to the *algorithm itself*, it was never patented, which makes it free for use. In any case, I clearly did not misrepresent that my code implements *Perlin* noise.

    Have a nice day.

    omnirizon 2011-05-20 17:08:44

     The author claimed this was his implementation of the Perlin noise algorithm.  how is that attempting to take credit for Ken Perlin's work?  Aside from both being an implementation of the same algorithm, the author's source code is rather dissimilar from Perlin's reference implementation.
    Your "post" seems to be limited to making unfounded accusations regarding the author's intentions.