Turbulence Library - Massive collection of complex and fast noise on the GPU (481245)

Hi everyone,

I spent the last months working on an advanced coherent noise generator that is completely shader based. The shaders are texture-less and are VERY fast, using a 32 bit hashing function on the GPU. My work is almost done (just need to add more documention) and I plan to release it to the Asset Store over the weekend. Unlike CPU based libraries like libnoise, everything in the Turbulence Library can be altered in real time.

Three types of shaders are available : simple fragment programs, surface shaders and surface displacement shaders. You can create anything from procedural terrains, textures, special effects, clouds, etc.

Noise types : Voronoi (F1, F2, F2-F1, etc), Perlin, billowed and ridged noise and their Simplex versions. Most of the noise algorithms come from this GREAT blog: http://briansharpe.wordpress.com/. Here are some examples :

The real appeal of this package are the more advanced noise shaders. Those are based on the derivatives of Perlin, Simplex and Hermite algorithms. (See: Scape: 3. Procedural extensions). These functions produce very realistic and interesting results :

A web demo featuring all the 3D noise shaders implemented is available here : http://dl.dropbox.com/u/9289442/WebPlayer/WebPlayer.html.

It requires a shader model 3.0 card. This has NOT been tested on a Mac yet, so Mac users are welcome to give me any feedback. Try using the “Anim Speed” parameter for cool effects!

Is there any interest for a package like this?

EDIT : Not working on Mac right now. I’m translating all my shaders to pure GLSL and the webplayer will be updated soon.

EDIT 2 : Web player updated! New features : Color and texture blending, GLSL support (need feedback from Mac users).

EDIT 3 : Everything works on Mac now! Coming soon to the Asset Store.

Here are some textures created in seconds using the new features :

EDIT 4 : Turbulence Library is out on the Asset Store! Grab it here http://u3d.as/content/badland-interactive/turbulence-library/3aK.

EDIT 5 : New noise types : Stars, Polka Square and a complete Worley/Voronoi generator (see page 3) adding more than SIXTY types of noise!

EDIT 6 : Turbulence Library 1.1 released!

Hope to hear your comments!

1 Like

I am intersted since I always wanted fast noise generation.

I wonder if you could do fft calculations to be used in an ocean shader/systen.

Demo not working on my Mac (3.06 Hz Codre Duo), just giving untextured planes.

Except cellular noise, value noise, Hermite badlands, Hermite billowed, HermitelQ, Hermite ridged, Hermite standard, Hermite swiss, Perlin badlands, Perlin billowed, PerlinlQ, Perlin ridged, Perlin standard, Perlin swiss, Simplex Badlands, Simplex billowed, SimplexlQ, Simplex ridged, Simplex standard and Simplex swiss, the rest are working, but i suppose I’m missing the best ones

Yep, I’ll put my hand up for that…

Good idea, I will see what I can do.

Alright, I’ll have no no choice but to write a pure GLSL version of all shaders. I will update the demo soon.

Hmm, that’s strange. Are you running the demo on a Mac? Does your card support shader model 3.0? More information on your system would be very helpful.

I’m running on an iMac with 3.06GHz. I’m not sure if it supports shader model 3.0, i’ll have to check

Thanks, I forced Unity to OpenGL and got the same results, so I’ll write a GLSL version of every shader. I’ll let you know when the webplayer will be updated.

Great stuff. I’ll be keeping my eye out for this. Some examples of incorporating multiple colours and diffuse texture blending would be welcome. Being able to use the animated noise and add/multiply/subtract from a texture will open up possible applications for us.

My main focus right now are the noise shaders, but adding color and texture blending will be in the first release. However, my next project consists of a complete procedural terrain generation based on Turbulence Library that will feature many operators (add, substract, multiply, etc). You’ll still be able to render the shader to a Texture2D with this library though.

Count me in for this package. Nice!

Thanks!

Quick update :
The GLSL conversion is nearly done and works well on Macs. Also, I have included color and texture blending as Games Foundry suggested. You’ll be able to play with the new options in the updated webplayer soon!

This has potential - I’ll certainly keep my eyes on this.

I can confirm FFT calculations on the GPU will be in the first update of Turbulence Library, which will take no longer than 1-2 weeks after initial release. My main goal right now is to release the library as soon as possible so developers can give me feedback.

The first release of the Library will offer the possibility to render the noise to standard Texture2D. The ability to add/multiply/substract will be added in the first or second update.

The terrain generator, complete with dynamic LOD, tri-planar texturing and procedural height fields is a project on its own.

Thanks for the replies!

jesta, will there be a limit on how many gpu cycles the shaders can eat? Because right now the demo is overheating my ati 5870.

There’s no limit right now, but I find it strange that your graphics card is overheating. When testing on my old Nvidia 9600m, the application slows down but the card is never overheating. I could find a way to limit the gpu cycles though.

Well the card’s temparature rises more compared to 3d gaming. I believe that there should be a gpu cycles limiter so the shader does not eat so much power from the rest of the graphics work.

I really like the possibilities, it seems very fast.

Would I be able to add a custom texture to the 3D Surface for RGB and keep the noise texture as Alpha and then use the Alpha for transpareny ?

Alright, I’ll see what I can do.

Absolutely. Every shader has a “Use Alpha” parameter that computes the height in the alpha channel while leaving RGB components for up to 2 possible blended textures. Transparency is not handled at the moment but I could include an example that demonstrates how to do it before becoming a full feature in a future update.

Okay. I’m playing with the webplayer and thinking distant gas clouds and nebulas.