[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