Jump to content

eetu's lab


eetu

Recommended Posts

eetu, could you please explain in more detail the method of creating new particles from the input point geometry?

How do you determine the position of the newly created particles? I've read some articles online

that suggest constructing a bounding sphere between the original point and the closest point to it,

then randomly populating new points within the sphere, but you're obviously doing something different...

Link to comment
Share on other sites

How do you determine the position of the newly created particles?

For every point in the previous generation spheres, I calculate

approximate occlusion with the Ray SOP. The collision primitives

also include all the generations thus far, plus any invisible restraining

geometry you might want to use.

Then I scatter points on the previous gen spheres, according to the

above occlusion attribute.

("Alternate Attribute" option in Scatter SOP)

I think I created 8 new points per generation here.

eetu.

Link to comment
Share on other sites

Sorry, I phrased myself badly. I was asking about particle generation technique in the 'Billion points' project :)

Haha, oops! :)

For the first frame initial particle generation, I just make n copies of the original particles, with a random

offset, which amounts to just copying a cotton ball to each particle. The method you describe would be an

improvement, at least in some cases.

For subsequent frames I do not generate any new particles, I 'resimulate' and move the existing particles.

This is less flexible than explicitly generating particles at each frame, but ensures temporal coherence and

will make motionblur easier. The cotton balls go away in a few frames. I have some ideas about improving

the initial distribution, it should be easy as it needs to be done for only one frame.

eetu.

Link to comment
Share on other sites

sorry to clutter up your lab with questions :) It would be nice if we could fork off threads so that the main thread doesn't get hijacked :ph34r:

In any case, thanks for your explanation. I was trying to use the foreach sop so that I could have an unspecified number of generations (recursion would be ideal). Did you created a subnetwork per generation, or something like that ? Read your points, scatter your points, copy spheres to points, write points to file, repeat ? How did you repeat if not with a foreach sop ?

thanks, last question I promise.

-ranxx

Hi,

I don't have that scene here, but things you might look for;

checking for occlusion (Ray SOP) so that scattered points do not lead to interpenetration,

scatter only on the latest generation of geometry, and

there are many ways to skin a cat in Houdini, but I don't think I used foreach here. Roughly: file read, scatter, copy, file write.

eetu.

Link to comment
Share on other sites

In any case, thanks for your explanation. I was trying to use the foreach sop so that I could have an unspecified number of generations (recursion would be ideal). Did you created a subnetwork per generation, or something like that ? Read your points, scatter your points, copy spheres to points, write points to file, repeat ? How did you repeat if not with a foreach sop ?

The repeat is done using the file read and write. At start of every frame I read the previous

generations from disk, eg "feedback_`$F-1`.bgeo", and at the end I save the current plus

previous generations to "feedback_$F.bgeo". This is a pretty common technique, I think.

If you do not want to retain all the steps, you could just read/write with a static filename,

but I like to store an animation of the process ;)

These days there is also the new Feedback SOP..

A simple example of the file method attached.

eetu.

ee_feedback_example.zip

Edited by eetu
Link to comment
Share on other sites

ahh of course, thank you !

-ranxx

The repeat is done using the file read and write. At start of every frame I read the previous

generations from disk, eg "feedback_`$F-1`.bgeo", and at the end I save the current plus

previous generations to "feedback_$F.bgeo". This is a pretty common technique, I think.

If you do not want to retain all the steps, you could just read/write with a static filename,

but I like to store an animation of the process ;)

These days there is also the new Feedback SOP..

A simple example of the file method attached.

eetu.

Link to comment
Share on other sites

For subsequent frames I do not generate any new particles, I 'resimulate' and move the existing particles.

Thanks for the info! Still it's a bit unclear: what do you mean by resimulation?

Are you moving the new particles according to the velocity in the previous frame?

Or you're averaging the 'v' and 'P' value from the neighboring points for each point - if that makes any sense?

Or there is some other magic :)

Link to comment
Share on other sites

Thanks for the info! Still it's a bit unclear: what do you mean by resimulation?

Are you moving the new particles according to the velocity in the previous frame?

Or you're averaging the 'v' and 'P' value from the neighboring points for each point - if that makes any sense?

The basics are in the original post;

The method I ended up with was simple; the new particles get their velocity

from nearby particles and move according to that. Think of it as the old particles being some

sort of attractors, or just as v attribute transfer. Just transferring P would've been "safer", but

the result would be more boring. With v there would be some new emergent behaviour.

Transferring force/acceleration would be even more exciting, but more risky too.

The transfer recipients are the new particles, and the source are the original houdini-simulated

particles in the neighborhood. When changing to the next frame, the new particles are moved

according to their recently gathered individual unique v, and a new set of original particles is

loaded from disk for a new round of the same.

eetu.

Edited by eetu
Link to comment
Share on other sites

  • 2 weeks later...

Yep, that was my first foray into voppops.

The effect is based on the Signed Distance Field volume representation of the text.

Each voxel in the SDF volume has the distance to the nearest surface in it. You can

also think of it as how "deep" you are in the volume at that point in space.

By convention the values inside an object are negative and outside positive.

The VopPOP acts like a "keep at surface" operator. It samples the gradient of the volume

at a particle's position (the direction into which the volume value increases most) and also

the volume value (how far we are from the surface). When multiplied, we get a vector that

points toward the surface from both outside and inside an object, and the magnitude of the

vector gets larger, the further we are from a surface.

Apply this vector as an acceleration force on the particles, add some noise and draw the

resulting trajectories and you start to get something pretty :)

sdf_voppop.png

eetu.

ee_sdf_voppop.hip

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...
  • 2 weeks later...
  • 3 weeks later...
good work it looks great.. i was wonder wat is partimul.exe?

is it something inside.. houdini?

Nope, custom code. Fragile, quite particular about the inputs and with everything hardcoded :)

Maybe I'll get to cleaning it up one day and upload.

eetu.

Link to comment
Share on other sites

  • 1 month later...

this is awsome testings, way above my head tho yet with writing your own exe file to process particles and stuff, cool!!

In your snow example you mention use of chops to get the geometry to stay deformed, as i yet have to learn that area of houdini, how is chops used to keep the deformation?

Link to comment
Share on other sites

  • 4 months later...

Oi, I have neglected this thread.

Last weekend at the Nordic TD Forum I gave a small presentation on my particle multiplication technique. It was only a 5min slot in the fast forward session, so it's pretty fast.

Here are a couple of different res quicktimes of it: http://undo.fi/houdini/pmul/ntdf/

Apologies for the finglish ;)

eetu.

Edited by eetu
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...