[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