[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