How to Create a Growth Map of a Forest Using Mesh Surfaces

I have a mesh in Rhino created by importing a .obj which represents the 3D model of a forest generated with a drone. It has 887,510 triangular polygons. The z-axis represents the elevation. I want to take this 3D model and subtract its Z, over the entire x-y surface, from that of a 3D model of the forest at a later time. The idea is to create a new 3D model that shows the growth in elevation of the forest. By subtracting the 2 models, the common-mode elevation changes due to terrain is eliminated and only the differential-mode elevation change due to forest growth is illustrated. Ideally this new 3D model would be color coded by z (elevation) in order to enable rapid identification of high and low growth regions.

Any suggestions? So far I have managed to clean up the 3D mesh by draping a surface over it to eliminate surfaces hidden below higher surfaces. So now I have a single surface for the model and I can generate this for the two mesh models of the forest. But I am not sure what to do for the next step. Should I just use the grid created by the Drape command and go grid-by-grid to subtract the z of the two surfaces in each grid cell? This would give me a point cloud with the Z at each point showing the growth that is of interest. I found a command, MeshFromPoints, that can create a mesh over the points and then I could use Drape again to get a surface showing the growth result.

Is this the best way to do this?

A portion of the mesh looks like this:

The flat-looking area is ground while the surrounding taller shapes are trees.

Any help will be greatly appreciated. This is an opportunity for you to help support forest management.


Hi @Terry_Chappell - I’ve moved this to the general Rhino category because it doesn’t would like you have a development question. Feel free to move it back if you feel otherwise.

– Dale

Wouldn’t it just be easier to create a grid of points - whatever density/interval you want - then project them on the two meshes and get the difference (I assume you’re doing this in a script)? Once you have a regular grid of Z difference values, you could make points from them and directly create a new mesh that represents the growth.



This sounds interesting. I was trying to do it the other way around to get the z of the surface at each grid point. This would be lots of function calls.

Your way sounds better as Rhino does most of the work, projecting all the points onto the surface with the one function call ProjectPointToSurface. This may be faster as filling the grid array with points before projecting them will take much less time than finding the z of the surface at each grid location.

Thanks for the help.