Rendering Obj in Path Tracer

Hi folks,

So I have been working on the Path Tracer example that came with Optix 4.0. I added mesh loader functionality from the OptixMeshViewer example onto the Path Tracer example and it works absolutely fine except that even for .obj files of size less than 200 KB(for eg. cow.obj that comes with the pack) the FPS I get is less than 1!!! (0.19 fps to be precise :( ). While it makes sense to me that it has to process a lot of triangle intersections, I’m wondering what possible enhancements or hacks can I do to get a decent fps(atleast 10-12) from where I am right now!

Thanks in advance! :)

Would you mind to add some more details about your system configuration?
OS version, installed GPU(s), display driver version, OptiX version (all three numbers, 4.0.0 or 4.0.1 is important, 4.0.1 is faster), CUDA toolkit version used to compile to PTX.

For comparisons:
What is the performance of the precompiled optixPathTracer sample on your system running at default size (512x512)?
For example on my Quadro K6000 it’s accumulating at about 33.7 fps.

The cow.obj is small. Rendering that in my own GI path tracer lit by an HDR environment accumulates at over 190 fps in a 512x512 window using a Lambert or a layered plastic material on that same Quadro K6000.

Means 0.19 fps would be 1000 times slower than expected.

Without knowing your code, possible issues why this could happen:

  • Using NoAccel as acceleration structure. That would need to check all triangles in a geometry instead of a hierarchical traversal you get when using Trbvh.
  • Rebuilding the acceleration structure every frame, but even that should be faster then 0.19 fps when using Trbvh.
  • Or something inside the integrator got screwed and does too many iterations.

Thanks for the response.

OS Version: Windows 10
GPU: GTX 960M (4GB) Driver Version: 353.90
CUDA Cores: 640
Optix Version: 4.0.0
Cuda Version: 7.5

I am using TrBvh acceleration…

I can try 4.0.1 and see where it takes me. But with the frequent releases from Optix(which is great, but) differences in the entire design of Path Tracer(for eg between 3.9 and 4.0) and also with Sutil its not very intuitive to move the changes from the already working version that we have customized. I hope that isn’t the same between 4.0.0 and 4.0.1! :)

Thanks again :)

You should also definitely upgrade your display drivers. Yours are over a year old and do not have the latest Maxwell GPU performance improvements.
The OptiX 4.0.1 Release Notes actually say: “Windows 10: driver version 369.09 or later is required.
I would recommend the 373.06 you’ll find here: http://www.nvidia.com/Download/Find.aspx?lang=en-us

Do that in individual steps to be able to measure if changing the display diver or the OptiX version has an effect on the performance!

My recommendation is to learn from the OptiX example code but implement your applications as you need it. There is no strict requirement to use any of the utility code in optixu or sutil. For example, I’m only linking against optix.1.lib in my own OptiX applications.

Alright! I’m updating the drivers right away! And yeah I’m trying to decouple the utility code from my application as much as possible.

Thanks for the Suggestions Sir!! @Detlef Roettger

I updated the device driver and its much much MUCH better… I’m getting 30+ FPS even if the cow is filling half the screen!!! With zoomed out fov(cow fills small portion in the window) it hits upto 55 and above!!!

Thanks @Detlef Roettger!!!