diff options
6 files changed, 30 insertions, 30 deletions
diff --git a/release/scripts/startup/bl_ui/properties_collection.py b/release/scripts/startup/bl_ui/properties_collection.py index 6a8a7d188c2..9e7d29358a9 100644 --- a/release/scripts/startup/bl_ui/properties_collection.py +++ b/release/scripts/startup/bl_ui/properties_collection.py @@ -68,7 +68,7 @@ class COLLECTION_PT_clay_settings(CollectionButtonsPanel, Panel): col.template_override_property(collection_props, scene_props, "ssao_factor_edge") col.template_override_property(collection_props, scene_props, "ssao_distance") col.template_override_property(collection_props, scene_props, "ssao_attenuation") - col.template_override_property(collection_props, scene_props, "color_randomicity") + col.template_override_property(collection_props, scene_props, "hair_brightness_randomness") class COLLECTION_PT_object_mode_settings(CollectionButtonsPanel, Panel): diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py index 1bda0e65a98..ad210498126 100644 --- a/release/scripts/startup/bl_ui/properties_render.py +++ b/release/scripts/startup/bl_ui/properties_render.py @@ -614,7 +614,7 @@ class RENDER_PT_clay_collection_settings(RenderButtonsPanel, Panel): col.prop(props, "ssao_factor_edge") col.prop(props, "ssao_distance") col.prop(props, "ssao_attenuation") - col.prop(props, "color_randomicity") + col.prop(props, "hair_brightness_randomness") class RENDER_PT_eevee_poststack_settings(RenderButtonsPanel, Panel): bl_label = "Post Process Stack" diff --git a/source/blender/draw/engines/clay/clay_engine.c b/source/blender/draw/engines/clay/clay_engine.c index 7927b3df390..20116f909cc 100644 --- a/source/blender/draw/engines/clay/clay_engine.c +++ b/source/blender/draw/engines/clay/clay_engine.c @@ -65,7 +65,7 @@ typedef struct CLAY_UBO_Material { BLI_STATIC_ASSERT_ALIGN(CLAY_UBO_Material, 16); typedef struct CLAY_HAIR_UBO_Material { - float hair_randomicity; + float hair_randomness; float matcap_id; float matcap_rot[2]; float matcap_hsv[3]; @@ -508,7 +508,7 @@ static int search_mat_to_ubo( } static int search_hair_mat_to_ubo(CLAY_Storage *storage, float matcap_rot, float matcap_hue, float matcap_sat, - float matcap_val, float hair_randomicity, int matcap_icon) + float matcap_val, float hair_randomness, int matcap_icon) { /* For now just use a linear search and test all parameters */ /* TODO make a hash table */ @@ -519,7 +519,7 @@ static int search_hair_mat_to_ubo(CLAY_Storage *storage, float matcap_rot, float (ubo->matcap_hsv[0] == matcap_hue + 0.5f) && (ubo->matcap_hsv[1] == matcap_sat * 2.0f) && (ubo->matcap_hsv[2] == matcap_val * 2.0f) && - (ubo->hair_randomicity == hair_randomicity) && + (ubo->hair_randomness == hair_randomness) && (ubo->matcap_id == matcap_to_index(matcap_icon))) { return i; @@ -557,7 +557,7 @@ static int push_mat_to_ubo(CLAY_Storage *storage, float matcap_rot, float matcap } static int push_hair_mat_to_ubo(CLAY_Storage *storage, float matcap_rot, float matcap_hue, float matcap_sat, - float matcap_val, float hair_randomicity, int matcap_icon) + float matcap_val, float hair_randomness, int matcap_icon) { int id = storage->hair_ubo_current_id; CLAY_HAIR_UBO_Material *ubo = &storage->hair_mat_storage.materials[id]; @@ -569,7 +569,7 @@ static int push_hair_mat_to_ubo(CLAY_Storage *storage, float matcap_rot, float m ubo->matcap_hsv[1] = matcap_sat * 2.0f; ubo->matcap_hsv[2] = matcap_val * 2.0f; - ubo->hair_randomicity = hair_randomicity; + ubo->hair_randomness = hair_randomness; ubo->matcap_id = matcap_to_index(matcap_icon); @@ -598,16 +598,16 @@ static int mat_in_ubo(CLAY_Storage *storage, float matcap_rot, float matcap_hue, } static int hair_mat_in_ubo(CLAY_Storage *storage, float matcap_rot, float matcap_hue, float matcap_sat, - float matcap_val, float hair_randomicity, int matcap_icon) + float matcap_val, float hair_randomness, int matcap_icon) { /* Search material in UBO */ int id = search_hair_mat_to_ubo(storage, matcap_rot, matcap_hue, matcap_sat, - matcap_val, hair_randomicity, matcap_icon); + matcap_val, hair_randomness, matcap_icon); /* if not found create it */ if (id == -1) { id = push_hair_mat_to_ubo(storage, matcap_rot, matcap_hue, matcap_sat, - matcap_val, hair_randomicity, matcap_icon); + matcap_val, hair_randomness, matcap_icon); } return id; @@ -654,11 +654,11 @@ static DRWShadingGroup *CLAY_hair_shgrp_get(Object *ob, CLAY_StorageList *stl, C float matcap_hue = BKE_collection_engine_property_value_get_float(props, "matcap_hue"); float matcap_sat = BKE_collection_engine_property_value_get_float(props, "matcap_saturation"); float matcap_val = BKE_collection_engine_property_value_get_float(props, "matcap_value"); - float hair_randomicity = BKE_collection_engine_property_value_get_float(props, "color_randomicity"); + float hair_randomness = BKE_collection_engine_property_value_get_float(props, "hair_brightness_randomness"); int matcap_icon = BKE_collection_engine_property_value_get_int(props, "matcap_icon"); int hair_id = hair_mat_in_ubo(stl->storage, matcap_rot, matcap_hue, matcap_sat, - matcap_val, hair_randomicity, matcap_icon); + matcap_val, hair_randomness, matcap_icon); if (hair_shgrps[hair_id] == NULL) { hair_shgrps[hair_id] = CLAY_hair_shgroup_create(psl->hair_pass, &e_data.hair_ubo_mat_idxs[hair_id]); @@ -818,7 +818,7 @@ static void CLAY_layer_collection_settings_create(RenderEngine *UNUSED(engine), BKE_collection_engine_property_add_float(props, "ssao_distance", 0.2f); BKE_collection_engine_property_add_float(props, "ssao_attenuation", 1.0f); BKE_collection_engine_property_add_float(props, "ssao_factor_cavity", 1.0f); - BKE_collection_engine_property_add_float(props, "color_randomicity", 0.0f); + BKE_collection_engine_property_add_float(props, "hair_brightness_randomness", 0.0f); } static void CLAY_scene_layer_settings_create(RenderEngine *UNUSED(engine), IDProperty *props) diff --git a/source/blender/draw/engines/clay/shaders/particle_strand_frag.glsl b/source/blender/draw/engines/clay/shaders/particle_strand_frag.glsl index 2e69890a32d..c18a175af96 100644 --- a/source/blender/draw/engines/clay/shaders/particle_strand_frag.glsl +++ b/source/blender/draw/engines/clay/shaders/particle_strand_frag.glsl @@ -12,7 +12,7 @@ layout(std140) uniform material_block { uniform sampler2DArray matcaps; uniform int mat_id; -#define randomicity shader_param[mat_id].one.x +#define randomness shader_param[mat_id].one.x #define matcap_index shader_param[mat_id].one.y #define matcap_rotation shader_param[mat_id].one.zw #define matcap_hsv shader_param[mat_id].two.xyz @@ -136,7 +136,7 @@ void main() float maxChan = max(max(col.r, col.g), col.b); - col += (colRand * maxChan * randomicity * 2.0) - (maxChan * randomicity); + col += (colRand * maxChan * randomness * 1.5) - (maxChan * randomness * 0.75); fragColor.rgb = col; fragColor.a = 1.0; diff --git a/source/blender/draw/engines/clay/shaders/particle_vert.glsl b/source/blender/draw/engines/clay/shaders/particle_vert.glsl index ab47caabc11..b28b3cadd6f 100644 --- a/source/blender/draw/engines/clay/shaders/particle_vert.glsl +++ b/source/blender/draw/engines/clay/shaders/particle_vert.glsl @@ -10,19 +10,19 @@ out vec3 tangent; out vec3 viewPosition; flat out float colRand; -/* TODO: This function yields great distribution, but might be a bit inefficient because of the 4 trig ops. - * Something more efficient would be nice */ -float rand(int seed) +float rand(int s) { - vec4 nums = vec4(0.0); - nums.x = mod(tan(mod(float(seed + 1) * 238965.0, 342.0)), 1.0) + 0.01; - nums.y = mod(tan(mod(float(seed + 1) * 34435643.0, 756.0)), 1.0) + 0.01; - nums.z = mod(tan(mod(float(seed + 1) * 4356757.0, 456.0)), 1.0) + 0.01; - nums.w = mod(tan(mod(float(seed + 1) * 778679.0, 987.0)), 1.0) + 0.01; + int seed = s * 1023423; - float num = mod((nums.x / nums.y) + 1 - (nums.z / nums.w), 1.0); - num += 0.5; - return mod(num, 1.0); + seed = (seed ^ 61) ^ (seed >> 16); + seed *= 9; + seed = seed ^ (seed >> 4); + seed *= 0x27d4eb2d; + seed = seed ^ (seed >> 15); + + float value = float(seed); + value *= 1.0 / 42596.0; + return fract(value); } void main() diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 8dedcfeb462..930441dcd5c 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -2578,7 +2578,7 @@ RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(ssao_factor_cavity) RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(ssao_factor_edge) RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(ssao_distance) RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(ssao_attenuation) -RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(color_randomicity) +RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(hair_brightness_randomness) #endif /* WITH_CLAY_ENGINE */ /* eevee engine */ @@ -6378,9 +6378,9 @@ static void rna_def_layer_collection_engine_settings_clay(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_LayerCollectionEngineSettings_update"); - prop = RNA_def_property(srna, "color_randomicity", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_color_randomicity_get", "rna_LayerEngineSettings_Clay_color_randomicity_set", NULL); - RNA_def_property_ui_text(prop, "Hair Brightness Randomicity", "Brightness randomicity for hair"); + prop = RNA_def_property(srna, "hair_brightness_randomness", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_funcs(prop, "rna_LayerEngineSettings_Clay_hair_brightness_randomness_get", "rna_LayerEngineSettings_Clay_hair_brightness_randomness_set", NULL); + RNA_def_property_ui_text(prop, "Hair Brightness Randomness", "Brightness randomness for hair"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE); RNA_def_property_update(prop, NC_SCENE | ND_LAYER_CONTENT, "rna_LayerCollectionEngineSettings_update"); |