Popcorn FX is capable of some pretty sophisticated particle effects. With a little effort one can get past the “usual” turbularized effects and push the limits a bit. Here’s a “fractal flame” look made by spawning, coloring and moving particles with layered noise fields. Given the number of particles used to give the soft look it’s not really something you could include in a game or application but was a fun way to explore some techniques which could be used for more efficient effects. You can get a similar look with much better performance using a vertex shader to distort a mesh and a fragment shader with an additive fresnel transparency, but again the point of the exercise was more an exploration of PopcornFX. That said, this does run in realtime with about 24 fps in the editor, pretty nice.
Here’s a scene file and a couple of compounds which compute a simple noise function and then create a reticulated “push” from it. It’s meant to demonstrate how a simple spatial noise can be layered on itself to create a fractal, visually pleasing result, as well as give a little insight into how functions like perlin, worley, turbulence etc can be similarly layered to create a huge variety of natural looking patterns.
Scene file and compounds (softimage 2013): exampleICEreticulation
Rob Chapman posted a cool whirlpool deformer to the “Resource Dump” on SI-Community here. Since I had been doing a lot with logarithmic spirals recently I decided to make one from scratch and compare the two. Here’s the result.
Instead of using Rob’s wave deformer, since it’s fun to share it out there’s a “ridged turbulence” compound in there. Here’s what it looks like when used as a deformer:
And here’s the file (softimage 2013 ~160kb): alt_whirlpool
Having established a good start on hydraulic erosion, I moved to another area necessary for any good terrain toolkit – establishing a set of basis functions, from which you can achieve a the natural complexity needed by mixing various basis functions based on criteria such as latitude, slope, height, other fractals etc. Each basis function has it’s own character and “look” so to get a good heterogeneous result it’s valuable to be able to draw from a number of different functions. For example, here is a set of simple spheres deformed by a compound in which I use ICE’s excellent worley noise as a basis, which is then iterated through over a user-defined number of octaves, some of which are further modulated by a simplex fractal. You can see the character of the worley noise clearly, but where the simplex modulation comes into play you get a much more interesting result:
Less “terrain-like” is this output from a reticulation compound, which uses as it’s basis the “computational” noise described by Stephen Gustafson et al:
Interestingly, I approached this project having not read Ken Musgrave’s various writing on the subject of terrain generation outside of white papers. Once I did, I found that much of what I have discovered anecdotally he thought through in detail long ago. This is awesome, because it shows that my thinking has validity (after all, there are few who have spent more time and energy on the subject than he) and also because it gives me more threads to pull. I now have a series of compounds at my disposal that do various “terrain stuff,” now I can take a step back and decide how to assemble those experimental compounds into a more user-friendly and extensible set of ICE building blocks…
My personal project of creating a series of nodes useful for terrain generation in Softimage ICE is going well. Here’s a terrain made with two of the compounds, and is based on a pyroclastic noise with slope suppression followed by 24 iterations of a compound implementing a fast hydraulic erosion scheme I’m playing with. There is some tendency of the erosion to create bands where edges flow in an even grid due to my use of Von Neumann sampling in the erosion routine, which is fast but I may have to add an option to take a speed hit and sample more thoroughly. After this I will implement a more thorough and more traditional hydraulic erosion scheme and compare the two.
In between other projects I’ve slowly been building a number of softimage ICE compounds which deal with aspects of terrain generation. Here’s a result of two of them: a ridged perlin fractal and an iterative slope-based errosion. Only the basics are in place as of now – for instance I need to change the compounds to optionally deform along the original surface normal as opposed to just a y-up implementation (so you can generate planet surfaces etc) and create a set of nodes that let you blen various types of generation schemes (to get, say, a mix of ridged multifractal and fault-fracture methods.) Other items on my “to-do” list include:
Texture masks based on height, curvature and slope
River generation (I have one approach but it leaves a lot to be desired)
Additional fractal deforms (worley and other cell based schemes, “hill”, variants on multifractals)
Crater formation, ecosystem maps, more refined erosion, and mountain/valley range formation
So, there’s a lot to do. But one step at a time.
Over time people have been asking me to share the DLA compound I wrote waaay back. So here it is.
The compound can be found in the downloads section.
Diffusion limited aggregation is a natural phenomena in which particles in solution build up over time – as particles are deposited they limit the locations where subsequent particles can be deposited, resulting in a pseudo-random growth of deposits with characteristic nodules and ‘fjords’. You can see examples of DLA systems in nature all over, from veins of copper to urban growth patterns. In this simple ICE implementation particles are emitted from geometry and then pulled towards a “seed” point, namely the point cloud the compound is applied to. If there are no existing points in the cloud the first will be deposited at the origin. This causes DLA structures to build towards the provided surface and then to spread across it or inside it’s volume. The compound has a turbulence node which adds a random tropisim as well as a vector input for user-directed tropisims. Please be aware this was never intended as more than an experiment: it works fine but is a pretty simple implementation.
To use: apply the compound to a point cloud (typically with a single point) in a simulated ice tree… …