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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to