Closed tbiedert closed 8 years ago
Hi,
Without more details on the type of implicit surface you are trying to render, I can suggest two possible approaches:
1) As you've seen, there are implicit isosurfaces in ospray. If you are looking to generate implicit surfaces from volumetric data, you could implement your own isosurface geometry type, where you could fully implement your own method of finding the surface when given a ray. Depending on what you are wanting to do, this would involve creating just a custom variant of ospray/geometry/Isosurfaces.cpp/h/ispc, and/or you may want to use your own method of rendering the data with your own custom renderer.
2) If your implicit geometry contains existing bound information before evaluation of the surface, you could implement it as an Embree "user defined geometry", where you'd create your own custom ospray Geometry and define the bounding box function and intersect/occluded functions for Embree to intersect with. We use this method to implement Spheres, Cylinders, and Streamlines, where you could use any of those Geometry types as a template for how to get the geometry setup correctly in ospray.
I hope that helps!
Cheers, Jeff
Aaron Knoll wrote an RBF renderer in an early implementation of OSPRay called bnsView. Here is a link to that paper: http://www.cs.utah.edu/~knolla/bnsview-sph.pdf. There is unfortunately no notion of a plug in function for computing derived data values during sampling, you will need to implement one of the methods Jeff mentions, however this shouldn't be too hard to compute using the user defined geometry.
Hi, is there a preferred way to render implicit surfaces?
The current simple approach would be to sample the surface function in a regular grid, creating a block_bricked_volume and an isosurface from that.
I was wondering, if there's a better method integrated into OSPRay like adaptive on-demand surface function evaluation during ray casting without the intermediate regular grid step.
Thank you very much!