How to calculate volume of a 3d object?
Example: Suzanne (monkey) or Blender Guru’s Donut
I mean complex geometry, not like box or cylinder
Hi Raditya,
Have you tried the built in 3D Print Toolbox addon? Is has Volume and Area tools.
See https://docs.blender.org/manual/en/latest/addons/mesh/3d_print_toolbox.html
Cheers and happy blending!
The problem is that you can’t add driver to the volume calculations result.
Or can you give me the math calculations?
I can give you an approximate, stupidly innefficient workaround using Blender version 3.1 geonodes:
- create a 3-D array of small cubes
- add an intersection boolean modifier with the object whose volume you want to measure
- add a weld modifier set to “connected”
This will result in a cloud of vertices whose number is roughly proportional to the volume of the mesh
- add this geonode setup:
This will result in a mesh, consisting of a single vertical line whose height is equal to the number of vertices in the above mentioned point cloud.
You can access this height in a driver in the following way:
Here, I have added a driver to the z-rotation of the empty “Empty”, where I access the dimensions of “cube”, which is the object with the geonodes, dimensions[0] is the x-size, dimensions[1] the y size and dimensions[2] the z-size.
procedural volume measurement…blend (122.9 KB)
I actually have an idea to do this, but blender geometry nodes dont support arrays. I want to do that every point.
I am not even sure how I’d triangulate the volume for an arbitrary geometry even using a general programming language.
Granted, if you can separate your volume algorithmically into simplexes, you can then use the triple product to compute the individual volumes https://en.wikipedia.org/wiki/Triple_product
Computing those simplexes is the problem, though.
As I said, calculating the volume is a difficult task… You can try the workaround I proposed here:
I’ve download an icosahedron vdb file. I want to calculate the volume. But why the density grid (is_icosahedron) is not on the spreadsheet? I want to calculate it with density*voxel size to get an approximation of that volume. And show me how to add volume grids.
Maybe consider using sverchok: apparently, it has functionalities for computing volumes: