[Bf-blender-cvs] [f450d39ada1] master: Fix T84078: improve UV unwrapping for quads with an internal reflex angle
Chris Blackbourn
noreply at git.blender.org
Tue Dec 6 01:57:00 CET 2022
Commit: f450d39ada1f8629f2050288f413eceb2d173005
Author: Chris Blackbourn
Date: Tue Dec 6 13:48:23 2022 +1300
Branches: master
https://developer.blender.org/rBf450d39ada1f8629f2050288f413eceb2d173005
Fix T84078: improve UV unwrapping for quads with an internal reflex angle
When triangulating meshes, the UV unwrapper was previously using a
heuristic to split quads into triangles. If one of the internal angles
is greater than 180degrees, a so-called "reflex angle", the heuristic
was giving a poor choice of split.
Instead of using a special case for quads, this change routes everything
through the generic n-gon `BLI_polyfill_beautify` method instead.
Reviewed By: Brecht Van Lommel
Differential Revision: https://developer.blender.org/D16505
===================================================================
M source/blender/geometry/intern/uv_parametrizer.cc
===================================================================
diff --git a/source/blender/geometry/intern/uv_parametrizer.cc b/source/blender/geometry/intern/uv_parametrizer.cc
index 5a363b4bf17..4236872f057 100644
--- a/source/blender/geometry/intern/uv_parametrizer.cc
+++ b/source/blender/geometry/intern/uv_parametrizer.cc
@@ -1124,16 +1124,6 @@ static PFace *p_face_add_fill(ParamHandle *handle, PChart *chart, PVert *v1, PVe
return f;
}
-static bool p_quad_split_direction(ParamHandle *handle, const float **co, const ParamKey *vkeys)
-{
- /* Slight bias to prefer one edge over the other in case they are equal, so
- * that in symmetric models we choose the same split direction instead of
- * depending on floating point errors to decide. */
- float bias = 1.0f + 1e-6f;
- float fac = len_v3v3(co[0], co[2]) * bias - len_v3v3(co[1], co[3]);
- return fac <= 0.0f;
-}
-
/* Construction: boundary filling */
static void p_chart_boundaries(PChart *chart, PEdge **r_outer)
@@ -3946,21 +3936,10 @@ void GEO_uv_parametrizer_face_add(ParamHandle *phandle,
}
/* No "ears" have previously been inserted. Continue as normal. */
}
- if (nverts > 4) {
+ if (nverts > 3) {
/* ngon */
p_add_ngon(phandle, key, nverts, vkeys, co, uv, pin, select);
}
- else if (nverts == 4) {
- /* quad */
- if (p_quad_split_direction(phandle, co, vkeys)) {
- p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 2, pin, select);
- p_face_add_construct(phandle, key, vkeys, co, uv, 0, 2, 3, pin, select);
- }
- else {
- p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 3, pin, select);
- p_face_add_construct(phandle, key, vkeys, co, uv, 1, 2, 3, pin, select);
- }
- }
else if (!p_face_exists(phandle, vkeys, 0, 1, 2)) {
/* triangle */
p_face_add_construct(phandle, key, vkeys, co, uv, 0, 1, 2, pin, select);
More information about the Bf-blender-cvs
mailing list