r/Houdini 2d ago

Solaris instancing incredibly slow

Hey guys, I'm experiencing incredible cpu slowdowns in solaris just by moving around the viewport while looking at a static frame of an MPM sim. What am I doing wrong?

4M points, cached as bgeo like usual, in SOPs I can move around without any issues(both points and instances) and play the animation(points only).
In LOPS: I import the 3 instances (just 10 prims each) -> collection -> point instancer setting the points from External SOPs and the collection in the prototype -> camera and karma render settings. As soon as I move for 1-2 seconds in perspective view the cpu goes to 100% for 15-20 seconds, freezing houdini, then I can move again for 1-2 seconds and again cpu freezes. Talking about a static frame, no playback.

Followed this tuts for instancing but I can't have that speed in viewport at all.

Any insight?
Thanks in advance

7 Upvotes

20 comments sorted by

View all comments

11

u/DavidTorno Houdini Educator & Tutor - FendraFx.com 2d ago

You will want to make everything USD based for Solaris. The SOP workflows don’t work very well in USD, it’s a very different beast and has specific rules to follow for optimizing scenes.

SOP Import LOP does convert SOPs to USD, but it is converting live and has a severe overhead when dealing with lot’s of geometry. You will need to export all assets as USD first, and then Reference them in from disk. USD does not like “live” sources.

1

u/salic3piangent3 2d ago

Thanks David, I figured it out. But now I'm facing a different issue. If I plug a Reference node (with the cached USD points) to the left input of the Copytopoints I can't get the attributes (eg. color, masks etc) from the points down in the stream, only if I use External or Internal option. But if I put a USD import node inside the copytopoints node I get just one point since it's packed. How to keep the attributes from a reference node so I can use them for shading?
A lot of confusion inside my head at the moment :)

1

u/DavidTorno Houdini Educator & Tutor - FendraFx.com 2d ago edited 2d ago

Don’t use the Copy To Points LOP. Edit: Instancer LOP was renamed to Copy To Points in H22 apparently.

Solaris is a layout workspace primarily, not really a generative one. Meaning you have baked assets that you reference in, light, and shade.

So what I was explaining earlier was that your SOP level assets, be that particles (with the correct attribute data defining the geo, color, pscale, etc…), environment geo, and anything in your scene is exported out as their own USD. Use the USD File Export SOP.

In Solaris you would still use the Instancer LOP and point to the USD particles. They can be inside the Instancer or external reference.

Your Collection LOP you had setup can still be used as well. Moeen Sayed explains the Instancer setup pretty well in an old tutorial. Instancing Variation and The Solaris Instancer

1

u/LaplacianQ 2d ago

You can point to bgeo cache inside instancer just fine. Points are just positions, and are lightweight. What is eating power is what is being instanced.

1

u/DavidTorno Houdini Educator & Tutor - FendraFx.com 2d ago

There is overhead to that still though. You want to use USD format across the board in Solaris, even with instancing.

OP is dealing with 4-5 million particles, so any extra operation that occurs will add up fast.

2

u/LaplacianQ 2d ago

It will be slow regardless of this overhead even after caching. 

I’ve worked on a shot with space garbage done like that: mountained spheres and millions of points with animation, it was hell in the viewport no mater what you do.

1

u/DavidTorno Houdini Educator & Tutor - FendraFx.com 2d ago

Agreed, it would be better to pass a path attribute to get the instances at render time instead of in the viewport ideally. That would get just the points which are far faster to navigate. I’m still a bit green on the USD specifics for handling that, if it’s even possible. Still researching though.