Solaris instance with a lot of points.

   Views 1206   Replies 10   Subscribers 1
User Avatar
Member
9 posts
Joined: Feb. 2020
Offline
Hi guys. I wanted to make a MPM simulation, something like sand, When I send it to Solaris I found the following if we use a simple SOP import then everything is fine and the display in the viewport has good responsiveness. But simple points on the render are perfectly round and it's boring. I would like to add some point options like spheres warped by noise. But as soon as I use an instance with at least one prototype everything starts to slow down like crazy and it's impossible to work with it. I tried to merge a prototype containing proxy geometry in the form of one point and but it didn't help the instance displays the points identically as the SOP import but it's very slow and it's impossible to work. Are there any ways to work with instances that are assigned to 20 million points in Solaris? In the sop context, for example with redshift, you can add an attribute that links to the prototype file on the hard drive. Maybe there is a similar method in Solaris?
User Avatar
Member
349 posts
Joined: Nov. 2013
Offline
Using a default instancer lop (containing only points, i.e targetpoints=internalsop) and a simple prototype (180 triangles) plugged into the second input I'm able to generate and start rendering 20 million instances in about 20 seconds using Karma XPU. Is that roughly what you're getting, or something slower?
User Avatar
Member
9 posts
Joined: Feb. 2020
Offline


https://lexxkb.wistia.com/medias/8i6xzbdp78 [lexxkb.wistia.com]

Here is my screen recording. You can see the problem there. I use 11 million points, all attributes are removed from them, only a few necessary ones remain. The prototype geometry is also simple, 300 points. When I rotate only the points loaded as a reference (although this is not important, everything is also ok via SOP import), everything works quickly without any slowdowns. But as soon as I collect them in an instance, everything immediately stops working. The fps counter shows 30 frames, but there are not even 1-2 in reality. It does not matter how I connect the points inside or through the first input, the result is similar. It is 100% impossible to work like this
Edited by AlekseiM - Jan. 22, 2025 14:45:18

Attachments:
Untitled video - Made with Clipchamp.gif (7.8 MB)

User Avatar
Member
9 posts
Joined: Feb. 2020
Offline
I also tried to simply create regular points not from the simulation but simply from a box without any attributes and replace the prototype with a regular box but the result is the same. And this is clearly a volcano problem because if you turn on the render then moving the camera is much easier and there the frame counter already shows the real speed.

https://lexxkb.wistia.com/medias/c4t3b0hm06 [lexxkb.wistia.com]


P.S. If you play with a simple scene, then at 100K points the performance will be excellent, but at one million it will drop to 4 fps, and if you turn on the render, the fps will again become 70-80
Edited by AlekseiM - Jan. 22, 2025 15:07:56
User Avatar
Member
733 posts
Joined: July 2005
Offline
Sounds like a viewport performance issue. The Instancer LOP is displaying your prototype geometry as-is and doing distance based culling when the Scene Polygon Limit is exceeded.

A few things you could try:
1) Have a proxy purpose on your prototype assets, preferably one that's less than 10% of the render purpose poly count.
2) Set the draw mode on your prototype to Box or Axis with a Configure Primitive LOP before plugging it into the instancer.
3) Create a point in a SOP Create, configure its purpose to proxy, and define that as your asset's proxy geo before plugging it into the instancer. This can also be done as an override on assets that already have a proxy purpose. That should give you the same viewport performance as displaying the instancer points.
4) Configure the draw mode on your entire instancer to a single bounding box if you don't particularly need to see it outside of rendering.
User Avatar
Member
275 posts
Joined: Nov. 2014
Offline
i would say its viewport trying to hide them

my workflow for that is simply dont display instancer in viewport

but then comes the issues of rendering as viewport only renders whats visible in viewport, making it unusable for any heavy scene

rendering to Mplay will work fine while things are hidden from viewport
User Avatar
Member
9 posts
Joined: Feb. 2020
Offline
Siavash Tehrani
Sounds like a viewport performance issue. The Instancer LOP is displaying your prototype geometry as-is and doing distance based culling when the Scene Polygon Limit is exceeded.

A few things you could try:
1) Have a proxy purpose on your prototype assets, preferably one that's less than 10% of the render purpose poly count.
2) Set the draw mode on your prototype to Box or Axis with a Configure Primitive LOP before plugging it into the instancer.
3) Create a point in a SOP Create, configure its purpose to proxy, and define that as your asset's proxy geo before plugging it into the instancer. This can also be done as an override on assets that already have a proxy purpose. That should give you the same viewport performance as displaying the instancer points.
4) Configure the draw mode on your entire instancer to a single bounding box if you don't particularly need to see it outside of rendering.

as I wrote in the first message, I have already tried to make a proxy in the form of a simple cube and even in the form of a single point, it is quite funny when simply imported points work perfectly 120+ fps, and assigning one point to these points as an instance completely breaks the display and drops performance by 1 fps, while visually they are identical
User Avatar
Member
9 posts
Joined: Feb. 2020
Offline
My personal problem is that I animate cameras inside the LOP and I have to switch between rough points and the instancer. And switch it when I need to adjust the view on the render. And this is not very convenient when you have several components, especially moving the light if the screen is divided and on the second, for example, the top view is enabled and on the first, the karma render and I want to move the light, then I need to switch to the points, move the light and then switch to the instance, all this has a delay for reassembling the scene and is annoying (
User Avatar
Member
349 posts
Joined: Nov. 2013
Offline
martinkindl83
my workflow for that is simply dont display instancer in viewport

but then comes the issues of rendering as viewport only renders whats visible in viewport, making it unusable for any heavy scene

It sort of depends on what you mean by display. Solaris has "purpose" attribute, which can be set to "proxy" or "render" which might be what you're looking for. By default a prim tagged with "proxy" will only render to preview (OpenGL/VK) viewports while "render" will only render in final renderers like Karma etc. Which purposes get rendered by any particular renderer though can ultimately be customized. There's also "Draw Mode" which can draw models as bounding boxes or cards in preview viewports So by tagging things with purpose or draw mode it shouldn't be necessary to be manually turning things on/off with visibility or payload loading too much.
User Avatar
Member
349 posts
Joined: Nov. 2013
Offline
AlekseiM
And switch it when I need to adjust the view on the render

Try purpose attribute ("proxy" vs "render") and/or draw mode. Both of those are designed to give different rendering in display viewports like OpenGL/VK versus a final renderer like Karma, so that manual switching isn't needed. Purpose and draw mode can both be authored using a configureprimitive lop.
User Avatar
Member
733 posts
Joined: July 2005
Offline
AlekseiM
as I wrote in the first message, I have already tried to make a proxy in the form of a simple cube and even in the form of a single point, it is quite funny when simply imported points work perfectly 120+ fps, and assigning one point to these points as an instance completely breaks the display and drops performance by 1 fps, while visually they are identical

You are right Aleksei, once the point count goes into the tens of millions, the instanced points display slower vs loading the raw points. I wonder if that's expected behavior due to some kind of overhead? Maybe SideFX can chime in.
  • Quick Links