Here is a little post about Curl-Noise and nodal programming design in ICE.
My personal current project is an implementation of the Curl-Noise Siggraph 2007 paper by Robert Bridson, Jim Hourihan et Markus Nordenstam.
The interesting point in the Curl-Noise technique is that it is divergence-free. You define a smoothed scalar field and then use a curl function to get the …curl effect. By definition it is incompressible. So it can be used to create some fluid like effects. Here is a wip : http://www.vol2nuit.fr/guillaume/blog/wind_tunnel/wind_tunnel
I try to stay close to the siggraph paper in the ICEtree implementation and I try to avoid any custom ICE node. It is a very interesting exercice as “nodal programming” can’t be compared to classic programming. For example, in C++ it is easy to call a function from an other one like this :
do_something(x,y, v)
{
v[0] = my_function(x,y);
v[1] = my_function(x+1,y+2);
}
In ICE, if you stick to this code it coud look like this :
compound do_something
> sub-compound my_function (with x,y inputs).
> sub-compound my_function (with x+1 and y+2 inputs).
Apparently it is very easy to translate C++ code into an ICEtree. But if you need to change the sub_compound “my_function”, you must increment the compound version, then export and update all the compounds to the latest definition. In my example with two instances of “my_function” it doesn’t look very complicate but for more complex things it can be a nightmare to debug ( even using the compound version manager). I tend to prefer the ICE array way. You create an array of position like this :
myICEarray = [x , y, x+1, y+2] and then use only one compound “my_function” with this array in input.
ICE is very new and I’m sure that some interesting techniques will appear using this “nodal programming” tool. Don’t you think ?

