[Bf-blender-cvs] [9035aa9cee5] blender2.8: Use better prng algo and fix randomness UI

Luca Rood noreply at git.blender.org
Mon May 15 17:31:05 CEST 2017


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




More information about the Bf-blender-cvs mailing list