m_interopResources error :: How to load a very large number of simple geometry objects ??


In a project that I am working on right now I need to define how much light reaches a number of sampling points through a (very large ) number of CSG(contractive solid geometry) boxes, that play the role of cubic holes on a wall of a building. I am using a Bidirectional Path tracer of my own.

Explaining the above : I have a model of a builnding. I have several (let’s say 200) sampling points in the building. I have some walls that are candidate for placing a window and i have devided these walls into a number of cubes.


As the number of boxes/CSGs increases the rendering of the image is increasing slowing down and from a point and upwards i get a message that Assertion Failed : m_interopResourses.size()== m_interopResoursesVector.size(); the number is about 2500-3000 boxes in the scene.
Even with a smaller number of boxes (eg 1500)the performance hit is severe.

I am grouping all these boxes under one GeometryGroup. Is there a better way to do this or should i try a different approach?

I am using Optix 3.6.3 /win8.1 and win 7/tested on both GTX970 and TITAN BLACK

i am thinking about a multi-launch approach , is it a good idea ?


I am having a similar problem? what is the solution for this?


  • CSG normally stands for Constructive Solid Geometry. Is “contractive” a typo?

  • Is there a specific reason why you’re using OptiX 3.6.3?
    EDIT: Well, because the thread was from two years ago. ;-) Nevermind.

  • Have you tried newer OptiX 3.9.2 or 4.1.1 versions to see if the assertion goes away?

If I understand your description correctly you have some scene containing geometry of a building as number of walls and you cut rectangular holes into these walls using boxes which get subtracted from the walls with a constructive solid geometry method.
You have thousands of these subtracing boxes and performance is negatively affected with increasing number of these boxes.

  • What’s the primitive type of these walls?

“Even with a smaller number of boxes (eg 1500)the performance hit is severe.”

  • What is the performance in absolute numbers (ms per frame) with that increasing number of CSG boxes?

“I am grouping all these boxes under one GeometryGroup. Is there a better way to do this or should i try a different approach?”

  • What is your overall scene structure?
    That is, what is the OptiX node structure beneath that GeometryGroup?
    I’m trying to find out how many GeometryInstances and Geometry nodes there are, how deep the scene hierarchy is, and how many primitives are in each Geometry and in the whole scene.
    All that affects performance.
    E.g. if you store each box in an individual Geometry node, that would be the worst case.
  • How do you track which box is subtracted from which wall?
  • Where in the OptiX device programs are you doing the CSG algorithm?
  • How does the performance change when not doing CSG, but generating the actual resulting geometry as triangles?
    If your CSG algorithm isn’t fast, a flattened scene of primitives should give you maximum performance during traversal, when the rest of the device programs is optimal.

As you see there is a lot of detailed information missing to say why something you programmed is not as fast as you’d like.

Please try to follow all performance guidelines inside the OptiX Programming Guide chapter 12.

The maximum performance for ray tracing many primitives of the same kind is normally achieved with a single Geometry node holding all these primitives. That’s the third advice in that chapter 12.
The deeper the node graph hierarchy inside the OptiX scene graph, the slower the traversal.

As usual, the minimum system configuration information should be reported as well:
OS version, installed GPU(s) and amount of VRAM, display driver version, OptiX version (major.minor.micro), CUDA toolkit used to generate the PTX device code for you OptiX application.
Additionally if there are any performance issues, absolute performance numbers and a way to reproduce them would be required for more accurate answers and followup investigation.

If you have a specific problem please don’t hijack a years old thread. Just start a new one with the proper information.