Is there a way to cut a mesh along the bones? I have attached a picture to clarify what I mean. The first picture shows a hand that I would like to cut based on the bones, like in the second picture, where I did it with Bisect(but it would take a long time cutting a whole human in pieces with Bisect)
Your Problem is labour if I understand you correctly. So you are searching for a workflow that will make your job less labour intensive. I just tried a few things and found something that works at least for me. It comes with restrictions but at least it works.
First you need to prepare your Mesh. For that I recommend duplicating it with Shift+D and moving it to a different layer (with M)
To prepare you need to follow these steps:
- Go into Weight Paint Mode of your Mesh (Ctrl+TAB)
- press Space and search for "Quantize Vertex Weights", then press F6 and make sure the Subset Combobox spells "All Groups"
- press Space and search for "Clean Vertex Group", then press F6 and make sure the Subset Combobox spells "All Groups" again and set the Limit to 0.1 just to be sure
- test your bones and look out for vertices that are not anymore in any group. Add them to one that makes sense (you can use weight paint for that but then you have to repeat this whole preparation step from the start. You should instead add them in Edit Mode)
You can find the described functions also in the Weight Tools section of the Tools Panel to the left.
If you are finished you are prepared for the splitting part.
Go into Edit Mode and make sure everything is selected (A). Subdivide your Mesh (W -> Subdivide) with one division (default). Then repeat the following process over and over again, until you are finished.
- deselect everything (A)
- select (the next) Vertex Group in the list and press the select button (found in the Properties Menu in the Object Data tab (little Triangle))
- press P to separate the selection
You can use this script to do it for you in one click (just copy it into a Text Editor in Blender and press "Run Script"
import bpy bpy.ops.mesh.select_all(action="DESELECT") for i in range(0, len(bpy.context.selected_objects.vertex_groups) - 1): bpy.ops.object.vertex_group_set_active(group=bpy.context.selected_objects.vertex_groups[i].name) bpy.ops.object.vertex_group_select() bpy.ops.mesh.separate(type='SELECTED') bpy.ops.mesh.select_all(action="DESELECT")