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$
3
  • $\begingroup$ Can you provide that mesh to test on something? $\endgroup$ Jun 11, 2015 at 18:46
  • $\begingroup$ @RayMairlot Sure, I will upload the file in a min $\endgroup$
    – Denis
    Jun 11, 2015 at 18:47
  • $\begingroup$ @RayMairlot I attached the blend file $\endgroup$
    – Denis
    Jun 11, 2015 at 18:54

3 Answers 3

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$
1
  • $\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, 2015 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$
3
  • $\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, 2015 at 2:12
  • $\begingroup$ Ah, I see. Didn't realize you already had pre-existing texture maps. $\endgroup$ Jun 12, 2015 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$ Jun 12, 2015 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$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .