Commit: 47a89467f03b342a27aab8a60670caa84d03a532 Author: Hans Goudey Date: Sun Sep 5 00:40:15 2021 -0500 Branches: temp-vert-normals-cleanup https://developer.blender.org/rB47a89467f03b342a27aab8a60670caa84d03a532
Initial changes to move normals out of MVert =================================================================== M source/blender/blenkernel/BKE_bvhutils.h M source/blender/blenkernel/BKE_mesh.h M source/blender/blenkernel/BKE_particle.h M source/blender/blenkernel/BKE_pbvh.h M source/blender/blenkernel/intern/bvhutils.cc M source/blender/blenkernel/intern/cdderivedmesh.c M source/blender/blenkernel/intern/cloth.c M source/blender/blenkernel/intern/displist.cc M source/blender/blenkernel/intern/dynamicpaint.c M source/blender/blenkernel/intern/effect.c M source/blender/blenkernel/intern/fluid.c M source/blender/blenkernel/intern/geometry_set_instances.cc M source/blender/blenkernel/intern/mesh_convert.c M source/blender/blenkernel/intern/mesh_normals.cc M source/blender/blenkernel/intern/mesh_tangent.c M source/blender/blenkernel/intern/particle.c M source/blender/blenkernel/intern/pbvh.c M source/blender/blenkernel/intern/pbvh_intern.h M source/blender/blenkernel/intern/shrinkwrap.c M source/blender/bmesh/intern/bmesh_mesh_convert.c M source/blender/editors/sculpt_paint/paint_image_proj.c M source/blender/editors/sculpt_paint/paint_vertex.c M source/blender/editors/sculpt_paint/sculpt.c M source/blender/editors/sculpt_paint/sculpt_cloth.c M source/blender/editors/sculpt_paint/sculpt_intern.h M source/blender/io/alembic/intern/abc_customdata.h M source/blender/io/alembic/intern/abc_reader_mesh.cc M source/blender/io/alembic/intern/abc_reader_mesh.h M source/blender/io/collada/GeometryExporter.cpp M source/blender/io/usd/intern/usd_reader_mesh.cc M source/blender/io/usd/intern/usd_writer_mesh.cc M source/blender/makesdna/DNA_meshdata_types.h M source/blender/makesrna/intern/rna_mesh.c M source/blender/modifiers/intern/MOD_displace.c M source/blender/modifiers/intern/MOD_mask.cc M source/blender/modifiers/intern/MOD_ocean.c M source/blender/modifiers/intern/MOD_util.c M source/blender/modifiers/intern/MOD_wave.c M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc M source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc =================================================================== diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h index 06be8ec80fc..a8b6d09ee46 100644 --- a/source/blender/blenkernel/BKE_bvhutils.h +++ b/source/blender/blenkernel/BKE_bvhutils.h @@ -71,6 +71,7 @@ typedef struct BVHTreeFromMesh { /* Vertex array, so that callbacks have instant access to data. */ const struct MVert *vert; + const float (*vert_normals)[3]; const struct MEdge *edge; /* only used for BVHTreeFromMeshEdges */ const struct MFace *face; const struct MLoop *loop; diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index dbcefb8b6d5..b0583cc570d 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -292,7 +292,8 @@ void BKE_mesh_calc_normals_poly_and_vertex(struct MVert *mvert, float (*r_poly_normals)[3], float (*r_vert_normals)[3]); void BKE_mesh_calc_normals(struct Mesh *me); -void BKE_mesh_ensure_normals(struct Mesh *me); +const float (*BKE_mesh_ensure_vertex_normals(const Mesh *mesh))[3]; +const float (*BKE_mesh_ensure_face_normals(const Mesh *mesh))[3]; void BKE_mesh_ensure_normals_for_display(struct Mesh *mesh); void BKE_mesh_calc_normals_looptri(struct MVert *mverts, int numVerts, diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index 78a6e47ec48..e2bbe99cb51 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -545,6 +545,7 @@ void psys_get_texture(struct ParticleSimulationData *sim, int event, float cfra); void psys_interpolate_face(struct MVert *mvert, + const float (*vert_normals)[3], struct MFace *mface, struct MTFace *tface, float (*orcodata)[3], diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h index 056a7e2d897..54a6e27fdb3 100644 --- a/source/blender/blenkernel/BKE_pbvh.h +++ b/source/blender/blenkernel/BKE_pbvh.h @@ -356,6 +356,7 @@ typedef struct PBVHVertexIter { /* mesh */ struct MVert *mverts; + const float (*vert_normals)[3]; int totvert; const int *vert_indices; struct MPropCol *vcol; @@ -372,7 +373,7 @@ typedef struct PBVHVertexIter { struct MVert *mvert; struct BMVert *bm_vert; float *co; - short *no; + float *no; float *fno; float *mask; float *col; @@ -426,7 +427,7 @@ void pbvh_vertex_iter_init(PBVH *pbvh, PBVHNode *node, PBVHVertexIter *vi, int m BLI_assert(vi.visible); \ } \ vi.co = vi.mvert->co; \ - vi.no = vi.mvert->no; \ + vi.no = vi.vert_normals[vi.vert_indices[vi.gx]]; \ vi.index = vi.vert_indices[vi.i]; \ if (vi.vmask) { \ vi.mask = &vi.vmask[vi.index]; \ @@ -486,6 +487,7 @@ void BKE_pbvh_parallel_range_settings(struct TaskParallelSettings *settings, int totnode); struct MVert *BKE_pbvh_get_verts(const PBVH *pbvh); +const float (*BKE_pbvh_get_vert_normals(const PBVH *pbvh))[3]; PBVHColorBufferNode *BKE_pbvh_node_color_buffer_get(PBVHNode *node); void BKE_pbvh_node_color_buffer_free(PBVH *pbvh); diff --git a/source/blender/blenkernel/intern/bvhutils.cc b/source/blender/blenkernel/intern/bvhutils.cc index 707201207d9..55bc739217b 100644 --- a/source/blender/blenkernel/intern/bvhutils.cc +++ b/source/blender/blenkernel/intern/bvhutils.cc @@ -1449,6 +1449,7 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data, BVHTree *tree = nullptr; BVHCache **bvh_cache_p = (BVHCache **)&mesh->runtime.bvh_cache; ThreadMutex *mesh_eval_mutex = (ThreadMutex *)mesh->runtime.eval_mutex; + data->vert_normals = BKE_mesh_ensure_vertex_normals(mesh); const bool is_cached = bvhcache_find(bvh_cache_p, bvh_cache_type, &tree, nullptr, nullptr); diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 039a971fe2c..52b6889e69b 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -56,6 +56,7 @@ typedef struct { /* these point to data in the DerivedMesh custom data layers, * they are only here for efficiency and convenience */ MVert *mvert; + const float (*vert_normals)[3]; MEdge *medge; MFace *mface; MLoop *mloop; @@ -161,7 +162,7 @@ static void cdDM_getVertCo(DerivedMesh *dm, int index, float r_co[3]) static void cdDM_getVertNo(DerivedMesh *dm, int index, float r_no[3]) { CDDerivedMesh *cddm = (CDDerivedMesh *)dm; - normal_short_to_float_v3(r_no, cddm->mvert[index].no); + copy_v3_v3(r_no, cddm->vert_normals[index]); } static const MeshElemMap *cdDM_getPolyMap(Object *ob, DerivedMesh *dm) @@ -303,6 +304,7 @@ static DerivedMesh *cdDM_from_mesh_ex(Mesh *mesh, CustomData_merge(&mesh->pdata, &dm->polyData, cddata_masks.pmask, alloctype, mesh->totpoly); cddm->mvert = CustomData_get_layer(&dm->vertData, CD_MVERT); + cddm->vert_normals = CustomData_get_layer(&dm->vertData, CD_NORMAL); cddm->medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE); cddm->mloop = CustomData_get_layer(&dm->loopData, CD_MLOOP); cddm->mpoly = CustomData_get_layer(&dm->polyData, CD_MPOLY); diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c index 080a7c90c46..ac56fc1b449 100644 --- a/source/blender/blenkernel/intern/cloth.c +++ b/source/blender/blenkernel/intern/cloth.c @@ -1401,7 +1401,7 @@ static bool find_internal_spring_target_vertex(BVHTreeFromMesh *treedata, float radius; copy_v3_v3(co, treedata->vert[v_idx].co); - normal_short_to_float_v3(no, treedata->vert[v_idx].no); + normal_short_to_float_v3(no, treedata->vert_normals[v_idx]); negate_v3(no); float vec_len = sin(max_diversion); diff --git a/source/blender/blenkernel/intern/displist.cc b/source/blender/blenkernel/intern/displist.cc index 58509e95de6..4b247bb2418 100644 --- a/source/blender/blenkernel/intern/displist.cc +++ b/source/blender/blenkernel/intern/displist.cc @@ -934,7 +934,7 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph, vertCos = BKE_mesh_vert_coords_alloc(modified, &totvert); } if (need_normal) { - BKE_mesh_ensure_normals(modified); + BKE_mesh_ensure_vertex_normals(modified); } mti->deformVerts(md, &mectx_deform, modified, vertCos, totvert); } @@ -982,7 +982,7 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph, } if (need_normal) { - BKE_mesh_ensure_normals(modified); + BKE_mesh_ensure_vertex_normals(modified); } Mesh *mesh_applied = mti->modifyMesh(md, &mectx_apply, modified); @@ -1035,7 +1035,7 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph, if (modified) { /* XXX2.8(Sybren): make sure the face normals are recalculated as well */ - BKE_mesh_ensure_normals(modified); + BKE_mesh_ensure_vertex_normals(modified); /* Special tweaks, needed since neither BKE_mesh_new_nomain_from_template() nor * BKE_mesh_new_nomain_from_curve_displist() properly duplicate mat info... */ diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c index 0dc4f64cec1..ef4ac67bae3 100644 --- a/source/blender/blenkernel/intern/dynamicpaint.c +++ b/source/blender/blenkernel/intern/dynamicpaint.c @@ -1804,6 +1804,7 @@ typedef struct DynamicPaintModifierApplyData { Object *ob; MVert *mvert; + const float (*vert_normals)[3]; const MLoop *mloop; const MPoly *mpoly; @@ -1821,14 +1822,11 @@ static void dynamic_paint_apply_surface_displace_cb(void *__restrict userdata, const DynamicPaintSurface *surface = data->surface; MVert *mvert = data->mvert; - float normal[3]; const float *value = (float *)surface->data->type_data; const float val = value[i] * surface->disp_factor; - normal_short_to_float_v3(normal, mvert[i].no); - /* same as 'mvert[i].co[0] -= normal[0] * val' etc. */ - madd_v3_v3fl(mvert[i].co, normal, -val); + madd_v3_v3fl(mvert[i].co, data->vert_normals[i], -val); } /* apply displacing vertex surface to the derived mesh */ @@ -1847,6 +1845,7 @@ static void dynamicPaint_applySurfaceDisplace(DynamicPaintSurface *surface, Mesh DynamicPaintModifierApplyData data = { .surface = surface, .mvert = mvert, + .vert_normals = BKE_mesh_ensure_vertex_normals(result), }; TaskParallelSettings settings; BLI_parallel_range_settings_defaults(&settings); @@ -1913,10 +1912,8 @@ static void dynamic_paint_apply_surface_wave_cb(void *__restrict userdata, PaintWavePoint *wPoint = (PaintWavePoint *)data->surface->data->type_data; MVert *mvert = data->mvert; - float normal[3]; - normal_short_to_float_v3(normal, mvert[i].no); - madd_v3_v3fl(mvert[i].co, normal, wPoint[i].height); + madd_v3_v3fl(mvert[i].co, data->vert_normals, wPoint[i].height); } /* @@ -2045,6 +2042,7 @@ static Mesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, Object * DynamicPaintModifierApplyData data = { .surface = surface, .mvert = mvert, + .vert_normals = BKE_mesh_ensure_vertex_normals(result), }; TaskParallelSettings settings; BLI_parallel_range_settings_defaults(&settings); @@ -4304,6 +4302,7 @@ static bool dynamicPaint_paintMesh(Depsgraph *depsgraph, mesh = BKE_mesh_copy_for_eval(brush_mesh, false); mvert = mesh->mvert; + const float(*vert_normals)[3] = BKE_mesh_ensure_vertex_normals(mesh); mlooptri = BKE_mesh_runtime_looptri_ensure(mesh); mloop = mesh->mloop; numOfVerts = mesh->totvert; @@ -4318,7 +4317,7 @@ static bool dynamicPaint_paintMesh(Depsgraph *depsgraph, /* for proximity project calculate average normal */ if (brush->flags & MOD_DPAINT_PROX_PROJECT && brush->co @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs