Jump to content

Cell expension algorithm suggestion


Recommended Posts

Hi guys,

I need to do cell replications effects close to what this thread describe

But i don't want a simple recursive split kind of look 

- i would need to find a way were cells push each other elegantly  

- i would need that we feel that each cells is connected to one another with a soft spring that create smooth jiggle when all the system expend

- this feeling thet the global behavior of all cells is connected and that the move of one has some impact on all the network is important


I am not searching for houdini only stuff ...

There was some killing video of a guys that describe a method like this but after going throw my 632 likes on vimeo i can't put my hand on it. :)

They were black and white processing/cinder like animation that show very nice sphere expension with nice connections beetween each sphere.


Any good piece of code / reference that would point me in the right direction would be great !


For the moment my heart is balancing beetween

- POP with custom force in a wrangle according to distance to closest point 

- Bullet solver setup

- some wire solver for the connections beetween each cells ?

- Some CHOPS to do the jiggle effects in post process ?

- Maybe a Mix of all of this ?


Thanks for your lights  !






Link to comment
Share on other sites

That's a great one Richard ... added t my growth bookmark ! :)

But this is not the one i was thinking of.

- What i find interesting is that cells are pushing each other and i think this can be done with a wrangle and a pcopen with outward inward force depending on distance

- What i don't like is that cells behavior looks to be driven by a 3D texture pattern , i would like something that live on itself and could propagate in space at infinity


The video i was thinking of were more 2D stuff like , i think they were initially describing space colonisation like algo to generate tree but what was very cool is that they were constantly reacting beetween each other.




Link to comment
Share on other sites

Been experimenting with this tonight, might give you some ideas. Did some tests a while ago with pops, replicate, interact, which works, but limits you to spheres. Was curious if you could replicate more interesting geometry. Tried with packed rbd, wires, then the grain solver, which shows the most promise. I've been doing lines (the image in my head is longish bacteria cells), but could probably be modified to support other shapes. Its not perfect, grains/pdb inherently gives you a harsh jerk when it detects collisions and does an instantaneous position change to correct it, but its very fast, and quite stable.

The nice thing about this method is it uses a sop solver next to the pop/grain solver, so you can do sop tricks to do your cell division effect.

It looks more naturalistic with some wind noise and drag, but I've left them bypassed so you can see just the grain solver and sop replicate do their thing.

Playing with the grain properties gets all sorts of interesting effects (this is the tamest one, others do pleasingly wriggly worms or intersecting pile ups), fun stuff, albeit not exactly controllable.




  • Like 6
Link to comment
Share on other sites

Great stuff Matt , as always !

I find your effects extremely cool , and extremely close to the original ref of the post i have mention above.

To be honest i will only start working on this next week , but was trying to catch good visual ref and codes before start.


For what i have to do i think i will start with the exact tool you mention POP / Pop replicate . but the guy want to tell the story of a cancer cell that propagate and grow.

So the way i see it is that it start and then expand in a fast scary way like an invasion of bad guys.


the first test i will try is define for each point:

- @radius = radius of the cell

- @mass = mass of the cells

- @radius_repulse = area where closest point can't go and thus if cells are found in this area use - (pcfilter(pc,'v')) next frame

- @radius_expension = the radius of the area where the cell will have an expension movment in a radial way. if the original cell is at {0,0,0} then all cells will have expension with @v = normalize(@P - {0,0,0}) * @kSpeed * @mass

- @radius_drag = the radius of the area where the particle start to slow down to take a static position so @v = @v * drag

- @child = the number of child a particle can have for replication 


so the first point is emitted radius go from 0 to @radius, then @child are emitted at a @radius distance of the initial POP and of course their radius growth and the repulsive force also grow.

etc ... in a recursive way. This part is maybe not the hard one


i then need to create the line beetween each father - child with addprim + curl noise to get that freaky look , that might be even cooler to have multiple connections that roll around the main one ...

so i just get POP and line and then send those line to a wire solver to get some jiggle could be nice , CHOPS might also be an option ... that's how i would see the stuff before attacking the pb !

But that also sound like a bullet workflow to me might be a good idea also.


For the grain solver i must take time to learn it but i find the controllers and the logic confusing and not crystal clear , and i try to stay away of complex / blurry stuff in production with violent deadlines ( 99% :) ).

POP / Bullet / CHOP / SOP sound better to my ear for precise control ! 


I will post a hip when i have something good enough 


Thanks again for your help Matt i will study your hip in depth  !





Edited by sebkaine
Link to comment
Share on other sites

The grain solver isn't too tricky, I made that example as simple as possible. You just stick it in a pop network like any other pop force, it then becomes the primary driver of pop motion. 

The only other things it expects is @pscale on the points, and edges connecting the points with a @restlength attribute, which the 'convert line' sop can do for you. 

Regarding the other techniques, I'll tidy up the pop/wire/bullet tests I did and post them. The main thing that pure pops does well that none of the others do is a soft, controllable, dare I say 'elegant' repulsion effect when the cells divide. The interact pop uses forces to push particles apart, so you can control the repulsion with a falloff, or drag, or speed limit, to get a very soft split. Wires get tangled very easily and stay tangled, packed rbd with bullet also don't elegantly de-intersect, and it's a feature of the grain solver that it instantly de-intersects by altering @P, rather than using forces. 

  • Like 1
Link to comment
Share on other sites

Well Matt very informative stuff ! and your test is really closer to what i have to do.

For the grain solver i will take the time to study it , but each time i have give it a try it was kinda slow compare to pop + wrangle. But your first test prove i'm wrong.

The thing is that

- i agree with you for total control in POP.

- i also agree that bullet only will might not be enough for all the fx.


But i am still discovering DOPS but i have this feeling that there must be ways to blends the + of POPs and the + of Bullets inside a Multisolver in some way.

Both tools are simple / fast / controllable but suceeding to blend the control of POPs and the feelings of some smooth spring constrain beetween all the network could be an interesting path to dig.


Basically Grain Solver gives you POP and then add POP collision + POP constrain , but in an osbscur way imo ...

If you only go POP you can have avoidance etc ... but you miss real collision and spring constrain ... that's a shame 

If you go bullet only you go for a full random dynamics path and that will not give you POP control

But finding a way to use POP and Bullet together inside a multisolver intuitively sound like the most elegant solution to me , with simplicity / control / speed !


There is this article that i find cool about the jack frost effects



Tha part that i find interesting is the painted area that are use to control the effects. i could imagine having a 3D texture containing random attribute and this 3D texture could be use to control the behavior of expension.

In that regard richard reference is certainly interesting . so for exemple a noise 3D volume RGB and R accelerate expension G decelerate B stop the expension ... 


Matt i would be extremely curious to know how you do those fancy GIF. Because at the moment my method is Print screen / * nb image , import in Photoshop , export GIF and it takes me 5 minutes / GIF! :)

I am quite sure you are using some magic little app that do this automatically , am i right ?





Edited by sebkaine
Link to comment
Share on other sites

Yep, I use licecap for all my giffy needs, its awesome. Just frame a bit of the screen, hit record, instant gif.


Re other stuff, yeah I'm sure there's some cunning things you could do by combining a few things. After Tomas pointed out a few weeks ago how most solvers actually include a multisolver under the hood, I've been having great fun mixing things in all kinds of silly ways. Pops feeding rbd, grain controlling wire solvers, sop solvers breaking pops, so many things to discover!

  • Like 1
Link to comment
Share on other sites

I had a go at a bullet version. This is super rough, but here it is!

I'm creating one new sphere every 5 frames, right next to another sphere. I'm also constraining them together with a spring on the same frame. It seems quite stable. Not sure how it will scale. There needs to be more intelligence around which point duplicates. Its random right now, so you can get lots of spheres amassing in the center doing nothing interesting.

This was all way trickier than I expected, and there's a bunch of fun dials to play with. I need to clean up the file a bit to make it more accessible.

gif runs double speed.



  • Like 6
Link to comment
Share on other sites

  • 4 months later...


I'm coming in a little late to the conversation *and* I'm a total Houdini newbie, but I blogged about this very topic quite recently: Simulating Mitosis in Houdini.

My solution uses VEX on a point cloud: I have a small piece of code that solves the separation between points. Each point has an age attribute that increases by a small amount with each frame. When the age exceeds a limit, it's reset to zero and a new point is added to the cloud. Copying metaballs to the point cloud gives it renderable geometry. 

The end result is, IMHO, quite effective.

Hope this helps,


Mitosis v3.m4v

  • Like 3
Link to comment
Share on other sites

  • 2 years later...

three years later....

i am doing a similar research for 2d cell expansion and i've found this guy on instagram, true inspiration, says there are no dops involved.

just vex and sop solver and thats all you get, :P enough to get me started.

i m actually glad there are no tutorials out there, gives you a chance to figure it out by yourself


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.

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...