[Bf-blender-cvs] [4a63d0c9f09] soc-2018-npr: added depth-alpha line style control (pre multiply)

Nick Wu noreply at git.blender.org
Mon Jun 11 09:03:05 CEST 2018


Commit: 4a63d0c9f09f0b89fca3ad65691a56e9f9625fe3
Author: Nick Wu
Date:   Mon Jun 11 15:02:27 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB4a63d0c9f09f0b89fca3ad65691a56e9f9625fe3

added depth-alpha line style control (pre multiply)

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

M	release/scripts/startup/bl_ui/properties_scene.py
M	source/blender/draw/engines/lanpr/lanpr_dpix.c
M	source/blender/draw/engines/lanpr/lanpr_engine.c
M	source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.fragment
M	source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.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 88e44b95bed..027a7f0c8c9 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -504,9 +504,11 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
             layout.prop(lanpr, "line_thickness")
             split = layout.split()
             col = split.column()
-            col.prop(lanpr, "depth_influence")
+            col.prop(lanpr, "depth_width_influence")
+            col.prop(lanpr, "depth_alpha_influence")
             col = split.column()
-            col.prop(lanpr, "depth_curve")
+            col.prop(lanpr, "depth_width_curve")
+            col.prop(lanpr, "depth_alpha_curve")
             
         else:
             layout.label(text="Snake:")
@@ -535,10 +537,12 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
 
                 split = layout.split()
                 col = split.column()
-                col.prop(lanpr, "depth_influence")
+                col.prop(lanpr, "depth_width_influence")
+                col.prop(lanpr, "depth_alpha_influence")
                 col = split.column()
-                col.prop(lanpr, "depth_curve")
-
+                col.prop(lanpr, "depth_width_curve")
+                col.prop(lanpr, "depth_alpha_curve")
+                
                 layout.prop(lanpr, "use_same_taper")
 
                 if lanpr.use_same_taper == "DISABLED":
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 791a8296815..09cceec55a6 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -281,14 +281,11 @@ void lanpr_dpix_draw_scene(LANPR_TextureList* txl, LANPR_FramebufferList * fbl,
         glPointSize(1);
 		glLineWidth(2);
 		GPU_framebuffer_bind(fbl->dpix_transform);
-		//GPU_disable_program_point_size();
 		DRW_draw_pass(psl->dpix_transform_pass);
 
 		//GPU_framebuffer_bind(fbl->edge_intermediate);
 		//DRW_draw_pass(psl->color_pass);// use depth
 
-		//glEnable(GL_POLYGON_SMOOTH);
-        //glHint(GL_POLYGON_SMOOTH, GL_NICEST);
 	    //glEnable(GL_BLEND);
         //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
@@ -297,10 +294,8 @@ void lanpr_dpix_draw_scene(LANPR_TextureList* txl, LANPR_FramebufferList * fbl,
 		GPU_framebuffer_clear(fbl->dpix_preview, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
 		DRW_draw_pass(psl->dpix_preview_pass);
 
-		//glDisable(GL_POLYGON_SMOOTH);
 		//glDisable(GL_BLEND);
 
 		GPU_framebuffer_bind(dfbl->default_fb);
-		//DRW_transform_to_display(txl->dpix_out_pl);
 		DRW_transform_to_display(txl->color);
 }
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 8d7045494f3..3e8b76963a2 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -77,7 +77,7 @@ static void lanpr_engine_init(void *ved){
 		lanpr->background_color[2] = 0.51;
 		lanpr->background_color[3] = 1;
 
-		lanpr->depth_influence = 0.3;
+		//lanpr->depth_influence = 0.3;
 
 		lanpr->reloaded = 1;
 
@@ -262,9 +262,13 @@ static void lanpr_cache_init(void *vedata){
 		DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_preview_shgrp, "vert1_tex", &txl->dpix_out_pr);
 		DRW_shgroup_uniform_vec4(stl->g_data->dpix_preview_shgrp, "viewport", stl->g_data->dpix_viewport, 1);
 		DRW_shgroup_uniform_vec4(stl->g_data->dpix_preview_shgrp, "color", lanpr->line_color, 1);
+		DRW_shgroup_uniform_vec4(stl->g_data->dpix_preview_shgrp, "background_color", lanpr->background_color, 1);
+		DRW_shgroup_uniform_vec4(stl->g_data->dpix_preview_shgrp, "background_color", lanpr->line_color, 1);
 		DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "depth_offset", &stl->g_data->dpix_depth_offset, 1);
-		DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "depth_influence", &lanpr->depth_influence, 1);
-		DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "depth_curve", &lanpr->depth_curve, 1);
+		DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "depth_width_influence", &lanpr->depth_width_influence, 1);
+		DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "depth_width_curve", &lanpr->depth_width_curve, 1);
+		DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "depth_alpha_influence", &lanpr->depth_alpha_influence, 1);
+		DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "depth_alpha_curve", &lanpr->depth_alpha_curve, 1);
 		DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "line_thickness", &lanpr->line_thickness, 1);
 		DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "zNear", &stl->g_data->dpix_znear, 1);
 		DRW_shgroup_uniform_float(stl->g_data->dpix_preview_shgrp, "zFar", &stl->g_data->dpix_zfar, 1);
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.fragment b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.fragment
index 80bb20fe11e..881801b4397 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.fragment
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.fragment
@@ -1,5 +1,5 @@
-uniform vec4 color;
+in vec4 out_color;
 
 void main(){
-    gl_FragData[0] = color;
+    gl_FragData[0] = vec4(out_color.rgb,1);
 }
\ No newline at end of file
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
index 70714c44fa9..760294e00a7 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
@@ -9,23 +9,37 @@ uniform float depth_offset;
 
 // these are for depth related thickness control;
 uniform float line_thickness;
-uniform float depth_influence;
-uniform float depth_curve;
+uniform float depth_width_influence;
+uniform float depth_width_curve;
+uniform float depth_alpha_influence;
+uniform float depth_alpha_curve;
 uniform float zNear;
 uniform float zFar;
 
+uniform vec4 color;
+uniform vec4 background_color;
+out vec4 out_color;
+
 float get_linear_depth(float z){
 	float ze = 2.0 * zNear * zFar / (zFar + zNear - z * (zFar - zNear));
 	return (ze-zNear)/(zFar-zNear);
 }
 
-float exp_depth(float z,float factor){
+float curve_01(float z,float factor){
 	return pow(z,1-factor); // factor is -inf~1-eps
 }
 
-vec4 apply_depth_scale(vec4 center, vec4 a){
-	float depth_factor = mix(0,exp_depth(get_linear_depth(center.z),depth_curve),depth_influence);
-    return  mix(a,center,depth_factor);
+vec4 apply_scale(vec4 center, vec4 a){
+	float lz = get_linear_depth(center.z);
+	float depth_factor = mix(0,curve_01(lz,depth_width_curve),depth_width_influence);
+
+    return mix(a,center,depth_factor);
+}
+
+void emit_alpha_pre_mul(vec4 a){
+	float lz = get_linear_depth(a.z);
+	float alpha_factor = mix(0,curve_01(lz,depth_alpha_curve),depth_alpha_influence);
+	out_color = mix(color,background_color,alpha_factor);
 }
 
 void draw_line(vec4 p1, vec4 p2){
@@ -41,18 +55,18 @@ void draw_line(vec4 p1, vec4 p2){
 	c = p2 + offset;
     d = p2 - offset;
 
-	a = apply_depth_scale(p1,a);
-	b = apply_depth_scale(p1,b);
-	c = apply_depth_scale(p2,c);
-	d = apply_depth_scale(p2,d);
+	a = apply_scale(p1,a);
+	b = apply_scale(p1,b);
+	c = apply_scale(p2,c);
+	d = apply_scale(p2,d);
 
-	gl_Position = vec4(a.xy,a.z-depth_offset,a.w); EmitVertex();
-	gl_Position = vec4(b.xy,b.z-depth_offset,b.w); EmitVertex();
-    gl_Position = vec4(c.xy,c.z-depth_offset,c.w); EmitVertex();
+	gl_Position = vec4(a.xy,a.z-depth_offset,a.w); emit_alpha_pre_mul(a); EmitVertex();
+	gl_Position = vec4(b.xy,b.z-depth_offset,b.w); emit_alpha_pre_mul(b); EmitVertex();
+    gl_Position = vec4(c.xy,c.z-depth_offset,c.w); emit_alpha_pre_mul(c); EmitVertex();
 
-	gl_Position = vec4(b.xy,b.z-depth_offset,b.w); EmitVertex();
-    gl_Position = vec4(c.xy,c.z-depth_offset,c.w); EmitVertex();
-	gl_Position = vec4(d.xy,d.z-depth_offset,d.w); EmitVertex();
+	gl_Position = vec4(b.xy,b.z-depth_offset,b.w); emit_alpha_pre_mul(b); EmitVertex();
+    gl_Position = vec4(c.xy,c.z-depth_offset,c.w); emit_alpha_pre_mul(c); EmitVertex();
+	gl_Position = vec4(d.xy,d.z-depth_offset,d.w); emit_alpha_pre_mul(d); EmitVertex();
 
     EndPrimitive();
 }
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 9dbad729d72..2649906370e 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1472,8 +1472,8 @@ typedef struct SceneLANPR{
 
 	float depth_width_influence;
 	float depth_width_curve;
-	//float depth_alpha_influence;
-	//float depth_alpha_curve;
+	float depth_alpha_influence;
+	float depth_alpha_curve;
 	//int   still_some_size_compensation;
 
 	/* states (needs optimization) */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index a7acf985a4c..4be1025ff86 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -6281,16 +6281,30 @@ 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, "depth_influence", PROP_FLOAT, PROP_PERCENTAGE);
+	prop = RNA_def_property(srna, "depth_width_influence", PROP_FLOAT, PROP_PERCENTAGE);
 	RNA_def_property_float_default(prop, 0.3f);
-	RNA_def_property_ui_text(prop, "Depth Influence", "Use camera distance to control line width.");
+	RNA_def_property_ui_text(prop, "Width Influence", "Use camera distance to control line width.");
 	RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 2);
 	RNA_def_property_flag(prop, PROP_EDITABLE);
 	RNA_def_property_update(prop, NC_SCENE, NULL);
 
-	prop = RNA_def_property(srna, "depth_curve", PROP_FLOAT, PROP_NONE);
+	prop = RNA_def_property(srna, "depth_width_curve", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_float_default(prop, 0.3f);
-	RNA_def_property_ui_text(prop, "Depth Curve", "De

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list