[Bf-blender-cvs] [f61d4b2e3aa] temp_bmesh_multires: * Improved multires projection some more in bmesh_interp.c

Joseph Eagar noreply at git.blender.org
Mon Oct 19 03:10:48 CEST 2020


Commit: f61d4b2e3aaed64c0fa2bdd7740e2173d785f8e5
Author: Joseph Eagar
Date:   Sun Oct 18 18:10:16 2020 -0700
Branches: temp_bmesh_multires
https://developer.blender.org/rBf61d4b2e3aaed64c0fa2bdd7740e2173d785f8e5

* Improved multires projection some more in bmesh_interp.c

===================================================================

M	source/blender/blenkernel/BKE_mesh.h
M	source/blender/blenkernel/BKE_mesh_mirror.h
M	source/blender/blenkernel/intern/mesh.c
M	source/blender/blenkernel/intern/mesh_mirror.c
M	source/blender/blenkernel/intern/multires.c
M	source/blender/blenkernel/intern/pbvh.c
M	source/blender/blenkernel/intern/subdiv_eval.c
M	source/blender/bmesh/intern/bmesh_interp.c
M	source/blender/bmesh/intern/bmesh_interp.h
M	source/blender/editors/object/object_remesh.c
M	source/blender/io/alembic/exporter/abc_writer_mesh.cc
M	source/blender/modifiers/intern/MOD_bevel.c
M	source/blender/modifiers/intern/MOD_decimate.c
M	source/blender/modifiers/intern/MOD_edgesplit.c
M	source/blender/modifiers/intern/MOD_triangulate.c
M	source/blender/modifiers/intern/MOD_wireframe.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index fdea26ce730..1ea40fa7e62 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -71,7 +71,8 @@ extern "C" {
 
 /* *** mesh.c *** */
 
-struct BMesh *BKE_mesh_to_bmesh_ex(const struct Mesh *me,
+struct BMesh *BKE_mesh_to_bmesh_ex(const struct Object *ob,
+                                   const struct Mesh *me,
                                    const struct BMeshCreateParams *create_params,
                                    const struct BMeshFromMeshParams *convert_params);
 struct BMesh *BKE_mesh_to_bmesh(struct Mesh *me,
diff --git a/source/blender/blenkernel/BKE_mesh_mirror.h b/source/blender/blenkernel/BKE_mesh_mirror.h
index 2c6920a18bf..9a6a200990d 100644
--- a/source/blender/blenkernel/BKE_mesh_mirror.h
+++ b/source/blender/blenkernel/BKE_mesh_mirror.h
@@ -33,7 +33,8 @@ struct MirrorModifierData;
 struct ModifierEvalContext;
 struct Object;
 
-struct Mesh *BKE_mesh_mirror_bisect_on_mirror_plane(struct MirrorModifierData *mmd,
+struct Mesh *BKE_mesh_mirror_bisect_on_mirror_plane(struct Object *ob,
+                                                    struct MirrorModifierData *mmd,
                                                     const struct Mesh *mesh,
                                                     int axis,
                                                     const float plane_co[3],
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 15589e13017..ee768d96ae4 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -1015,7 +1015,8 @@ Mesh *BKE_mesh_copy_for_eval(struct Mesh *source, bool reference)
   return result;
 }
 
-BMesh *BKE_mesh_to_bmesh_ex(const Mesh *me,
+BMesh *BKE_mesh_to_bmesh_ex(const Object *ob,
+                            const Mesh *me,
                             const struct BMeshCreateParams *create_params,
                             const struct BMeshFromMeshParams *convert_params)
 {
@@ -1023,7 +1024,7 @@ BMesh *BKE_mesh_to_bmesh_ex(const Mesh *me,
   const BMAllocTemplate allocsize = BMALLOC_TEMPLATE_FROM_ME(me);
 
   bm = BM_mesh_create(&allocsize, create_params);
-  BM_mesh_bm_from_me(NULL, bm, me, convert_params);
+  BM_mesh_bm_from_me(ob, bm, me, convert_params);
 
   return bm;
 }
@@ -1033,7 +1034,8 @@ BMesh *BKE_mesh_to_bmesh(Mesh *me,
                          const bool add_key_index,
                          const struct BMeshCreateParams *params)
 {
-  return BKE_mesh_to_bmesh_ex(me,
+  return BKE_mesh_to_bmesh_ex(ob,
+                              me,
                               params,
                               &(struct BMeshFromMeshParams){
                                   .calc_face_normal = false,
diff --git a/source/blender/blenkernel/intern/mesh_mirror.c b/source/blender/blenkernel/intern/mesh_mirror.c
index 46764a56e60..bedc6f27db5 100644
--- a/source/blender/blenkernel/intern/mesh_mirror.c
+++ b/source/blender/blenkernel/intern/mesh_mirror.c
@@ -41,7 +41,8 @@
 
 #include "MOD_modifiertypes.h"
 
-Mesh *BKE_mesh_mirror_bisect_on_mirror_plane(MirrorModifierData *mmd,
+Mesh *BKE_mesh_mirror_bisect_on_mirror_plane(Object *ob,
+                                             MirrorModifierData *mmd,
                                              const Mesh *mesh,
                                              int axis,
                                              const float plane_co[3],
@@ -58,7 +59,8 @@ Mesh *BKE_mesh_mirror_bisect_on_mirror_plane(MirrorModifierData *mmd,
   BMIter viter;
   BMVert *v, *v_next;
 
-  bm = BKE_mesh_to_bmesh_ex(mesh,
+  bm = BKE_mesh_to_bmesh_ex(ob,
+                            mesh,
                             &(struct BMeshCreateParams){0},
                             &(struct BMeshFromMeshParams){
                                 .calc_face_normal = true,
@@ -157,7 +159,7 @@ Mesh *BKE_mesh_mirror_apply_mirror_on_axis(MirrorModifierData *mmd,
 
   Mesh *mesh_bisect = NULL;
   if (do_bisect) {
-    mesh_bisect = BKE_mesh_mirror_bisect_on_mirror_plane(mmd, mesh, axis, plane_co, plane_no);
+    mesh_bisect = BKE_mesh_mirror_bisect_on_mirror_plane(ob, mmd, mesh, axis, plane_co, plane_no);
     mesh = mesh_bisect;
   }
 
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index d069386b7a1..79dd8017905 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -1309,12 +1309,11 @@ static void multires_bmesh_space_set_cb(void *__restrict userdata,
 
             // try to prevent errors
             float len = len_v3(data);
-            /*
             if (len > maxlen) {
               mul_v3_fl(data, maxlen/len);
             } else if (isnan(len)) {
               zero_v3(data);
-            }*/
+            }
             break;
         }
       }
@@ -1344,6 +1343,8 @@ void BKE_multires_bmesh_space_set(Object *ob, BMesh *bm, int mode)
     return;
   }
 
+  bm->multiresSpace = mode;
+
   Mesh _me, *me = &_me;
   memset(me, 0, sizeof(Mesh));
   CustomData_reset(&me->vdata);
@@ -1624,8 +1625,8 @@ static void multiresModifier_disp_run(
   BLI_task_parallel_range(0, totpoly, &data, multires_disp_run_cb, &settings);
 
   if (op == APPLY_DISPLACEMENTS) {
-     ccgSubSurf_stitchFaces(ccgdm->ss, 0, NULL, 0);
-     ccgSubSurf_updateNormals(ccgdm->ss, NULL, 0);
+    ccgSubSurf_stitchFaces(ccgdm->ss, 0, NULL, 0);
+    ccgSubSurf_updateNormals(ccgdm->ss, NULL, 0);
   }
 }
 
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 569eb8eef89..f2b9c01acfb 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -49,7 +49,7 @@
 
 #include <limits.h>
 
-#define LEAF_LIMIT 700
+#define LEAF_LIMIT 4000
 
 //#define PERFCNTRS
 
diff --git a/source/blender/blenkernel/intern/subdiv_eval.c b/source/blender/blenkernel/intern/subdiv_eval.c
index 01d43a1b7e5..b858c847a68 100644
--- a/source/blender/blenkernel/intern/subdiv_eval.c
+++ b/source/blender/blenkernel/intern/subdiv_eval.c
@@ -174,10 +174,12 @@ void BKE_subdiv_eval_limit_point(
   BKE_subdiv_eval_limit_point_and_derivatives(subdiv, ptex_face_index, u, v, r_P, NULL, NULL);
 }
 
+#if 0
 static bool close_zero(float c[3]) {
   const float eps = 0.00001;
   return fabs(c[0]) < eps && fabs(c[1]) < eps && fabs(c[2]) < eps; 
 }
+#endif
 
 void BKE_subdiv_eval_limit_point_and_derivatives(Subdiv *subdiv,
                                                  const int ptex_face_index,
@@ -201,7 +203,8 @@ void BKE_subdiv_eval_limit_point_and_derivatives(Subdiv *subdiv,
    * that giving totally unusable derivatives. */
 
   if (r_dPdu != NULL && r_dPdv != NULL) {
-    if ((close_zero(r_dPdu) || close_zero(r_dPdv)) || equals_v3v3(r_dPdu, r_dPdv)) {
+    //if ((close_zero(r_dPdu) || close_zero(r_dPdv)) || equals_v3v3(r_dPdu, r_dPdv)) {
+    if ((is_zero_v3(r_dPdu) || is_zero_v3(r_dPdv)) || equals_v3v3(r_dPdu, r_dPdv)) {
       subdiv->evaluator->evaluateLimit(subdiv->evaluator,
                                        ptex_face_index,
                                        u * 0.999f + 0.0005f,
diff --git a/source/blender/bmesh/intern/bmesh_interp.c b/source/blender/bmesh/intern/bmesh_interp.c
index 72ef14c174d..4acdfb6e5ae 100644
--- a/source/blender/bmesh/intern/bmesh_interp.c
+++ b/source/blender/bmesh/intern/bmesh_interp.c
@@ -27,13 +27,13 @@
 
 #include "DNA_meshdata_types.h"
 
-#include "BLI_utildefines.h"
 #include "BLI_alloca.h"
+#include "BLI_array.h"
 #include "BLI_linklist.h"
 #include "BLI_math.h"
 #include "BLI_memarena.h"
 #include "BLI_task.h"
-#include "BLI_array.h"
+#include "BLI_utildefines.h"
 
 #include "BKE_customdata.h"
 #include "BKE_multires.h"
@@ -325,11 +325,11 @@ static bool quad_co(const float v1[3],
     copy_v3_v3(projverts2[i], projverts[i]);
   }
 
-  //expand quad a bit
+  // expand quad a bit
 #if 1
   float eps = FLT_EPSILON * 400000;
   float c[3];
-  
+
   mid_v3_v3v3v3v3(c, projverts[0], projverts[1], projverts[2], projverts[3]);
 
   sub_v3_v3(projverts2[0], c);
@@ -344,8 +344,7 @@ static bool quad_co(const float v1[3],
   add_v3_v3(projverts2[1], c);
   add_v3_v3(projverts2[2], c);
   add_v3_v3(projverts2[3], c);
-#endif 
-
+#endif
 
   if (!isect_point_quad_v2(origin, projverts2[0], projverts2[1], projverts2[2], projverts2[3])) {
     return false;
@@ -353,7 +352,7 @@ static bool quad_co(const float v1[3],
 
   resolve_quad_uv_v2(r_uv, origin, projverts[0], projverts[3], projverts[2], projverts[1]);
 
-  //if (r_uv[0] < -eps || r_uv[1] < -eps || r_uv[0] > 1.0+eps || r_uv[1] > 1.0+eps) {
+  // if (r_uv[0] < -eps || r_uv[1] < -eps || r_uv[0] > 1.0+eps || r_uv[1] > 1.0+eps) {
   //  return false;
   //}
 
@@ -400,7 +399,6 @@ static bool mdisp_in_mdispquad(BMLoop *l_src,
   compute_mdisp_quad(l_dst, l_dst_f_center, v1, v2, v3, v4, e1, e2);
 
   /* expand quad a bit */
-#if 0
   float c[3];
   float eps = FLT_EPSILON * 400;
   mid_v3_v3v3v3v3(c, v1, v2, v3, v4);
@@ -417,7 +415,6 @@ static bool mdisp_in_mdispquad(BMLoop *l_src,
   add_v3_v3(v2, c);
   add_v3_v3(v3, c);
   add_v3_v3(v4, c);
-#endif 
 
   if (!quad_co(v1, v2, v3, v4, p, l_src->v->no, r_uv)) {
     return 0;
@@ -567,8 +564,8 @@ static void loop_interp_multires_cb(void *__restrict userdata,
         negate_v3(n2);
       }
 
-      th = acos(dot_v3v3(n1, n2)*0.999999f);
-      if (th > M_PI*0.1) {
+      th = acos(dot_v3v3(n1, n2) * 0.999999f);
+      if (th > M_PI * 0.1) {
         continue;
       }
 
@@ -587,23 +584,24 @@ static void loop_interp_multires_cb(void *__restrict userdata,
         float l = len_v3v3(disp, baseco);
         if (l < mindis) {
           mindis = l;
-          //tot++;
-          //copy_v3_v3(sum, disp);
+          // tot++;
+          // copy_v3_v3(sum, disp);
         }
         add_v3_v3(sum, disp);
         tot++;
-        //break;
+        // break;
       }
     } while ((l_iter = l_iter->next) != l_first);
 
     if (tot) {
       mul_v3_fl(sum, 1.0 / (float)tot);
       copy_v3_v3(md_dst->disps[iy * res + ix], sum);
-    } else {
-      //printf("failed to set disp: %f %f\n"

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list