« ambient cube CG realtime shader
» more ICE point distributions


ICE point distributions on surfaces

01.08.09 | 10 Comments

Here are some ICE attempts at making even point distributions on arbitrary meshes. It’s hard to beat the look of evenly packed points.


I used this problem as my first experiment in xsi ICE.

I’ve been playing with this idea for years and years, and I’ve managed to make my programs do smarter and smarter things to produce these kinds of distributions. But for this first foray into ICE I used the good ol’ dart throwing and dart rejection method.

I generated points randomly over the entire surface and used a Get Neighboring (sic) Particles node to decide whether or not to reject the point.

Within hours I had reproduced the results of an xsi plugin that i had spent weeks writing. :( and :)

The main problem with dart throwing is that the system is not aware of a complete state. With this ICE tree I had to manually stop the iterative stepping once it had generated a result i could live with. As more and more points are successful, there is less and less chance that a new candidate will be successful. The surface fills up quickly but it takes many iterations to generate a tightly packed result.

dart throwing in ICE from benp on Vimeo.

As you can see the rate of successful candidates drops off to a painfully low level very quickly ..

Further tests

My next test, back when i was writing my python plugin to do point packing, was to try an approach where I iterate through a polygon mesh triangle list, adding points using dart throwing, using a function of the sum of circle area and triangle area within some threshold to know when I had ‘filled’ the triangle. This would let the system approach a final solution algorithmically. I just have to work out how i can do this in ICE.

I could try using an electro-static relaxation type idea to generate n points and iteratively relax them into a stable state.

I think a cool looking test would come of planting a seed point and growing adjacent points around it iteratively, growing a whole field of packed points. A bit like Diffuse Limited Aggregation. ( .. and for the sake of biggupping Paul Bourke, and Andy Lomas)

Here is a very interesting idea using scalloped sectors to generate Poisson-Disk sampling patterns (Daniel Dunbar and Greg Humphreys, University of Virginia)

more ICE dart throwing tests




Old attempts:

A very old test in povRay

hwdistributions3bThis was made in something like 1997, using povRay SDL code to generate packed distributions on a 2D plane. From what i remember, the text overlay says that there were 1657 points generated, after bailing out at 10,000 attempts, taking 27365 seconds ( 7.5 freakn hours! (I must have left that one boil overnight) ).


ixDartThrowEmission ice compound : simple example of how to do brute-force even distributions on surfaces.

Tags: , , , ,


Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

« ambient cube CG realtime shader
» more ICE point distributions