The optix runner currently does not support stages, so when SimulationData is set up with stages all elements are put in the same scene.
This can cause inefficient sun sampling for some scenarios, where many more rays are generated than what actually hit elements, increasing simulation time. For instance, if a scene has a single heliostat far from a single receiver, many rays will be generated in between them which won't hit either element.
Possible solution:
Use OptiX's visibility masks to control when a ray can hit an element, similar to the embree implementation.
For embree, each stage is assigned a different mask value that is given to all its internal elements. Initially, rays are all assigned the mask value of the first stage, allowing rays to hit only elements in that stage. Then after the first stage is processed, the rays are assigned the mask value for the next stage, and so on. This ensures that rays only hit elements in the correct stage order.
The optix runner currently does not support stages, so when SimulationData is set up with stages all elements are put in the same scene.
This can cause inefficient sun sampling for some scenarios, where many more rays are generated than what actually hit elements, increasing simulation time. For instance, if a scene has a single heliostat far from a single receiver, many rays will be generated in between them which won't hit either element.
Possible solution:
Use OptiX's visibility masks to control when a ray can hit an element, similar to the embree implementation.
For embree, each stage is assigned a different mask value that is given to all its internal elements. Initially, rays are all assigned the mask value of the first stage, allowing rays to hit only elements in that stage. Then after the first stage is processed, the rays are assigned the mask value for the next stage, and so on. This ensures that rays only hit elements in the correct stage order.