[Bf-blender-cvs] [9bc49a7c882] soc-2018-npr: Seperate color demonstration.

Nick Wu noreply at git.blender.org
Wed Jun 13 15:19:42 CEST 2018


Commit: 9bc49a7c8820e23c42838e3e01b1f865aa480572
Author: Nick Wu
Date:   Wed Jun 13 20:39:03 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB9bc49a7c8820e23c42838e3e01b1f865aa480572

Seperate color demonstration.

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

M	release/scripts/startup/bl_ui/properties_scene.py
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 bd12e26b4c9..69adf75daa3 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -512,7 +512,11 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
                 row.prop(lanpr, "enable_material_seperate", text="Material", toggle=True)
                 row.prop(lanpr, "enable_intersection", text="Intersection", toggle=True)
 
-                layout.label(text="ONLY Crease and Material effective")
+                row = col.row(align=True)
+                row.prop(lanpr, "crease_color", text="")
+                row.prop(lanpr, "edge_mark_color", text="")
+                row.prop(lanpr, "material_color", text="")
+                row.label(text="INOP")
 
                 layout.prop(lanpr, "crease_threshold")
 
@@ -542,8 +546,6 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
             row.prop(lanpr, "enable_edge_mark", text="Mark", toggle=True)
             row.prop(lanpr, "enable_material_seperate", text="Material", toggle=True)
 
-            layout.label(text="ONLY Crease and Material effective")
-
             if lanpr.enable_vector_trace == "ENABLED":
 
                 split = layout.split()
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 66619067d9b..3fe38c74b0d 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -263,8 +263,12 @@ static void lanpr_cache_init(void *vedata){
 		stl->g_data->dpix_preview_shgrp = DRW_shgroup_create(OneTime.dpix_preview_shader, psl->dpix_preview_pass);
 		DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_preview_shgrp, "vert0_tex", &txl->dpix_out_pl);
 		DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_preview_shgrp, "vert1_tex", &txl->dpix_out_pr);
+		DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_preview_shgrp, "edge_mask_tex", &txl->dpix_in_edge_mask);
 		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, "crease_color", lanpr->crease_color, 1);
+		DRW_shgroup_uniform_vec4(stl->g_data->dpix_preview_shgrp, "material_color", lanpr->material_color, 1);
+		DRW_shgroup_uniform_vec4(stl->g_data->dpix_preview_shgrp, "edge_mark_color", lanpr->edge_mark_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);
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 760294e00a7..86ff277cae7 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
@@ -3,6 +3,8 @@ layout (triangle_strip, max_vertices = 6) out;
 
 uniform sampler2D vert0_tex;//L
 uniform sampler2D vert1_tex;//R
+uniform sampler2D edge_mask_tex;
+
 //uniform float uValue0; // buffer_w
 uniform vec4 viewport; // viewport
 uniform float depth_offset;
@@ -18,8 +20,15 @@ uniform float zFar;
 
 uniform vec4 color;
 uniform vec4 background_color;
+
+uniform vec4 crease_color;
+uniform vec4 material_color;
+uniform vec4 edge_mark_color;
+
 out vec4 out_color;
 
+vec4 use_color;
+
 float get_linear_depth(float z){
 	float ze = 2.0 * zNear * zFar / (zFar + zNear - z * (zFar - zNear));
 	return (ze-zNear)/(zFar-zNear);
@@ -39,7 +48,7 @@ vec4 apply_scale(vec4 center, vec4 a){
 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);
+	out_color = mix(use_color,background_color,alpha_factor);
 }
 
 void draw_line(vec4 p1, vec4 p2){
@@ -60,13 +69,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,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(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(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();
+	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();
 
     EndPrimitive();
 }
@@ -74,6 +83,15 @@ void draw_line(vec4 p1, vec4 p2){
 void main() {
 	vec4 p1 = texelFetch(vert0_tex, ivec2(gl_in[0].gl_Position.xy), 0);
 	vec4 p2 = texelFetch(vert1_tex, ivec2(gl_in[0].gl_Position.xy), 0);
-    
+
+	if(p1.w==0 && p2.w==0) return;
+
+	vec4 edge_mask = texelFetch(edge_mask_tex, ivec2(gl_in[0].gl_Position.xy), 0);
+
+	if(edge_mask.g>0) use_color = edge_mark_color;
+	else if(edge_mask.r>0) use_color = material_color;
+    else if(p1.w!=p2.w) use_color = crease_color;
+	else use_color = color;
+
 	draw_line(p1,p2);
 }
\ 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 314a3bda6b5..b397c30e631 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
@@ -5,8 +5,8 @@ uniform mat4 ProjectionMatrix;
 uniform mat4 ProjectionMatrixInverse;
 
 
-uniform int enable_crease;    // we have all edge mask data in textures, so this is just a switch.
-uniform int enable_material;  // so this prevents scene reload.
+uniform int enable_crease;
+uniform int enable_material;
 uniform int enable_edge_mark;
 
 uniform float crease_threshold;
@@ -32,6 +32,9 @@ uniform sampler2D edge_mask_tex;
 vec3 view_pos;
 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
+
 // these are for adapting argument names...
 #define modelview (ViewMatrix*ModelMatrix)
 #define projection ProjectionMatrix
@@ -347,10 +350,11 @@ bool testProfileEdge( ivec2 texcoord, vec3 world_position )
     float dot1 = dot(camera_to_line.xyz, vec3(face_normal_1.xyz));
 	float dot2 = dot(vec3(face_normal_0.xyz), vec3(face_normal_1.xyz));
 
+    is_crease = (dot2<crease_threshold)?1:0;
 
     return (dot0 >= 0.0 && dot1 <= 0.0) ||
            (dot0 <= 0.0 && dot1 >= 0.0) ||
-           ((enable_crease>0) && (dot2<crease_threshold)) ||
+           ((enable_crease>0) && is_crease>0) ||
            ((enable_material>0) && (edge_mask.r>0)) ||
            ((enable_edge_mark>0) && (edge_mask.g>0)) ||
            false;
@@ -492,7 +496,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,1);//v1_clipped_pre_div;
+    gl_FragData[1] = vec4(v1_clipped_pre_div.xyz,is_crease>0?0: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 6e1d191c2ad..8ab35e98c36 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1464,6 +1464,10 @@ typedef struct SceneLANPR{
 	float line_color[4];
 	float background_color[4];
 
+	float crease_color[4];    /* these should go into LANPR_LineStyle layer, */
+    float material_color[4];  /* currently are just here for demonstrating purpose */
+    float edge_mark_color[4]; /* furthur design needed */
+
 	float depth_width_influence;
 	float depth_width_curve;
 	float depth_alpha_influence;
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 1cab8e78f12..d53bcf2f622 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -6308,6 +6308,8 @@ static void rna_def_scene_lanpr(BlenderRNA *brna)
 	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);
 	RNA_def_property_ui_text(prop, "Enable Crease", "Draw crease lines");
 
@@ -6319,6 +6321,26 @@ static void rna_def_scene_lanpr(BlenderRNA *brna)
 
 	prop = RNA_def_property(srna, "enable_intersection", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_ui_text(prop, "Enable intersection Lines", "Draw intersection lines");
+
+    /* these are also demonstrating purpose */
+    
+	prop = RNA_def_property(srna, "crease_color", PROP_FLOAT, PROP_COLOR);
+	RNA_def_property_float_default(prop, 1.0f);
+	RNA_def_property_array(prop, 4);
+	RNA_def_property_ui_text(prop, "Crease Color", "Drawing crease lines using this color");
+	RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 2);
+
+	prop = RNA_def_property(srna, "material_color", PROP_FLOAT, PROP_COLOR);
+	RNA_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list