Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Rood <dev@lucarood.com>2017-05-15 18:18:13 +0300
committerLuca Rood <dev@lucarood.com>2017-05-15 18:27:15 +0300
commit9035aa9cee5d5296da8c519fc4a89940b722c140 (patch)
tree54724438ba991d14250d092ddb1c0ca574a0e069
parent392b5b82122e8c0fe19a8552dfa3934574506274 (diff)
Use better prng algo and fix randomness UI
-rw-r--r--release/scripts/startup/bl_ui/properties_collection.py2
-rw-r--r--release/scripts/startup/bl_ui/properties_render.py2
-rw-r--r--source/blender/draw/engines/clay/clay_engine.c22
-rw-r--r--source/blender/draw/engines/clay/shaders/particle_strand_frag.glsl4
-rw-r--r--source/blender/draw/engines/clay/shaders/particle_vert.glsl22
-rw-r--r--source/blender/makesrna/intern/rna_scene.c8
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");