[Bf-blender-cvs] [0042eb10770] tmp_hair_curves: Remove the mesh sample from fiber curve data.

Lukas Tönne noreply at git.blender.org
Sat Jun 30 14:02:49 CEST 2018


Commit: 0042eb10770f80cb602f7a1a49cef3d531ee9187
Author: Lukas Tönne
Date:   Sat Jun 30 13:01:52 2018 +0100
Branches: tmp_hair_curves
https://developer.blender.org/rB0042eb10770f80cb602f7a1a49cef3d531ee9187

Remove the mesh sample from fiber curve data.

Fiber curves are simple shapes for fibers now, not tied to a particular
place on the scalp mesh (cf. shape keys).

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

M	source/blender/blenkernel/BKE_hair.h
M	source/blender/blenkernel/intern/hair.c
M	source/blender/editors/object/object_modifier.c
M	source/blender/makesdna/DNA_hair_types.h
M	source/blender/makesrna/intern/rna_modifier.c

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

diff --git a/source/blender/blenkernel/BKE_hair.h b/source/blender/blenkernel/BKE_hair.h
index afc1fefbcb9..e24effd9227 100644
--- a/source/blender/blenkernel/BKE_hair.h
+++ b/source/blender/blenkernel/BKE_hair.h
@@ -65,7 +65,7 @@ void BKE_hair_fiber_curves_begin(struct HairSystem *hsys, int totcurves);
  * \param mesh_sample Origin of the fiber curve on the scalp mesh.
  * \param numverts Number of vertices in this fiber curve
  */
-void BKE_hair_set_fiber_curve(struct HairSystem *hsys, int index, const struct MeshSample *mesh_sample, int numverts,
+void BKE_hair_set_fiber_curve(struct HairSystem *hsys, int index, int numverts,
                               float taper_length, float taper_thickness);
 
 /* Finalize fiber curve update */
diff --git a/source/blender/blenkernel/intern/hair.c b/source/blender/blenkernel/intern/hair.c
index de52bddb4d9..5020f9774a9 100644
--- a/source/blender/blenkernel/intern/hair.c
+++ b/source/blender/blenkernel/intern/hair.c
@@ -228,13 +228,12 @@ void BKE_hair_fiber_curves_begin(HairSystem *hsys, int totcurves)
 	}
 }
 
-void BKE_hair_set_fiber_curve(HairSystem *hsys, int index, const MeshSample *mesh_sample, int numverts,
+void BKE_hair_set_fiber_curve(HairSystem *hsys, int index, int numverts,
                               float taper_length, float taper_thickness)
 {
 	BLI_assert(index <= hsys->curve_data.totcurves);
 	
 	HairFiberCurve *curve = &hsys->curve_data.curves[index];
-	memcpy(&curve->mesh_sample, mesh_sample, sizeof(MeshSample));
 	curve->numverts = numverts;
 	curve->taper_length = taper_length;
 	curve->taper_thickness = taper_thickness;
@@ -359,22 +358,12 @@ bool BKE_hair_bind_follicles(HairSystem *hsys, const Mesh *scalp)
 		return false;
 	}
 	
-	float (*strandloc)[3] = MEM_mallocN(sizeof(float) * 3 * num_strands, "strand locations");
-	{
-		for (int i = 0; i < num_strands; ++i)
-		{
-			float nor[3], tang[3];
-			if (!BKE_mesh_sample_eval(scalp, &hsys->curve_data.curves[i].mesh_sample, strandloc[i], nor, tang))
-			{
-				zero_v3(strandloc[i]);
-			}
-		}
-	}
-	
 	KDTree *tree = BLI_kdtree_new(num_strands);
 	for (int c = 0; c < num_strands; ++c)
 	{
-		BLI_kdtree_insert(tree, c, strandloc[c]);
+		const int vertstart = hsys->curve_data.curves[c].vertstart;
+		const float *rootco = hsys->curve_data.verts[vertstart].co;
+		BLI_kdtree_insert(tree, c, rootco);
 	}
 	BLI_kdtree_balance(tree);
 	
@@ -391,7 +380,6 @@ bool BKE_hair_bind_follicles(HairSystem *hsys, const Mesh *scalp)
 	}
 	
 	BLI_kdtree_free(tree);
-	MEM_freeN(strandloc);
 	
 	return true;
 }
@@ -412,21 +400,18 @@ BLI_INLINE int hair_get_strand_subdiv_numverts(int numstrands, int numverts, int
 
 /* Subdivide a curve */
 static int hair_curve_subdivide(const HairFiberCurve* curve, const HairFiberVertex* verts,
-                                int subdiv, const float rootpos[3], HairFiberVertex *r_verts)
+                                int subdiv, HairFiberVertex *r_verts)
 {
 	{
 		/* Move vertex positions from the dense array to their initial configuration for subdivision.
 		 * Also add offset to ensure the curve starts on the scalp surface.
 		 */
 		const int step = (1 << subdiv);
-		
 		BLI_assert(curve->numverts > 0);
-		float offset[3];
-		sub_v3_v3v3(offset, rootpos, verts[0].co);
 		
 		HairFiberVertex *dst = r_verts;
 		for (int i = 0; i < curve->numverts; ++i) {
-			add_v3_v3v3(dst->co, verts[i].co, offset);
+			copy_v3_v3(dst->co, verts[i].co);
 			dst += step;
 		}
 	}
@@ -479,15 +464,13 @@ static void hair_curve_transport_frame(const float co1[3], const float co2[3],
 }
 
 /* Calculate tangent and normal vectors for all vertices on a curve */
-static void hair_curve_calc_vectors(const HairFiberVertex* verts, int numverts, float rootmat[3][3],
+static void hair_curve_calc_vectors(const HairFiberVertex* verts, int numverts,
                                     float (*r_tangents)[3], float (*r_normals)[3])
 {
 	BLI_assert(numverts >= 2);
 	
-	float prev_tang[3], prev_nor[3];
-	
-	copy_v3_v3(prev_tang, rootmat[2]);
-	copy_v3_v3(prev_nor, rootmat[0]);
+	float prev_tang[3] = {0.0f, 0.0f, 1.0f};
+	float prev_nor[3] = {1.0f, 0.0f, 0.0f};
 	
 	hair_curve_transport_frame(
 	        verts[0].co, verts[1].co,
@@ -610,15 +593,9 @@ int BKE_hair_export_cache_update(HairExportCache *cache, const HairSystem *hsys,
 			float (*tangents)[3] = &cache->fiber_tangents[curve->vertstart];
 			float (*normals)[3] = &cache->fiber_normals[curve->vertstart];
 			
-			/* Root matrix for offsetting to the scalp surface and for initial normal direction */
-			float rootpos[3];
-			float rootmat[3][3];
-			BKE_mesh_sample_eval(scalp, &curve->mesh_sample, rootpos, rootmat[2], rootmat[0]);
-			cross_v3_v3v3(rootmat[1], rootmat[2], rootmat[0]);
-			
-			hair_curve_subdivide(curve_orig, verts_orig, subdiv, rootpos, verts);
+			hair_curve_subdivide(curve_orig, verts_orig, subdiv, verts);
 			
-			hair_curve_calc_vectors(verts, curve->numverts, rootmat, tangents, normals);
+			hair_curve_calc_vectors(verts, curve->numverts, tangents, normals);
 		}
 	}
 
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 0c100308bb9..5e753c458c6 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -2467,7 +2467,7 @@ static int hair_generate_follicles_exec(bContext *C, wmOperator *op)
 		BKE_hair_fiber_curves_begin(hsys, hsys->pattern->num_follicles);
 		for (int i = 0; i < hsys->pattern->num_follicles; ++i)
 		{
-			BKE_hair_set_fiber_curve(hsys, i, &hsys->pattern->follicles[i].mesh_sample, numverts, taper_length, taper_thickness);
+			BKE_hair_set_fiber_curve(hsys, i, numverts, taper_length, taper_thickness);
 		}
 		BKE_hair_fiber_curves_end(hsys);
 		for (int i = 0; i < hsys->pattern->num_follicles; ++i)
diff --git a/source/blender/makesdna/DNA_hair_types.h b/source/blender/makesdna/DNA_hair_types.h
index 2faca93592b..790d7952f4a 100644
--- a/source/blender/makesdna/DNA_hair_types.h
+++ b/source/blender/makesdna/DNA_hair_types.h
@@ -52,7 +52,6 @@ typedef struct HairPattern {
 } HairPattern;
 
 typedef struct HairFiberCurve {
-	MeshSample mesh_sample;             /* Sample on the scalp mesh for the root vertex */
 	int vertstart;                      /* Offset in the vertex array where the curve starts */
 	int numverts;                       /* Number of vertices in the curve */
 
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 7e56c4a4c86..2fa3285a781 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -1224,14 +1224,11 @@ static void rna_Hair_fiber_curves_apply(ID *id, HairModifierData *hmd, bContext
 	const int totcurves = BLI_listbase_count(&hmd->fiber_curves);
 	int i = 0;
 	
-	MeshSample msample;
-	memset(&msample, 0, sizeof(msample));
-	
 	BKE_hair_fiber_curves_begin(hmd->hair_system, totcurves);
 	i = 0;
 	for (HairModifierFiberCurve *curve = hmd->fiber_curves.first; curve; curve = curve->next, ++i)
 	{
-		BKE_hair_set_fiber_curve(hmd->hair_system, i, &msample, curve->numverts, 0.1, 1.0);
+		BKE_hair_set_fiber_curve(hmd->hair_system, i, curve->numverts, 0.1, 1.0);
 	}
 	BKE_hair_fiber_curves_end(hmd->hair_system);



More information about the Bf-blender-cvs mailing list