Does Optix7 has any built-in support for the curved surface like NURBS or Bezier surface?

Hi! I am now working on a project about optics simulation and optimization. I plan to use bezier patches as a representation of optics. I have known that Optix7 has built-in support for curves. But I would like to ask whether there is any build-in support for the Bezier surface or any other curved surface in OptiX7? If not, should I just go straight to use custom primitives and write my own intersection program? Thanks in advance.

OptiX 7.1.0 only has built-in support for triangle and curve primitives.

Every other geometric primitive needs to be implemented as custom intersection program and the acceleration structure gets built over the generic AABB build-input you provide. Means you need to implement and run your own bounding box program to generate the AABBs around your custom geometric primitives.

See these two chapters in the OptiX 7.1.0 programming guide for the details.
https://raytracing-docs.nvidia.com/optix7/guide/index.html#acceleration_structures#acceleration-structures
https://raytracing-docs.nvidia.com/optix7/guide/index.html#curves#curves

It is very helpful. Thank you!

Hi droettger! Thanks for your reply, I would like to ask a bit more about it.

  1. Besides the examples with OptiX7 SDK, are there any other official examples of OptiX7? I found that there are not many examples of doing raytracing with implicit surface representation in OptiX7.

  2. Another interesting question is: is Optix7 suitable for building a ray-marching or a sphere-tracing system? It is a bit different from the traditional ray-tracing system since some samples along the ray are needed. I am still quite new to OptiX7 and I am not quite sure whether OptiX7 can handle it well.

Thanks in advance!
Linkous

The sticky posts on this sub-forum contain links to more OptiX 7 examples than inside the SDK alone.

I’m not aware of an example showing custom intersection programs on any kind of higher order surfaces.
The OptiX 7 SDKs contain an example showing how to implement a custom intersection program for a sphere primitive. The older SDKs also showed that for triangles.

Be aware of your coordinate spaces! https://forums.developer.nvidia.com/t/objects-appearing-in-the-wrong-order-after-scaling/83884/7

I’m not sure what you mean with sphere tracing system. If you mean tracing rays through a signed distance field for example, like you normally do for ray marching, that would not actually require a ray tracer which is optimized for ray-surface intersections if there aren’t any geometric primitives inside your volume data as well.
Means since there are no real intersection results with geometric primitives when only ray marching through some volume, that could also be done more efficiently with native CUDA kernels instead of actually shooting rays with OptiX.

Please find similar discussions here:
https://forums.developer.nvidia.com/t/keeping-track-of-multiple-materials-at-a-time/78066
https://forums.developer.nvidia.com/t/best-practice-voxels-use-triangles-or-custom-geometry-for-calculations-not-rendering/115230
https://forums.developer.nvidia.com/t/optix-6-0-process-each-object-one-by-one/119698
https://forums.developer.nvidia.com/t/using-optix-to-determine-travel-time-for-a-ray-travelling-through-a-material/112772