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)
-
$\begingroup$ are you ok if your mesh just gets splitted into parts and if the positions are not exact? And how about overlapping parts? I think I have a solution, but it really depends on your precision needs $\endgroup$– HenrikDMar 5, 2019 at 12:52
-
$\begingroup$ It does actually not have to be very precise. I dont think there is overlapping parts in my human mesh. $\endgroup$– xavaMar 5, 2019 at 13:03
-
$\begingroup$ What I meant with overlapping was. How big of a Problem is it if two if the resulting parts overlap? $\endgroup$– HenrikDMar 5, 2019 at 13:06
-
$\begingroup$ This is not really an issue $\endgroup$– xavaMar 5, 2019 at 13:21
-
$\begingroup$ If my answer is what you needed please mark it as correct answer, otherwise comment and I will elaborate $\endgroup$– HenrikDMar 5, 2019 at 14:42
1 Answer
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[0].vertex_groups) - 1):
bpy.ops.object.vertex_group_set_active(group=bpy.context.selected_objects[0].vertex_groups[i].name)
bpy.ops.object.vertex_group_select()
bpy.ops.mesh.separate(type='SELECTED')
bpy.ops.mesh.select_all(action="DESELECT")
To use the script go into Edit Mode of your Model
This should leave you with something like this:
I hope this helps you with your problem.
-
-
$\begingroup$ I wanted to use your script, but I get this error :
Traceback (most recent call last): File "/Text", line 6, in <module> File "/usr/share/blender/scripts/modules/bpy/ops.py", line 189, in __call__ ret = op_call(self.idname_py(), None, kw) RuntimeError: Error: Nothing selected
$\endgroup$– xavaMar 6, 2019 at 14:32 -
$\begingroup$ @xava I added a little information about the script I forgot to mention... You have to be in Edit Mode of your Model for it to work $\endgroup$– HenrikDMar 6, 2019 at 16:38