[Bf-blender-cvs] [afbda949cf4] soc-2018-npr: Snake works. Added color options. Performance need optimization.

Nick Wu noreply at git.blender.org
Mon May 28 06:37:20 CEST 2018


Commit: afbda949cf4460590b9207e25ebdffbb496f224d
Author: Nick Wu
Date:   Mon May 28 12:36:29 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBafbda949cf4460590b9207e25ebdffbb496f224d

Snake works. Added color options. Performance need optimization.

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

M	release/scripts/startup/bl_ui/properties_scene.py
M	source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
M	source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.fragment
M	source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.geometry
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py
index 02b14dbfac1..f0ae8917900 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -457,12 +457,24 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
         lanpr = scene.lanpr
         layout.label(text="Global:")
         layout.prop(lanpr, "enable_post_processing")
+        layout.label(text="Enter 0.0001 to 0.002:")
         layout.prop(lanpr, "depth_clamp")
+        layout.label(text="Enter 500 to 1000:")
         layout.prop(lanpr, "depth_strength")
+        layout.label(text="Enter 2:")
         layout.prop(lanpr, "normal_clamp")
+        layout.label(text="Enter 10:")
         layout.prop(lanpr, "normal_strength")
+
+        split = layout.split()
+        col = split.column()
+        col.label(text="Background Color:")
+        col.prop(lanpr, "background_color")
+        col = split.column()
+        col.label(text="Line Color:")
+        col.prop(lanpr, "line_color")
         
-        layout.label(text="Taper Settings:")
+        layout.label(text="Thickness:")
         layout.prop(lanpr, "line_thickness")
         layout.label(text="Taper Settings:")
         layout.prop(lanpr, "use_same_taper")
diff --git a/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c b/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
index 98c41e9b63a..562636ed669 100644
--- a/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
+++ b/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
@@ -161,6 +161,7 @@ static void lanpr_engine_free(void){
 	MEM_freeN(stl->g_data->line_result_8bit);
 	MEM_freeN(stl->g_data->line_result);
 	MEM_freeN(stl->g_data);
+	stl->g_data=0;
 }
 
 static void lanpr_cache_init(void *vedata){
@@ -338,6 +339,7 @@ void lanpr_remove_sample(LANPR_PrivateData* pd, int Row, int Col) {
 	pd->sample_table[Row*pd->width + Col] = 0;
 	
 	BLI_remlink(&pd->pending_samples, ts);
+	ts->Item.prev=0;ts->Item.next=0;
 	BLI_addtail(&pd->erased_samples, ts);
 }
 
@@ -374,6 +376,8 @@ int lanpr_grow_snake_r(LANPR_PrivateData* pd, LANPR_LineStrip* ls, LANPR_LineStr
 			l = 0;
 		}
 	}
+	if(TX!=ThisP->P[0] || TY!=ThisP->P[1])
+		lanpr_append_point(pd, ls, TX, TY, 0);
 }
 
 int lanpr_grow_snake_l(LANPR_PrivateData* pd, LANPR_LineStrip* ls, LANPR_LineStripPoint* ThisP, int Direction) {
@@ -410,6 +414,8 @@ int lanpr_grow_snake_l(LANPR_PrivateData* pd, LANPR_LineStrip* ls, LANPR_LineStr
 			l = 0;
 		}
 	}
+	if(TX!=ThisP->P[0] || TY!=ThisP->P[1])
+		lanpr_push_point(pd, ls, TX, TY, 0);
 }
 
 int lanpr_reverse_direction(int From) {
@@ -531,6 +537,7 @@ static void lanpr_draw_scene(void *vedata)
 	
     stl->g_data->stage = 0;
     GPU_framebuffer_bind(fbl->edge_thinning);
+	clear_bits = GPU_COLOR_BIT;
 	GPU_framebuffer_clear(fbl->edge_thinning, clear_bits, clear_col, clear_depth, clear_stencil);
     DRW_draw_pass(psl->edge_thinning);
 
@@ -575,13 +582,15 @@ static void lanpr_draw_scene(void *vedata)
 	for (h = 0; h < texh; h++) {
 		for (w = 0; w < texw; w++) {
 			int index = h*texw + w;
-			if ((sample = stl->g_data->line_result[index]) > 0.99) {
+			if ((sample = stl->g_data->line_result[index]) > 0.9) {
 				stl->g_data->line_result_8bit[index] = 255;
 				LANPR_TextureSample* ts = BLI_mempool_calloc(stl->g_data->mp_sample);
 				BLI_addtail(&stl->g_data->pending_samples, ts);
 				stl->g_data->sample_table[index] = ts;
 				ts->X = w;
 				ts->Y = h;
+			}else{
+				stl->g_data->sample_table[index] = 0;
 			}
 		}
 	}
@@ -610,20 +619,28 @@ static void lanpr_draw_scene(void *vedata)
 	}
 
 	//GPU_framebuffer_bind()
+	GPU_framebuffer_clear(fbl->edge_intermediate, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
+
 
 	for (ls = (LANPR_LineStrip *)(stl->g_data->line_strips.first); ls; ls = (LANPR_LineStrip *)(ls->Item.next)) {
 		if (ls->point_count < 2) continue;
 
+		float* tld = &lanpr->taper_left_distance, *tls = &lanpr->taper_left_strength,
+			*trd = &lanpr->taper_right_distance, *trs = &lanpr->taper_right_strength;
+
 		Gwn_Batch* snake_batch = lanpr_get_snake_batch(stl->g_data,ls);
 
 		psl->snake_pass = DRW_pass_create("Snake Visualization Pass", DRW_STATE_WRITE_COLOR);
 		stl->g_data->snake_shgrp = DRW_shgroup_create(OneTime.snake_connection_shader, psl->snake_pass);
 		DRW_shgroup_uniform_float(stl->g_data->snake_shgrp, "LineWidth", &lanpr->line_thickness, 1);
 		DRW_shgroup_uniform_float(stl->g_data->snake_shgrp, "TotalLength", &ls->total_length, 1);
-		DRW_shgroup_uniform_float(stl->g_data->snake_shgrp, "TaperLDist", &lanpr->taper_left_distance, 1);
-		DRW_shgroup_uniform_float(stl->g_data->snake_shgrp, "TaperLStrength", &lanpr->taper_left_strength, 1);
-		DRW_shgroup_uniform_float(stl->g_data->snake_shgrp, "TaperRDist", &lanpr->taper_right_distance, 1);
-		DRW_shgroup_uniform_float(stl->g_data->snake_shgrp, "TaperRStrength", &lanpr->taper_right_strength, 1);
+		DRW_shgroup_uniform_float(stl->g_data->snake_shgrp, "TaperLDist", tld, 1);
+		DRW_shgroup_uniform_float(stl->g_data->snake_shgrp, "TaperLStrength", tls, 1);
+		DRW_shgroup_uniform_float(stl->g_data->snake_shgrp, "TaperRDist", lanpr->use_same_taper?tld:trd, 1);
+		DRW_shgroup_uniform_float(stl->g_data->snake_shgrp, "TaperRStrength", lanpr->use_same_taper?tls:trs, 1);
+		//lanpr->line_color[0] = lanpr->line_color[1] =lanpr->line_color[2] = lanpr->line_color[3] =1;
+		DRW_shgroup_uniform_vec4(stl->g_data->snake_shgrp, "LineColor", lanpr->line_color, 1);
+
 		DRW_shgroup_call_add(stl->g_data->snake_shgrp, snake_batch, NULL);
 		DRW_draw_pass(psl->snake_pass);
 	}
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.fragment b/source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.fragment
index 3230e40a36f..4b5319126b8 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.fragment
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.fragment
@@ -1,4 +1,5 @@
+uniform vec4 LineColor;
 
 void main(){
-    gl_FragColor = vec4(1,0,0,1);
+    gl_FragColor = LineColor;
 }
\ No newline at end of file
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.geometry b/source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.geometry
index fe8e6790c3c..cdc10c7c14e 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.geometry
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_line_connection.geometry
@@ -37,7 +37,7 @@ void main() {
 	float OffsetL = gOffset[1];
 	float OffsetR = gOffset[2];
 
-	//if(L==R) return;
+	if(L==R || L==LL || R == RR || LL==RR || L==RR || R==LL) return;
 
 	vec4 a;
 	vec4 b;
@@ -70,6 +70,9 @@ void main() {
 	//
 	//return;
 
+	float lim = LineWidth*0.002;
+
+
     if(LL == L){
 		a = L - LineWidth * Normal*0.001;
 		b = L + LineWidth * Normal*0.001;
@@ -79,6 +82,7 @@ void main() {
 	    float length = LineWidth/(dot(Minter,Normal))*0.001;
 	    a = L - length*Minter;
 	    b = L + length*Minter;
+		if(distance(a,b)>2*lim){ a =  L - lim*Minter; b=L+lim*Minter;}
 	}
 
 	if (R == RR){
@@ -90,8 +94,11 @@ void main() {
 	    float length = LineWidth/(dot(Minter,Normal))*0.001;
 	    c = R - length*Minter;
 	    d = R + length*Minter;
+		if(distance(c,d)>2*lim){ c =  R - lim*Minter; d=R+lim*Minter;}
 	}
 
+
+
 	a = MakeLeftTaperLinear(L,a,OffsetL);
 	b = MakeLeftTaperLinear(L,b,OffsetL);
 	c = MakeLeftTaperLinear(R,c,OffsetR);
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 9d6a5c30e6a..f57e8e91c8c 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1444,6 +1444,9 @@ typedef struct SceneLANPR{
 	float taper_right_distance;
 	float taper_right_strength;
 
+	float line_color[4];
+	float background_color[4];
+
 } SceneLANPR;
 
 /* *************************************************************** */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 702b0cbf10c..e79dc0b38f3 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -6195,7 +6195,7 @@ static void rna_def_scene_lanpr(BlenderRNA *brna)
 	prop = RNA_def_property(srna, "depth_strength", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_float_default(prop, 0.1f);
 	RNA_def_property_ui_text(prop, "Depth Strength", "Depth strength value for edge extraction");
-	RNA_def_property_ui_range(prop, 0.01f, 10.0f, 0.1, 2);
+	RNA_def_property_ui_range(prop, 0.01f, 30.0f, 0.1, 2);
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_update(prop, NC_SCENE, NULL);
 
@@ -6234,17 +6234,17 @@ static void rna_def_scene_lanpr(BlenderRNA *brna)
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_update(prop, NC_SCENE, NULL);
 
-	prop = RNA_def_property(srna, "taper_left_strength", PROP_FLOAT, PROP_NONE);
-	RNA_def_property_float_default(prop, 20.0f);
+	prop = RNA_def_property(srna, "taper_left_strength", PROP_FLOAT, PROP_FACTOR);
+	RNA_def_property_float_default(prop, 1.0f);
 	RNA_def_property_ui_text(prop, "Strength left", "Left side taper strength");
-	RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 2);
+	RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 2);
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_update(prop, NC_SCENE, NULL);
 
-	prop = RNA_def_property(srna, "taper_right_strength", PROP_FLOAT, PROP_NONE);
-	RNA_def_property_float_default(prop, 20.0f);
+	prop = RNA_def_property(srna, "taper_right_strength", PROP_FLOAT, PROP_FACTOR);
+	RNA_def_property_float_default(prop, 1.0f);
 	RNA_def_property_ui_text(prop, "Strength right", "Right side taper strength");
-	RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 2);
+	RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 2);
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_update(prop, NC_SCENE, NULL);
 
@@ -6255,6 +6255,22 @@ static void rna_def_scene_lanpr(BlenderRNA *brna)
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_update(prop, NC_SCENE, NULL);
 
+	prop = RNA_def_property(srna, "line_color", PROP_FLOAT, PROP_COLOR);
+	RNA_def_property_float_d

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list