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
This 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) ).
downloads
ixDartThrowEmission ice compound : simple example of how to do brute-force even distributions on surfaces.
Tags: 3d, ice, particles, softimage, xsi
Hi, i was looking for something like this. I tryed to make it in ICE but my programing cap. are limited. Can you share a compound or some more info?
Hi Mario
Sure! I’ve added a download.
Make an empty point cloud, and create a simulated ICE tree on it. Add the ixDartThrowEmission to an execute port in the ICE tree terminator node. You can find the node by going to the Tasks tab, under ixTools drop-down, in the emission category.
Create some geometry to emit from and plug it into the emitter port of ixDartThrowEmission.
Press play!
This is a pretty simple compound, and there are lots of ways to improve it.
Hope it gives you some ideas :)
Tks man!!! I’ll take a look!
Nice work! I played around with the compound and made some changes to it which I think improves potential overlaps when using particles of vastly different sizes. Can send it to you if you’re interested. BTW, I came across you when looking into diffusion-limited aggregates, just uploaded a vid on vimeo. :)
I’d love to see your improvements on the compound.
Thanks for your interest!
Your vimeos are great!
I am also quite interested in the improvements AM did to the compound. Any chance to get my hands on them?
Cool technique. I did also some tests how to make a uniform scattering faster and more precise.
A short description about this idea can be found on me website:
http://www.schnellhammer.net/blog
Was wondering what algorithm you used to do the example of the face with the various sized spheres nicely packed?
Rhys,
I just used a brute-force inject-and-reject method, pretty much the most simple approach possible.
This other post shows a bit more about it: http://blog.ioxu.com/?p=301.
It couldn’t be more simple!
Thanks for the info!
I was kinda hoping that you had figured out a super fast efficient method :)
R