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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs