[Bf-blender-cvs] [62e4fb91138] soc-2018-npr: Added DPIX crease fading.

Nick Wu noreply at git.blender.org
Thu Jun 14 05:58:03 CEST 2018


Commit: 62e4fb91138dc591886182b05ea01fca87b6eb5a
Author: Nick Wu
Date:   Thu Jun 14 11:57:27 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB62e4fb91138dc591886182b05ea01fca87b6eb5a

Added DPIX crease fading.

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

M	release/scripts/startup/bl_ui/properties_scene.py
M	source/blender/draw/engines/lanpr/lanpr_all.h
M	source/blender/draw/engines/lanpr/lanpr_engine.c
M	source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
M	source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment
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 28f7c4db9cf..80e3e837f20 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -487,7 +487,7 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
         scene = context.scene
         lanpr = scene.lanpr
 
-        layout.prop(lanpr, "master_mode")
+        layout.prop(lanpr, "master_mode", expand=True)
 
         if lanpr.master_mode == "DPIX":
             layout.label(text="DPIX:")
@@ -548,6 +548,7 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
                 row.label(text="INOP")
 
                 layout.prop(lanpr, "crease_threshold")
+                layout.prop(lanpr, "crease_fade_threshold")
 
                 split = layout.split()
                 col = split.column()
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 042abfa4008..64fc27b7407 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -47,7 +47,6 @@ typedef struct LANPROneTimeInit{
     
 } LANPROneTimeInit;
 
-
 #define TNS_DPIX_TEXTURE_SIZE 2048
 
 typedef struct LANPR_TextureSample {
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 7876c0c8bc6..5e0202468f1 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -255,6 +255,7 @@ static void lanpr_cache_init(void *vedata){
 		DRW_shgroup_uniform_vec4(stl->g_data->dpix_transform_shgrp, "viewport", stl->g_data->dpix_viewport, 1);
 		DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "buffer_width", &stl->g_data->dpix_buffer_width, 1);
 		DRW_shgroup_uniform_float(stl->g_data->dpix_transform_shgrp, "crease_threshold", &lanpr->crease_threshold, 1);
+		DRW_shgroup_uniform_float(stl->g_data->dpix_transform_shgrp, "crease_fade_threshold", &lanpr->crease_fade_threshold, 1);
 		DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "enable_crease", &lanpr->enable_crease, 1);
         DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "enable_material", &lanpr->enable_material_seperate, 1);
 		DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "enable_edge_mark", &lanpr->enable_edge_mark, 1);
@@ -415,7 +416,7 @@ RenderEngineType DRW_engine_viewport_lanpr_type = {
 	NULL, NULL,
 	LANPR_ENGINE, N_("LANPR"), RE_INTERNAL,
 	NULL,// update
-	NULL,// render to img
+	&DRW_render_to_image,// render to img
 	NULL,// bake
 	NULL,// view update
 	NULL,// render to view
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 68307c63596..6868336089e 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
@@ -51,13 +51,15 @@ vec4 apply_scale(vec4 center, vec4 a){
     return mix(a,center,depth_factor);
 }
 
-void emit_alpha_pre_mul(vec4 a){
+void emit_alpha_pre_mul(vec4 a, int is_crease, float crease_fading){
 	float lz = get_linear_depth(a.z);
 	float alpha_factor = mix(0,curve_01(lz,depth_alpha_curve),depth_alpha_influence);
-	out_color = mix(use_color,background_color,alpha_factor);
+	float alpha_crease_fading = alpha_factor;
+	if(is_crease>0) alpha_crease_fading = mix(alpha_factor,1,crease_fading*2); // fading=0.5 -> fade all
+	out_color = mix(use_color,background_color,alpha_crease_fading);
 }
 
-void draw_line(vec4 p1, vec4 p2){
+void draw_line(vec4 p1, vec4 p2,int is_crease){
 
     vec4 Line = p2-p1;
 	vec4 Normal = normalize(vec4(-Line.y,Line.x,0,0));
@@ -75,13 +77,13 @@ void draw_line(vec4 p1, vec4 p2){
 	c = apply_scale(p2,c);
 	d = apply_scale(p2,d);
 
-	gl_Position = vec4(a.xy,a.z-depth_offset,1); emit_alpha_pre_mul(a); EmitVertex();
-	gl_Position = vec4(b.xy,b.z-depth_offset,1); emit_alpha_pre_mul(b); EmitVertex();
-    gl_Position = vec4(c.xy,c.z-depth_offset,1); emit_alpha_pre_mul(c); EmitVertex();
+	gl_Position = vec4(a.xy,a.z-depth_offset,1); emit_alpha_pre_mul(a, is_crease, p2.w); EmitVertex();
+	gl_Position = vec4(b.xy,b.z-depth_offset,1); emit_alpha_pre_mul(b, is_crease, p2.w); EmitVertex();
+    gl_Position = vec4(c.xy,c.z-depth_offset,1); emit_alpha_pre_mul(c, is_crease, p2.w); EmitVertex();
 
-	gl_Position = vec4(b.xy,b.z-depth_offset,1); emit_alpha_pre_mul(b); EmitVertex();
-    gl_Position = vec4(c.xy,c.z-depth_offset,1); emit_alpha_pre_mul(c); EmitVertex();
-	gl_Position = vec4(d.xy,d.z-depth_offset,1); emit_alpha_pre_mul(d); EmitVertex();
+	gl_Position = vec4(b.xy,b.z-depth_offset,1); emit_alpha_pre_mul(b, is_crease, p2.w); EmitVertex();
+    gl_Position = vec4(c.xy,c.z-depth_offset,1); emit_alpha_pre_mul(c, is_crease, p2.w); EmitVertex();
+	gl_Position = vec4(d.xy,d.z-depth_offset,1); emit_alpha_pre_mul(d, is_crease, p2.w); EmitVertex();
 
     EndPrimitive();
 }
@@ -94,9 +96,11 @@ void main() {
 
 	vec4 edge_mask = texelFetch(edge_mask_tex, ivec2(gl_in[0].gl_Position.xy), 0);
 
+	int is_crease=0;
+
 	if(edge_mask.g>0)      { use_color = edge_mark_color; use_thickness = line_thickness*line_thickness_edge_mark; }
 	else if(edge_mask.r>0) { use_color = material_color;  use_thickness = line_thickness*line_thickness_material;  }
-    else if(p1.w!=p2.w)    { use_color = crease_color;    use_thickness = line_thickness*line_thickness_crease;    }
+    else if(p1.w!=p2.w)    { use_color = crease_color;    use_thickness = line_thickness*line_thickness_crease; is_crease=1; }
 
-	draw_line(p1,p2);
+	draw_line(p1,p2,is_crease);
 }
\ No newline at end of file
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment
index c8f127304f1..41c7a1eabff 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment
@@ -10,6 +10,7 @@ uniform int enable_material;
 uniform int enable_edge_mark;
 
 uniform float crease_threshold;
+uniform float crease_fade_threshold;
 
 uniform int is_perspective; // persp and orth use different crease line determin method
 
@@ -35,6 +36,8 @@ vec3 view_dir;
 int is_crease; // we calculate crease in GPU because it's faster and we have normal data anyway.
                // and we need to indicate crease test success result using p1.w==1 && p2.w==0
 
+float crease_strength;
+
 // these are for adapting argument names...
 #define modelview (ViewMatrix*ModelMatrix)
 #define projection ProjectionMatrix
@@ -351,7 +354,11 @@ bool testProfileEdge( ivec2 texcoord, vec3 world_position )
 	float dot2 = dot(vec3(face_normal_0.xyz), vec3(face_normal_1.xyz));
 
     bool contour = (dot0 >= 0.0 && dot1 <= 0.0) || (dot0 <= 0.0 && dot1 >= 0.0);
-    is_crease = ((!contour)&&(dot2<crease_threshold))?1:0;
+    is_crease = ((!contour)&&((dot2<crease_threshold)||(dot2<crease_fade_threshold)))?1:0;
+
+    crease_strength = (is_crease>0&&dot2>crease_threshold) ?
+                      ((dot2 - crease_threshold) / (crease_fade_threshold - crease_threshold) / 2) : 0;
+                      // use 0 to 0.5 to repesent the range, because 1 will represent another meaning
 
     return contour ||
            ((enable_crease>0) && (is_crease>0)) ||
@@ -496,7 +503,7 @@ void main(){
 
 
     gl_FragData[0] = vec4(v0_clipped_pre_div.xyz,1);//v0_clipped_pre_div;
-    gl_FragData[1] = vec4(v1_clipped_pre_div.xyz,is_crease>0?0:1);//v1_clipped_pre_div;
+    gl_FragData[1] = vec4(v1_clipped_pre_div.xyz,is_crease>0?crease_strength:1);//v1_clipped_pre_div;
     //gl_FragData[2] = packOffsetTexel(num_samples, segment_screen_length,
 	                                 //num_samples, segment_screen_length);
                                      //num_samples + total_padding, segment_screen_length);
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index a911b23b6d4..8f7dd84790c 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1464,7 +1464,9 @@ typedef struct SceneLANPR{
 
 	/* shared */
 
-	float crease_threshold; /* 0-1 range for cosine angle */
+    float contour_fade;          /* for dpix contour fading,reserved for future usage */
+	float crease_threshold;      /* 0-1 range for cosine angle */
+	float crease_fade_threshold; /* for dpix crease fading */
 
 	float line_color[4];
 	float background_color[4];
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 1f3825674d3..fb24fcabcd7 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -6308,6 +6308,14 @@ 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, "crease_fade_threshold", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_default(prop, 0.5f);
+	RNA_def_property_ui_text(prop, "Crease Fade", "cosine value of face angle");
+	RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.01, 2);
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_update(prop, NC_SCENE, NULL);
+
+
 	/* these shall go into LANPR_LineStyle layer */
 
 	prop = RNA_def_property(srna, "enable_crease", PROP_BOOLEAN, PROP_NONE);



More information about the Bf-blender-cvs mailing list