Perlin Noise

Started by
4 comments, last by DeltaVee 22 years, 7 months ago
I have the perlin noise generator, it works and all, no problem. I am plotting the the value returned for noise3(x,y,time), what I would like to create is a ''tile'' that matches left side to right side and top to bottom? What do I need to do? Thanx in advance. D.V.
D.V.Carpe Diem
Advertisement
Try this:

Generate one block using noise3(x,y,time). As you suggest, the generated block may not match on the sides, top and bottom.

Say this is the original block:

=/

To make a tileable block, do the following:

1) Mirror the original block alone one side, to get a double-length block. The double-length block is then tileable left-side-to-right-side.

Example:
=/\=

2) Take the double-length block and mirror it on either the top or bottom, so you now have a double-wide, double-tall block. This block is now tileable left-to-right and top-to-bottom.

Example:
=/\=
=\/=

or

=\/=
=/\=

The examples may be a bit abstract but you can see that the result *is* tileable left-to-right and top-to-bottom, .

Graham Rhodes
Senior Scientist
Applied Research Associates, Inc.
Graham Rhodes Moderator, Math & Physics forum @ gamedev.net
I tried that (mathmatically) and it looks just like it has been mirrored along the X and Y axis. I am trying to avoid this because to the eye it looks like a cheap 1970s effect.

If you take a look at the DX8 SDK there is a bunch of bitmaps called caustxx.bmp that tile left to right top to bottom AND over the sequence from beiginning to end (24 frames), I was trying to do that.

D.V.

Edited by - DeltaVee on August 31, 2001 2:11:20 PM
D.V.Carpe Diem
Does your noise generator take boundary conditions, for example can you *specify* the values along the walls---with the algorithm generating interior values given the wall constraints? To avoid the cheap mirror look, I expect you''d have to do something like this.

Graham Rhodes
Senior Scientist
Applied Research Associates, Inc.
Graham Rhodes Moderator, Math & Physics forum @ gamedev.net
You can do something like this to make your tiles seamless:

Here is the paint program method:

Copy the left half of your tile, and paste it in a new layer directly above the right half of your tile. Now copy the right half of the original tile, and paste it into the upper layer directly above the left half of your tile. You should now have the original tile in the lower layer and a copy of it in the upper layer, but offset so you can see the seam down the middle. Now, do an alpha blend from the middle to the edges, such that the middle is 0% and the edges are 100%. This will make the tile seamlessly tileable horizontally speaking. Do the same thing, but vertically to take care of vertical seamless tiling.

It should be easy to implement this method in your code.





I had the same problem a while ago when I was making a small texture generator program, specifically when interpolating the perlin noise functions. What I did to make every texture wrappable is to that when interpolating around the edges I used some control points from the other side. I.e. I wrapped the control points around. A way to visualise this is to make some sort of roll or cylinder or sphere out of the image.

But a thing to note when doing that is that there should be no points directly on the other side of the image (on the border) otherwise you''ll be missing a section.

i.e.
+----------+|          ||          ||          ||          |+----------+ <- Image*-*-*-*-*-*+|          |* * * * * *||          |* * * * * *|+----------+ <- Image with control points(* = control point) 

Daemin(Dominik Grabiec)

This topic is closed to new replies.

Advertisement