5
$\begingroup$

I have some old models that I need to repair. When I use Tris to Quads it doesn't work properly preserving the edgeloops because of the curvature of the models. But the UV map of the model is perfectly squared. Is there a quick way to remove the unwanted edges using the UV map? I can do that manually but it takes way too much time.

enter image description here

$\endgroup$
  • $\begingroup$ Can you provide that mesh to test on something? $\endgroup$ – Ray Mairlot Jun 11 '15 at 18:46
  • $\begingroup$ @RayMairlot Sure, I will upload the file in a min $\endgroup$ – Denis Jun 11 '15 at 18:47
  • $\begingroup$ @RayMairlot I attached the blend file $\endgroup$ – Denis Jun 11 '15 at 18:54
2
$\begingroup$

The UV layout for this model makes selecting rows very easy with the Box Select tool. (I hid the ends because they have hidden faces that are causing problems.)

By selecting every second loop of the UV's and then using Tris To Quads, you can establish guide loops that allow you to use the tool again and achieve consistent results.

b for Box-Select. Also make sure to activate the icon for use_uv_select_sync as shown in the animation.

enter image description here

Now use Tris to Quads on the selected rows, then select everything and repeat Tris To Quads.

enter image description here

Now you can repair the few mistakes by using the Join tool j. In the following case, I used Join and then used Make Face f to make a quad at the center of the error point.

enter image description here

$\endgroup$
  • $\begingroup$ I tried that before but it doesn't work well on surfaces that have lots of angle changes between the faces, the best I could do is to rotate the UV 45 degrees, select the every second diagonal edgeloop and dissolve , then invert selection and dissolve again, then rotate UV back. $\endgroup$ – Denis Jun 12 '15 at 16:50
1
$\begingroup$

There doesn't seem to be an easy way to convert the existing mesh to pure quads without quite a bit of manual intervention.

Here's an alternative way to create a new mesh with quads and keep a reasonable and even UV mapping.

  1. Create a cylinder with no caps around the dress object
  2. Copy the height of the dress to the cylinder so it is exactly the same height
  3. Make sure the top and bottom of the cylinder match exactly the top and bottom of the dress Add subsurf mod and shrinkwrap mod (with dress as target) to cylinder Adjust subsurf as desired
  4. Apply shrinkwrap modifier Select vertical edge loop at back of dress, create seam UV unwrap cylinder object with cylinder projection type
  5. Adjust UV map to fit UV image Trim vertices at top and bottom of cylinder

This may seem like a lot of steps, but it goes quite quickly. Let me know if this helps at at all

enter image description here

enter image description here

$\endgroup$
  • $\begingroup$ That will not work in my case, I have many of these meshes, some of them have 4-5 different baked textures, and the UVs have to match exactly to prevent distortion $\endgroup$ – Denis Jun 12 '15 at 2:12
  • $\begingroup$ Ah, I see. Didn't realize you already had pre-existing texture maps. $\endgroup$ – Todd McIntosh Jun 12 '15 at 2:48
  • $\begingroup$ If you handle this part well, you can use the baking tool 'Selected To Active' to transfer the old textures to the new mesh. $\endgroup$ – MarcClintDion Jun 12 '15 at 9:58
0
$\begingroup$

This works for me:

import bpy
import bmesh

# go into edit mode
bpy.ops.object.mode_set(mode='EDIT')

# deselect everything
bpy.ops.mesh.select_all(action='DESELECT')

# Get the active mesh
obj = bpy.context.edit_object
me = obj.data

# force face select mode
bpy.context.tool_settings.mesh_select_mode = (False, True, False)

# Get a BMesh representation
bm = bmesh.from_edit_mesh(me)

count = 0
# find every second face and select the first edge
for face in bm.faces:
    if (count % 2) == 0:
        edge=face.edges[0]
        edge.select_set(True)
    count = count+1

# dissolve edges
bpy.ops.mesh.dissolve_edges(use_verts=False)

# deselect everything
bpy.ops.mesh.select_all(action='DESELECT')

# Show the updates in the viewport
bmesh.update_edit_mesh(me, True)
$\endgroup$

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.