Solaris instance with a lot of points.
1206 10 1-
- AlekseiM
- 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?
-
- antc
- 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?
-
- AlekseiM
- 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
-
- AlekseiM
- 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
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
-
- Siavash Tehrani
- 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.
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.
-
- martinkindl83
- 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
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
-
- AlekseiM
- 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
-
- AlekseiM
- 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 (
-
- antc
- 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.
-
- antc
- 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.
-
- Siavash Tehrani
- 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