[Bf-blender-cvs] [08cdc98b544] hair_guides hair_guides_grooming: Backport a few changes from the grooming branch.

Lukas Tönne noreply at git.blender.org
Sat Jun 9 11:17:20 CEST 2018


Commit: 08cdc98b54496d7681753e1e815c0b6b014ed6d9
Author: Lukas Tönne
Date:   Sat Jun 9 10:16:01 2018 +0100
Branches: hair_guides hair_guides_grooming
https://developer.blender.org/rB08cdc98b54496d7681753e1e815c0b6b014ed6d9

Backport a few changes from the grooming branch.

material_index in hair system has been removed. The material/shader
for hair should be defined externally it doesn't make sense to rely
on the scalp object material slots for this.

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

M	intern/cycles/blender/blender_curves.cpp
M	source/blender/blenkernel/BKE_hair.h
M	source/blender/blenkernel/BKE_mesh_sample.h
M	source/blender/blenkernel/intern/hair.c
M	source/blender/blenkernel/intern/mesh_sample.c
M	source/blender/makesrna/intern/rna_hair.c

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

diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp
index 558657d61d2..8792f9d2d81 100644
--- a/intern/cycles/blender/blender_curves.cpp
+++ b/intern/cycles/blender/blender_curves.cpp
@@ -296,20 +296,20 @@ static void ObtainCacheVColFromParticleSystem(BL::Mesh *b_mesh,
 	}
 }
 
-static void ObtainCacheDataFromHairSystem(Mesh *mesh,
-                                          BL::Object *b_ob,
+static void ObtainCacheDataFromHairSystem(BL::Object *b_ob,
                                           BL::HairSystem *b_hsys,
-                                          ParticleCurveData *CData,
+                                          BL::Mesh *b_scalp,
+                                          int shader,
                                           bool /*background*/,
+                                          ParticleCurveData *CData,
                                           int *curvenum,
                                           int *keyno)
 {
 	Transform tfm = get_transform(b_ob->matrix_world());
 	Transform itfm = transform_quick_inverse(tfm);
 	
-	BL::Mesh b_mesh(b_ob->data());
 	void *hair_cache = BKE_hair_export_cache_new();
-	BKE_hair_export_cache_update(hair_cache, b_hsys->ptr.data, 0, b_mesh.ptr.data, 0xFFFFFFFF);
+	BKE_hair_export_cache_update(hair_cache, b_hsys->ptr.data, 0, b_scalp->ptr.data, 0xFFFFFFFF);
 	
 	int totcurves, totverts;
 	BKE_hair_render_get_buffer_size(hair_cache, &totcurves, &totverts);
@@ -323,11 +323,8 @@ static void ObtainCacheDataFromHairSystem(Mesh *mesh,
 	CData->psys_firstcurve.push_back_slow(*curvenum);
 	CData->psys_curvenum.push_back_slow(totcurves);
 	
-	{
-		// Material
-		int shader = clamp(b_hsys->material_index()-1, 0, mesh->used_shaders.size()-1);
-		CData->psys_shader.push_back_slow(shader);
-	}
+	// Material
+	CData->psys_shader.push_back_slow(shader);
 	
 	{
 		// Cycles settings
@@ -408,7 +405,6 @@ static void ObtainCacheDataFromHairSystem(Mesh *mesh,
 }
 
 static bool ObtainCacheDataFromObject(Mesh *mesh,
-                                      BL::Mesh *b_mesh,
                                       BL::Object *b_ob,
                                       ParticleCurveData *CData,
                                       bool background)
@@ -416,7 +412,7 @@ static bool ObtainCacheDataFromObject(Mesh *mesh,
 	int curvenum = 0;
 	int keyno = 0;
 
-	if(!(mesh && b_mesh && b_ob && CData))
+	if(!(mesh && b_ob && CData))
 		return false;
 
 	BL::Object::modifiers_iterator b_mod;
@@ -436,11 +432,18 @@ static bool ObtainCacheDataFromObject(Mesh *mesh,
 			if((b_mod->type() == b_mod->type_FUR)) {
 				BL::FurModifier b_fmd((const PointerRNA)b_mod->ptr);
 				BL::HairSystem b_hsys = b_fmd.hair_system();
-				ObtainCacheDataFromHairSystem(mesh,
-				                              b_ob,
+				
+				const int material_index = 1; /* TODO */
+				int shader = clamp(material_index - 1, 0, mesh->used_shaders.size()-1);
+				
+				BL::Mesh b_scalp(b_ob->data());
+				
+				ObtainCacheDataFromHairSystem(b_ob,
 				                              &b_hsys,
-				                              CData,
+				                              &b_scalp,
+				                              shader,
 				                              background,
+				                              CData,
 				                              &curvenum,
 				                              &keyno);
 			}
@@ -1084,7 +1087,7 @@ void BlenderSync::sync_curves(Mesh *mesh,
 
 	ParticleCurveData CData;
 
-	ObtainCacheDataFromObject(mesh, &b_mesh, &b_ob, &CData, !preview);
+	ObtainCacheDataFromObject(mesh, &b_ob, &CData, !preview);
 
 	/* add hair geometry to mesh */
 	if(primitive == CURVE_TRIANGLES) {
@@ -1120,7 +1123,7 @@ void BlenderSync::sync_curves(Mesh *mesh,
 
 	/* generated coordinates from first key. we should ideally get this from
 	 * blender to handle deforming objects */
-	if(!motion) {
+	if(b_mesh && !motion) {
 		if(mesh->need_attribute(scene, ATTR_STD_GENERATED)) {
 			float3 loc, size;
 			mesh_texture_space(b_mesh, loc, size);
@@ -1145,7 +1148,7 @@ void BlenderSync::sync_curves(Mesh *mesh,
 	}
 
 	/* create vertex color attributes */
-	if(!motion) {
+	if(b_mesh && !motion) {
 		BL::Mesh::tessface_vertex_colors_iterator l;
 		int vcol_num = 0;
 
@@ -1181,7 +1184,7 @@ void BlenderSync::sync_curves(Mesh *mesh,
 	}
 
 	/* create UV attributes */
-	if(!motion) {
+	if(b_mesh && !motion) {
 		BL::Mesh::tessface_uv_textures_iterator l;
 		int uv_num = 0;
 
diff --git a/source/blender/blenkernel/BKE_hair.h b/source/blender/blenkernel/BKE_hair.h
index ec9f0601485..cad25348e43 100644
--- a/source/blender/blenkernel/BKE_hair.h
+++ b/source/blender/blenkernel/BKE_hair.h
@@ -117,7 +117,7 @@ void BKE_hair_generate_follicles_ex(
         int count,
         const float *loop_weights);
 
-bool BKE_hair_bind_follicles(struct HairSystem *hsys, struct Mesh *scalp);
+bool BKE_hair_bind_follicles(struct HairSystem *hsys, const struct Mesh *scalp);
 
 /* === Draw Settings === */
 
diff --git a/source/blender/blenkernel/BKE_mesh_sample.h b/source/blender/blenkernel/BKE_mesh_sample.h
index 8f8b8939bae..8599b5a38ad 100644
--- a/source/blender/blenkernel/BKE_mesh_sample.h
+++ b/source/blender/blenkernel/BKE_mesh_sample.h
@@ -55,7 +55,7 @@ bool BKE_mesh_sample_is_valid(const struct MeshSample *sample);
 bool BKE_mesh_sample_is_volume_sample(const struct MeshSample *sample);
 
 /* Evaluate position and normal on the given mesh */
-bool BKE_mesh_sample_eval(struct Mesh *mesh, const struct MeshSample *sample, float loc[3], float nor[3], float tang[3]);
+bool BKE_mesh_sample_eval(const struct Mesh *mesh, const struct MeshSample *sample, float loc[3], float nor[3], float tang[3]);
 
 /* Evaluate position for the given shapekey */
 bool BKE_mesh_sample_shapekey(struct Key *key, struct KeyBlock *kb, const struct MeshSample *sample, float loc[3]);
diff --git a/source/blender/blenkernel/intern/hair.c b/source/blender/blenkernel/intern/hair.c
index c007ae3a325..cca003142da 100644
--- a/source/blender/blenkernel/intern/hair.c
+++ b/source/blender/blenkernel/intern/hair.c
@@ -60,8 +60,6 @@ HairSystem* BKE_hair_new(void)
 	
 	hair->pattern = MEM_callocN(sizeof(HairPattern), "hair pattern");
 	
-	hair->material_index = 1;
-	
 	return hair;
 }
 
@@ -413,7 +411,7 @@ static void hair_fiber_find_closest_strand(
 	hair_fiber_sort_weights(follicle);
 }
 
-bool BKE_hair_bind_follicles(HairSystem *hsys, Mesh *scalp)
+bool BKE_hair_bind_follicles(HairSystem *hsys, const Mesh *scalp)
 {
 	if (!(hsys->flag & HAIR_SYSTEM_UPDATE_FOLLICLE_BINDING))
 	{
diff --git a/source/blender/blenkernel/intern/mesh_sample.c b/source/blender/blenkernel/intern/mesh_sample.c
index 065c4f38601..4071adbb679 100644
--- a/source/blender/blenkernel/intern/mesh_sample.c
+++ b/source/blender/blenkernel/intern/mesh_sample.c
@@ -197,7 +197,7 @@ bool BKE_mesh_sample_is_volume_sample(const MeshSample *sample)
 
 /* Evaluate position and normal on the given mesh */
 
-bool BKE_mesh_sample_eval(Mesh *mesh, const MeshSample *sample, float loc[3], float nor[3], float tang[3])
+bool BKE_mesh_sample_eval(const Mesh *mesh, const MeshSample *sample, float loc[3], float nor[3], float tang[3])
 {
 	const MVert *mverts = mesh->mvert;
 	const unsigned int totverts = (unsigned int)mesh->totvert;
diff --git a/source/blender/makesrna/intern/rna_hair.c b/source/blender/makesrna/intern/rna_hair.c
index dd7dbd3d5be..7ae9dd7e01e 100644
--- a/source/blender/makesrna/intern/rna_hair.c
+++ b/source/blender/makesrna/intern/rna_hair.c
@@ -47,7 +47,6 @@
 #include "BKE_context.h"
 #include "BKE_hair.h"
 #include "BKE_main.h"
-#include "BKE_material.h"
 
 #include "DEG_depsgraph.h"
 #include "DEG_depsgraph_query.h"
@@ -57,7 +56,7 @@
 #include "WM_api.h"
 #include "WM_types.h"
 
-static void rna_HairSystem_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+static void UNUSED_FUNCTION(rna_HairSystem_update)(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
 {
 	DEG_id_tag_update(ptr->id.data, OB_RECALC_DATA);
 }
@@ -82,49 +81,6 @@ static void rna_HairSystem_generate_follicles(
 	BKE_hair_generate_follicles(hsys, scalp_mesh, (unsigned int)seed, count);
 }
 
-static const EnumPropertyItem *rna_HairSystem_material_slot_itemf(
-        bContext *C,
-        PointerRNA *UNUSED(ptr),
-        PropertyRNA *UNUSED(prop),
-        bool *r_free)
-{
-	Object *ob = CTX_data_pointer_get(C, "object").data;
-	Material *ma;
-	EnumPropertyItem *item = NULL;
-	EnumPropertyItem tmp = {0, "", 0, "", ""};
-	int totitem = 0;
-	int i;
-
-	if (ob && ob->totcol > 0) {
-		for (i = 1; i <= ob->totcol; i++) {
-			ma = give_current_material(ob, i);
-			tmp.value = i;
-			tmp.icon = ICON_MATERIAL_DATA;
-			if (ma) {
-				tmp.name = ma->id.name + 2;
-				tmp.identifier = tmp.name;
-			}
-			else {
-				tmp.name = "Default Material";
-				tmp.identifier = tmp.name;
-			}
-			RNA_enum_item_add(&item, &totitem, &tmp);
-		}
-	}
-	else {
-		tmp.value = 1;
-		tmp.icon = ICON_MATERIAL_DATA;
-		tmp.name = "Default Material";
-		tmp.identifier = tmp.name;
-		RNA_enum_item_add(&item, &totitem, &tmp);
-	}
-
-	RNA_enum_item_end(&item, &totitem);
-	*r_free = true;
-
-	return item;
-}
-
 #else
 
 static void rna_def_hair_follicle(BlenderRNA *brna)
@@ -162,11 +118,6 @@ static void rna_def_hair_system(BlenderRNA *brna)
 	FunctionRNA *func;
 	PropertyRNA *prop, *parm;
 	
-	static const EnumPropertyItem material_slot_items[] = {
-		{0, "DUMMY", 0, "Dummy", ""},
-		{0, NULL, 0, NULL, NULL}
-	};
-	
 	srna = RNA_def_struct(brna, "HairSystem", NULL);
 	RNA_def_struct_ui_text(srna, "Hair System", "Hair rendering and deformation data");
 	RNA_def_struct_sdna(srna, "HairSystem");
@@ -176,19 +127,6 @@ static void rna_def_hair_system(BlenderRNA *brna)
 	RNA_def_property_struct_type(prop, "HairPattern");
 	RNA_def_property_ui_text(prop, "Pattern", "Hair pattern");
 	
-	prop = RNA_def_property(srna, "material_index", PROP_INT, PROP_NONE);
-	RNA_def_property_int_sdna(prop, NULL, "material_index");
-	RNA_def_property_range(prop, 1, 32767);
-	RNA_def_property_ui_text(prop, "Material Index", "Index of material slot used for rendering hair fibers");
-	RNA_def_property_update(prop, 0, "rna_HairSystem_update");
-
-	prop = RNA_def_property(srna, "material_s

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list