Commit: 9035aa9cee5d5296da8c519fc4a89940b722c140
Author: Luca Rood
Date:   Mon May 15 17:18:13 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB9035aa9cee5d5296da8c519fc4a89940b722c140

Use better prng algo and fix randomness UI

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

M       release/scripts/startup/bl_ui/properties_collection.py
M       release/scripts/startup/bl_ui/properties_render.py
M       source/blender/draw/engines/clay/clay_engine.c
M       source/blender/draw/engines/clay/shaders/particle_strand_frag.glsl
M       source/blender/draw/engines/clay/shaders/particle_vert.glsl
M       source/blender/makesrna/intern/rna_scene.c

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

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_

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