[Bf-blender-cvs] [fca537d3ef1] hair_guides_grooming: Add commonly used strand draw settings to the hair system draw settings.

Lukas Tönne noreply at git.blender.org
Mon Jun 11 21:25:05 CEST 2018


Commit: fca537d3ef1a255820f780128c5f7ee2114da1ed
Author: Lukas Tönne
Date:   Mon Jun 11 20:23:30 2018 +0100
Branches: hair_guides_grooming
https://developer.blender.org/rBfca537d3ef1a255820f780128c5f7ee2114da1ed

Add commonly used strand draw settings to the hair system draw settings.

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

M	release/scripts/startup/bl_ui/properties_data_groom.py
M	source/blender/blenkernel/intern/hair_draw.c
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/workbench/workbench_deferred.c
M	source/blender/draw/engines/workbench/workbench_forward.c
M	source/blender/draw/intern/draw_common.h
M	source/blender/draw/intern/draw_hair_fibers.c
M	source/blender/makesdna/DNA_hair_types.h
M	source/blender/makesrna/intern/rna_hair.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_groom.py b/release/scripts/startup/bl_ui/properties_data_groom.py
index 6d57f57780e..5cd1f68bf35 100644
--- a/release/scripts/startup/bl_ui/properties_data_groom.py
+++ b/release/scripts/startup/bl_ui/properties_data_groom.py
@@ -134,16 +134,24 @@ class DATA_PT_groom_draw_settings(DataButtonsPanel, Panel):
 
         layout.prop(groom, "material_slot")
 
-        split = layout.split()
-
-        col = split.column()
+        col = layout.column(align=True)
         col.label("Follicles:")
         col.prop(ds, "follicle_mode", expand=True)
 
-        col = split.column()
+        col = layout.column(align=True)
         col.label("Guide Curves:")
         col.prop(ds, "guide_mode", expand=True)
 
+        layout.prop(ds, "shape")
+
+        col = layout.column(align=True)
+        col.prop(ds, "root_radius")
+        col.prop(ds, "tip_radius")
+
+        col = layout.column()
+        col.prop(ds, "radius_scale")
+        col.prop(ds, "use_close_tip")
+
 
 class DATA_PT_custom_props_groom(DataButtonsPanel, PropertyPanel, Panel):
     _context_path = "object.data"
diff --git a/source/blender/blenkernel/intern/hair_draw.c b/source/blender/blenkernel/intern/hair_draw.c
index e070be71950..5e0cc4f882a 100644
--- a/source/blender/blenkernel/intern/hair_draw.c
+++ b/source/blender/blenkernel/intern/hair_draw.c
@@ -48,7 +48,13 @@ HairDrawSettings* BKE_hair_draw_settings_new(void)
 {
 	HairDrawSettings *draw_settings = MEM_callocN(sizeof(HairDrawSettings), "hair draw settings");
 	
-	draw_settings->follicle_mode = HAIR_DRAW_FOLLICLE_NONE;
+	draw_settings->follicle_mode = HAIR_DRAW_FOLLICLE_POINTS;
+	draw_settings->guide_mode = HAIR_DRAW_GUIDE_CURVES;
+	draw_settings->shape_flag = HAIR_DRAW_CLOSE_TIP;
+	draw_settings->shape = 0.0f;
+	draw_settings->root_radius = 1.0f;
+	draw_settings->tip_radius = 0.0f;
+	draw_settings->radius_scale = 0.01f;
 	
 	return draw_settings;
 }
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index c1deeb97832..433e0414779 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1535,6 +1535,7 @@ static void material_hair(
         EEVEE_ViewLayerData *sldata,
         Object *ob,
         HairSystem *hsys,
+        const HairDrawSettings *draw_set,
         Material *ma,
         struct Mesh *scalp)
 {
@@ -1551,10 +1552,10 @@ static void material_hair(
 	}
 	
 	{
-		/*DRWShadingGroup *shgrp =*/ DRW_shgroup_hair_fibers_create(scene, ob, hsys, scalp, psl->depth_pass, e_data.default_prepass_hair_fiber_sh);
+		/*DRWShadingGroup *shgrp =*/ DRW_shgroup_hair_fibers_create(scene, ob, hsys, scalp, draw_set, psl->depth_pass, e_data.default_prepass_hair_fiber_sh);
 	}
 	{
-		DRWShadingGroup *shgrp = DRW_shgroup_hair_fibers_create(scene, ob, hsys, scalp, psl->depth_pass_clip, e_data.default_prepass_hair_fiber_clip_sh);
+		DRWShadingGroup *shgrp = DRW_shgroup_hair_fibers_create(scene, ob, hsys, scalp, draw_set, psl->depth_pass_clip, e_data.default_prepass_hair_fiber_clip_sh);
 		DRW_shgroup_uniform_block(shgrp, "clip_block", sldata->clip_ubo);
 	}
 	
@@ -1578,7 +1579,7 @@ static void material_hair(
 				{
 					shgrp = DRW_shgroup_material_hair_fibers_create(
 					        scene, ob, hsys, scalp,
-					        psl->material_pass,
+					        draw_set, psl->material_pass,
 					        gpumat);
 					add_standard_uniforms(shgrp, sldata, vedata, &ssr_id, NULL, false, false);
 					break;
@@ -1614,7 +1615,7 @@ static void material_hair(
 	/* Shadows */
 	DRW_shgroup_hair_fibers_create(
 	        scene, ob, hsys, scalp,
-	        psl->shadow_pass,
+	        draw_set, psl->shadow_pass,
 	        e_data.default_prepass_hair_fiber_sh);
 }
 
@@ -1822,7 +1823,7 @@ void EEVEE_hair_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata,
 					const int material_index = 1; /* TODO */
 					Material *material = give_current_material(ob, material_index);
 					
-					material_hair(vedata, sldata, ob, fmd->hair_system, material, ob->data);
+					material_hair(vedata, sldata, ob, fmd->hair_system, fmd->draw_settings, material, ob->data);
 				}
 			}
 		}
@@ -1833,7 +1834,7 @@ void EEVEE_hair_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata,
 		Material *material = give_current_material(ob, groom->material_index);
 		
 		struct Mesh *scalp = BKE_groom_get_scalp(draw_ctx->depsgraph, groom);
-		material_hair(vedata, sldata, ob, groom->hair_system, material, scalp);
+		material_hair(vedata, sldata, ob, groom->hair_system, groom->hair_draw_settings, material, scalp);
 	}
 }
 
diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c
index 196d4ee1a45..827787a26e9 100644
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@ -669,6 +669,7 @@ static void workbench_cache_populate_particles(WORKBENCH_Data *vedata, Object *o
 static void workbench_cache_populate_groom(WORKBENCH_Data *vedata, Object *ob)
 {
 	const Groom *groom = ob->data;
+	const struct HairDrawSettings *draw_set = groom->hair_draw_settings;
 	WORKBENCH_StorageList *stl = vedata->stl;
 	WORKBENCH_PassList *psl = vedata->psl;
 	WORKBENCH_PrivateData *wpd = stl->g_data;
@@ -695,7 +696,7 @@ static void workbench_cache_populate_groom(WORKBENCH_Data *vedata, Object *ob)
 
 	DRWShadingGroup *shgrp = DRW_shgroup_hair_fibers_create(
 	                             draw_ctx->scene, ob, groom->hair_system, scalp,
-	                             psl->prepass_hair_pass,
+	                             draw_set, psl->prepass_hair_pass,
 	                             shader);
 
 	DRW_shgroup_stencil_mask(shgrp, 0xFF);
diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c
index d45d0a3fbbe..c01ad9f6032 100644
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@ -530,6 +530,7 @@ static void workbench_forward_cache_populate_particles(WORKBENCH_Data *vedata, O
 static void workbench_forward_cache_populate_groom(WORKBENCH_Data *vedata, Object *ob)
 {
 	const Groom *groom = ob->data;
+	const struct HairDrawSettings *draw_set = groom->hair_draw_settings;
 	WORKBENCH_StorageList *stl = vedata->stl;
 	WORKBENCH_PassList *psl = vedata->psl;
 	WORKBENCH_PrivateData *wpd = stl->g_data;
@@ -557,7 +558,7 @@ static void workbench_forward_cache_populate_groom(WORKBENCH_Data *vedata, Objec
 
 	DRWShadingGroup *shgrp = DRW_shgroup_hair_fibers_create(
 	                             draw_ctx->scene, ob, groom->hair_system, scalp,
-	                             psl->transparent_accum_pass,
+	                             draw_set, psl->transparent_accum_pass,
 	                             shader);
 	workbench_material_set_normal_world_matrix(shgrp, wpd, e_data.normal_world_matrix);
 	DRW_shgroup_uniform_block(shgrp, "world_block", wpd->world_ubo);
@@ -570,13 +571,13 @@ static void workbench_forward_cache_populate_groom(WORKBENCH_Data *vedata, Objec
 #ifdef WORKBENCH_REVEALAGE_ENABLED
 	shgrp = DRW_shgroup_hair_fibers_create(
 	            draw_ctx->scene, ob, groom->hair_system, scalp,
-	            psl->transparent_revealage_pass,
+	            draw_set, psl->transparent_revealage_pass,
 	            e_data.transparent_revealage_hair_sh);
 	DRW_shgroup_uniform_float(shgrp, "alpha", &wpd->shading.xray_alpha, 1);
 #endif
 	shgrp = DRW_shgroup_hair_fibers_create(
 	            draw_ctx->scene, ob, groom->hair_system, scalp,
-	            vedata->psl->object_outline_pass,
+	            draw_set, vedata->psl->object_outline_pass,
 	            e_data.object_outline_hair_sh);
 	DRW_shgroup_uniform_int(shgrp, "object_id", &material->object_id, 1);
 }
diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h
index 858477c677f..d2e9c4d1537 100644
--- a/source/blender/draw/intern/draw_common.h
+++ b/source/blender/draw/intern/draw_common.h
@@ -201,6 +201,7 @@ struct DRWShadingGroup *DRW_shgroup_hair_fibers_create(
         struct Object *object,
         struct HairSystem *hsys,
         struct Mesh *scalp,
+        const struct HairDrawSettings *draw_set,
         struct DRWPass *hair_pass,
         struct GPUShader *shader);
 
@@ -209,6 +210,7 @@ struct DRWShadingGroup *DRW_shgroup_material_hair_fibers_create(
         struct Object *object,
         struct HairSystem *hsys,
         struct Mesh *scalp,
+        const struct HairDrawSettings *draw_set,
         struct DRWPass *hair_pass,
         struct GPUMaterial *material);
 
diff --git a/source/blender/draw/intern/draw_hair_fibers.c b/source/blender/draw/intern/draw_hair_fibers.c
index 290c478fc90..622a791ead9 100644
--- a/source/blender/draw/intern/draw_hair_fibers.c
+++ b/source/blender/draw/intern/draw_hair_fibers.c
@@ -49,7 +49,7 @@ const char* DRW_hair_shader_defines(void)
 
 static DRWShadingGroup *drw_shgroup_create_hair_fibers_ex(
         Scene *UNUSED(scene), Object *object, HairSystem *hsys, struct Mesh *scalp,
-        DRWPass *hair_pass,
+        const HairDrawSettings *draw_set, DRWPass *hair_pass,
         struct GPUMaterial *gpu_mat, GPUShader *gpu_shader)
 {
 	/* TODO */
@@ -85,6 +85,11 @@ static DRWShadingGroup *drw_shgroup_create_hair_fibers_ex(
 	DRW_shgroup_uniform_int(shgrp, "strand_vertex_start", &fiber_buffer->strand_vertex_start, 1);
 	DRW_shgroup_uniform_int(shgrp, "fiber_start", &fiber_buffer->fiber_start, 1);
 
+	DRW_shgroup_uniform_float(shgrp, "hairRadShape", &draw_set->shape, 1);
+	DRW_shgroup_uniform_float_copy(shgrp, "hairRadRoot", draw_set->root_radius * draw_set->radius_scale* 0.5f);
+	DRW_shgroup_uniform_float_copy(shgrp, "hairRadTip", draw_set->tip_radius * draw_set->radius_scale * 0.5f);
+	DRW_shgroup_uniform_bool_copy(shgrp, "hairCloseTip", (draw_set->shape_flag & HAIR_DRAW_CLOSE_TIP) != 0);
+
 	/* TODO(fclem): Until we have a better way to cull the hair and render with orco, bypass culling test. */
 	DRW_shgroup_call_object_add_no_cull(shgrp, hair_geom, object);
 
@@ -93,18 +98,18 @@ stat

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list