Render Support for Clipping Planes

Hi Everyone,

It is my understanding that Clipping Planes do not render with outside render plugin’s, even those that are RDK compliant. Would it be possible to add this feature in Rhino 6, so that Clipping Planes will allow outside render plugins that are RDK compliant to render clipping planes? Personally, I’m using Octane Render, which is RDK compliant and is very tightly integrated into Rhino. Being able to render and animate (with Bongo) clipping planes would be terrific.

Thank you,
Ryan

It would be amazing to have this function, but, actually, the clipping plane has nothing to do with RDK.
The CP it’s a graphic card trick, so it’s not visible from the rendering engine.
I use V-Ray and have the same problem.

You can try VisualArq, it’s sectioning system it’s bit different and work also for rendering, V-Ray at least.

Hi Skysurfer,

Thanks for your quick reply. And that makes sense. Would any Rhino developers that might be reading this be willing to put this feature on the Rhino 6 list? So that clipping planes would be visible to render plugins.

Skysurfer – I’m not familiar with VisualArq, so I just checked it out. It’s good to know that it’s version of clipping planes will render. I think that’s the only feature I’d be using from Visual Arq, so I’d hate to pay 495 just for that, but . . . it’s good to know that it works for rendering.

Have, you, or anyone else reading this, used the Sectioning Tools for Rhino plugin? If so, do the clipping planes in that plugin work with render plugins? Section Tools Link

Clipping planes are available to all plug-ins even in V5. The renderer would need to be adjusted to support them.

Its got nothing to do with RDK compliance I’m afraid. The SDK for clipping planes is completely public. The problem is actually that clipping planes are not a standard feature of most renderers.

Thanks Everyone, good info, and good to know. On the Octane forum we thought this was something that Rhino had to provide, but it looks like it already is. I’ll push this back to the Octane for Rhino developer and get his feedback and see if it’s a possibility or not in Octane. Thanks again.

FWIW, Maxwell supports the Rhino ClippingPlane.

Thanks Steve - how is this done pls? How do you filter out the RhinoCommon Mesh.Vertices which are currently not visible due to a clipping plane?

Paul

We are planning on adding Clipping Plane support to V-Ray For Rhino 3.0.

3 Likes

I think it depends on how the render engine is structured. If the render engine knows how to deal with clipping planes, then it is probably best to just inform the engine about the existence of them. This way you can get effects like the side of a building being sliced away, but the lighting from the sliced out windows still gets applied to the walls. If the render engine does not know about clipping planes, then you can always slice the meshes in RhinoCommon using the Mesh.Split function.

@andy may have more to say on this. I’m not sure if the RDK has additional ‘helper’ functions for this scenario.

Thanks Steve. Octane is an unbiased, physically accurate renderer, so if a wall has been “clipped” out of the scene, all the light calculations will be with the wall gone - so IMO the better solution is to omit the wall geometry when loading the polygons into the scene. So something like a RhinoCommon Face.IsVisibleInClippingPlanes() function would be perfect. Or even a Mesh.UnclippedFaces () function which just returns the Faces which are visible.

I can also understand your argument that this is a renderer function rather than something RhinoCommon needs to provide. It could be argued either way…

Paul

I agree that there are probably things we can do to make programming this easier for you guys; I was just pointing out that the information is there if you want at it :smile:

I also don’t know how Octane’s data structures are set up, so I don’t know what the most efficient technique would be. For starters, I would just go with the brute force technique of seeing if a clipping plane slices through a mesh bounding box and if it does, then just call the Split function passing in the plane.

Wow, if you guys can work this out in Octane, I will be very happy. Thanks for all you have done Paul, Octane in Rhino has been a blessing for me.

I second that jodyc111! Octane for Rhino is AMAZING and Paul rocks!

Thanks Steve. Your approach of using the bounding box & split function sounds viable - so I will investigate that option. Thanks for the suggestion.

Paul

Again, FWIW, Maxwell is also physically accurate but a wall that is clipped out still affects the scene.

Not that I necessarily think that is a good idea. This will work well for architecture but if you are clipping to see inside a completely closed-off object like a motor or so, you won’t be able to see anything inside.

Thanks Steve. I have had a closer look at this, but not been able to work the code out. If there are multiple clipping planes on an object, I end up with lots of small meshes (since each mesh.split results in a mesh array being returned). Are you able to post some sample code as to how this should be done pls?

Thanks

Paul

Are you throwing away the meshes that are on the opposite side of the clipping plane?

No - I take it there is an easy way to determine which mesh is on which side of the plane? I have…

        RhinoViewport viewport = Rhino.RhinoDoc.ActiveDoc.Views.ActiveView.ActiveViewport;
        ClippingPlaneObject[] clippingPlanes = Rhino.RhinoDoc.ActiveDoc.Objects.FindClippingPlanesForViewport(view);

        foreach (ClippingPlaneObject clippingPlane in clippingPlanes)
        {
            Mesh[] splitMeshes = mesh.Split(clippingPlane.ClippingPlaneGeometry.Plane);
        }

Use Plane.ValueAt on some of the mesh vertices. If the Value is negative, then that is a mesh you want to throw away.