Jump to content
nicoladanese

vellum: simulate with proxies

Recommended Posts

Hi!

I'm simulating a few hundreds soft bodies (all identical) with vellum, and what I'm looking for is a way of simming with a low poly proxy of the objects and then transfer the sim baked into the hi res geos. I see there's a cloth capture / cloth deform process that seems to do exactly what I'm looking for, but in my case the soft bodies are emitted frame by frame, so the output is from a dop network. in the past I did something similar where I used point deform but in this case I'm not sure it's going to work as I don't have a rest position...here's an example just to clarify what I'm doing...

softbodies_proxy.hip

Share this post


Link to post
Share on other sites

You can generate rest geometry with a sop solver, by accumulating your emission points and copying your lowres spheres onto those points.

By the way, are those spheres placeholders or your real geo?

Share this post


Link to post
Share on other sites

those spheres are just an example, I'm doing this with cars ;) , I'll try what you told me, but can't do it straight into the solver because in my case objects will intersect at some point, I guess I can bake the sim ang get infos about the birth frame, and then with a loop iterate and point deform...

Share this post


Link to post
Share on other sites

I meant a sop solver, not in your dop network :)

Nevertheless, here's one way to do it (slow but stable), merging the points with a sop solver,
copying lowres and highres on those points and then using a foreach to go
through each single geo to point deform. Pretty sure, there's a more elegant and faster way to do it
but it works.

image.thumb.png.b1d7f464cf52820b64a82d0cb6f3b7f8.png

softbodies_proxy_yader02.hiplc

GIF_25_02.2020_12-11-01.gif

Share this post


Link to post
Share on other sites

oh man! I was doing the same but having two issue, isolating each instance for point deforming one at a time and feeding rest position was giving me weird result when the instance was not there yet...you solved both!

  • Like 1

Share this post


Link to post
Share on other sites

okay so now I'm having two issues, well, I would say inefficiencies because it works great but... :D

I have the sim sorted out and transferred to the high poly mesh, I think there's room to optimize time and disk space:

at the peak of the sim I have 500 cars, and the for each loop with point deform took 1 hour to loop through all the 500 cars and move them in the right spot for just one frame! and that produced an alembic file that is quite big. So I was reading that the for each isn't multithreaded so is not very efficient, one solution is to compile the block, but I'm getting an error, I was also thinking about using pdg for this kind of task, so I can query each car on a separate task and merge them later. Also another solution could be to split in group of cars, say 50 cars at a time and getting 10 alembics which is also more manageable later on in render...

any other idea? 

 

Edited by nicoladanese

Share this post


Link to post
Share on other sites

update: I think I can live with the file size, I just discovered I can do sequence of alembic and vray proxy should load them fine. still would be good to optimize the point deform time

Share this post


Link to post
Share on other sites
9 hours ago, nicoladanese said:

okay so now I'm having two issues, well, I would say inefficiencies because it works great but... :D

I have the sim sorted out and transferred to the high poly mesh, I think there's room to optimize time and disk space:

at the peak of the sim I have 500 cars, and the for each loop with point deform took 1 hour to loop through all the 500 cars and move them in the right spot for just one frame! and that produced an alembic file that is quite big. So I was reading that the for each isn't multithreaded so is not very efficient, one solution is to compile the block, but I'm getting an error, I was also thinking about using pdg for this kind of task, so I can query each car on a separate task and merge them later. Also another solution could be to split in group of cars, say 50 cars at a time and getting 10 alembics which is also more manageable later on in render...

any other idea? 

 

What exactly is the error, when you use compile block? 

Share this post


Link to post
Share on other sites

I was looking at this page

https://www.sidefx.com/docs/houdini/model/compile

so I tried to apply it to your setup just to test if it works, but I'm getting this error

/obj/sim/compile_begin1 : Violation of strict nesting of blocks. Incompatible Compile Block Begin /obj/sim/compile_begin1 encountered while processing Block End /obj/sim/foreach_end1. A Block Begin in Fetch Input mode may be needed.

 

Capture.PNG

Share this post


Link to post
Share on other sites

Here's an easier method, which avoids a costly for each loop:

If you have QLib installed, it has a really handy point deform
capture sop which let's you define an attribute to partition your incoming geo, (this should be part of the regular point deform sop)
so the capture weights and points are generated accordingly. Just use a regular
point deform afterwards and set it to deform only.

image.thumb.png.9b1271c6b63f064f1db94ef5e63f9e42.png

 

Edited by Yader
  • Like 1

Share this post


Link to post
Share on other sites
On 28/2/2020 at 6:52 PM, Milad Savar said:

hi Nicola ...;/ Is that's it you want ?? maybe useful don't know ..  [ loop is incomplete  ]

softbodies_proxy.hip

hey Milad, thanks!

Share this post


Link to post
Share on other sites
On 28/2/2020 at 9:47 PM, Yader said:

Here's an easier method, which avoids a costly for each loop:

If you have QLib installed, it has a really handy point deform
capture sop which let's you define an attribute to partition your incoming geo, (this should be part of the regular point deform sop)
so the capture weights and points are generated accordingly. Just use a regular
point deform afterwards and set it to deform only.

 

will try asap! thanks!!

Share this post


Link to post
Share on other sites

wow! there's a huge gain in performance, it took around 50 minutes (!!!) to deform 500 cars with the for each loop, now it takes 45 seconds!

  • Like 1

Share this post


Link to post
Share on other sites

45 sec !

Wow indeed !

  • Thanks 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×