Submitted by Richard Fabian, posted on January 18, 2001

 Image Description, by Richard Fabian This is a new fractal (I think) that I have named "Blob map". It is a type of perlin noise function, but the idea came from having to do materials in our terrain (so that we can get things like waterfalls to occur naturally). I set about devising a fractal that had equal probability of any material being at any location, but had the smooth edges and irregularities associated with a perlin noise (terrain) funtion. The fractal just returns the index of the current highest perlin noise fractal, so programming it was easy, but actually thinking about how to do it took some time. I initially tried to make an N-dimensional perlin noise function, and just disregard any plots that fell outside an N-dimensional triangle (so that the probability was always equivalent), but reading the tutorial on Barrycentric coordinates, i prooved to myself that to plot any point inside an N-dimensional triangle, all you needed was to supply scalars to N-dimensional verts, and find out which corner the result was closest to. Now simplifying this to a case of strongest scalar wins wasn't a big deal, so that is why i now use this highest perlin function returns its index. If you want the source code or a demo, I have put them on my operations site. (this is the organisation web site) http://omnisentient.vcollective.org/engine/downloads/index.html

 [prev] Image of the Day Gallery www.flipcode.com [next]

 Message Center / Reader Comments: ( To Participate in the Discussion, Join the Community )

Archive Notice: This thread is old and no longer active. It is here for reference purposes. This thread was created on an older version of the flipcode forums, before the site closed in 2005. Please keep that in mind as you view this thread, as many of the topics and opinions may be outdated.

 Manuel AstudilloJanuary 19, 2001, 06:10 AM

Hi,

Well, this was a quite interesting IODT for me since I am working in a procedural texture editor
(check IODT 28 dec) .

the thing is that I dont really understand how this blob fractal is supposed to work with the
terrain generator. During my texture researching I found out that the best highmaps you
can achieve for terrain generation are created using a thing called Fractal Sums of Perlin Noises.
That is just adding a few perlin noises functions with diferent frequencies. The result is a
heighmap that has mountains and hills and then in every mountain you get more detail,
like smaller and smaller mountains, etc. You can select how much detail you want just
having high frequencied perlin noises, and if you want bigger and less detailed mountains (to
simulate the effect of the erosion) use low frequencies with high amplitudes, or if you want
big mountain with big details just have both kind of noises...

But thats just for heighmap generation. the topic of the IODT seems to be, or at least I have
understood it, for creating procedural textures for the heighmaps. And thats the part that I
For example, if you have water, like in rivers etc, how does the blob fractal calculate where
to put water texture so does it follows the path of a river in the terrain, etc?.

Well, I would like to have a litle bit more of detail if someone could help me out to understand
how that is achieved with the blobs fractals.

Greets,

Manuel Astudillo.

 RaspberryJanuary 19, 2001, 06:24 AM

My blob map is just a way for me not to define vast areas of one material or another, so i can use real synthetic erosion on the landscape, and get waterfalls without ever putting in any arbitrary values apart from the random function manipulative values. This fractal is what it is and nothing more, if you can find a use for it, steal the code. I found a use for it, in fact i designed the fractal for a purpose, and am happy with what I got. That may sound a bit bitchy, but seriously, if you have no use for my code, then i am not offended, I just think that it does the job, within the limitations that i set it, and for that, i am happy. The blob maps can be scaled to any degree just by adding further iterations, and making the other variables out as you would like, so you may find a use in them by having them *taint* your landscape textures, so that they look like natural colour differences on rolling plains. They are no use for defining where rivers and lakes are, as they do not conform to my height fractal, but that wasn't my aim, so that does not dissapoint me.

BTW: have you got a demo of your texture package, i was really interested, but couldn't find one?

 Hannu K.January 19, 2001, 11:31 AM

Thank god the comments are back :).
Cool demo, it was quite fast and the source was short (=bonus). Maybe I'll use it for terrain materialization too.

 fluffyJanuary 19, 2001, 07:09 PM

What's so great about my coding style? Okay, so I make lots of use of polymorphism and the STL, and my pseudocode is usually really close to actual code that just needs to be filled in, but... :)

 Johnny SvenssonJanuary 23, 2001, 09:35 AM

Well, you could always try a weighted filter, like emboss, to get a "smoother" landscape with some mountains/canyons..

weighted filters works something like this:
you have a matrix(ie the values for a certain filter, in this example emboss) and it looks like this
{
-1,0,1,
-1,0,1,
-1,0,1,
}

Then imagine having a pixel at 12,43.. now you take that pixel, and the eight surrounding points, and multiply them by the corresponding value in the matrix, add the values togeter, and finally add 128 to that sum, and you have your embossed pixel..
(pardon my lousy english, hope ya'll understand this anyways ;)