9
$\begingroup$

I am looking for a way to take all the faces of an object and make each face it's own object. Basic object to desired solution, each face it's own object.

In the image above, you'll see a basic representation of what I'm trying to accomplish. On the left is a shape with faces, all attached. On the right is the result I want, an object for each face. The project I'm working on is much more complicated than this example, so I can't select each face and separate by selection. I have over 3,000 faces to work on.

$\endgroup$
  • 3
    $\begingroup$ A thumbs up for writing good image alt text. $\endgroup$ – David Feb 3 '15 at 17:50
  • $\begingroup$ @David Thanks! Haha. I know it's important for screen readers. $\endgroup$ – Jeff Lange Feb 3 '15 at 17:52
16
$\begingroup$

In edit mode with all the faces selected, press space type split and select Edge Split. Then press P > By Loose Parts. Every face is now a separate object.

Warning separating 3000 faces into different objects will take a while, if not crash blender.
After splitting the faces, you may have to brake up your mesh in to smaller pieces, then run the By Loose Parts command. You can select (say half of the faces) and separate them into different objects with P > Selection.

If you need the new objects' origins relocated, you can select all the objects and press ShiftCtrlAltShiftC > Origin to Geometry. Or if that keyboard short cut is too long, in the 3D view header Object > Transform > Origin to Geometry.

$\endgroup$
  • $\begingroup$ Exactly the solution I was looking for. Thanks, @David! $\endgroup$ – Jeff Lange Feb 3 '15 at 17:52
  • $\begingroup$ @JeffLange edited my answer to include setting the objects' origin. $\endgroup$ – David Feb 3 '15 at 21:34
6
$\begingroup$

also you can copy, paste and run this code, making all with 1 clic :D :

import bpy
bpy.ops.object.mode_set(mode = 'EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.edge_split()
bpy.ops.mesh.separate(type='LOOSE')
bpy.ops.object.mode_set(mode = 'OBJECT')

script


UPDATE

in order to set the "origin_geometry" in each new face run this:

import bpy
bpy.ops.object.mode_set(mode = 'EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.edge_split()
bpy.ops.mesh.separate(type='LOOSE')
bpy.ops.object.mode_set(mode = 'OBJECT')
bpy.ops.object.origin_set(type='ORIGIN_GEOMETRY')

script2

$\endgroup$
  • $\begingroup$ could you modify it to also set the origin point to geometry? I didn't mention that in the text, but it's also a step in my workflow. $\endgroup$ – Jeff Lange Feb 3 '15 at 21:08
  • 1
    $\begingroup$ @JeffLange ready.. only was 1 line $\endgroup$ – yhoyo Feb 3 '15 at 21:31
0
$\begingroup$

Another option - use and apply the Edge split modifier (play with angle setting to tell it above what angle it would split edges)

$\endgroup$
  • 1
    $\begingroup$ This wouldn't split the objects up, though. Thanks anyways. $\endgroup$ – Jeff Lange Dec 18 '16 at 21:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.