[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