[Bf-blender-cvs] [d64862f778b] soc-2018-npr: Add: depth controlled line width.
Nick Wu
noreply at git.blender.org
Mon Jun 11 09:03:03 CEST 2018
Commit: d64862f778b7ce2379342d65c30accda2196f93d
Author: Nick Wu
Date: Mon Jun 11 14:02:36 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rBd64862f778b7ce2379342d65c30accda2196f93d
Add: depth controlled line width.
===================================================================
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_dpix.c
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/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager_texture.c
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 4a322d0670c..88e44b95bed 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -493,11 +493,20 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
if lanpr.master_mode == "DPIX":
layout.label(text="DPIX:")
layout.prop(lanpr, "reloaded")
+
split = layout.split()
col = split.column()
col.prop(lanpr, "background_color")
col = split.column()
col.prop(lanpr, "line_color")
+
+ layout.label(text="Effect Settings:")
+ layout.prop(lanpr, "line_thickness")
+ split = layout.split()
+ col = split.column()
+ col.prop(lanpr, "depth_influence")
+ col = split.column()
+ col.prop(lanpr, "depth_curve")
else:
layout.label(text="Snake:")
@@ -524,6 +533,12 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
layout.label(text="Effect Settings:")
+ split = layout.split()
+ col = split.column()
+ col.prop(lanpr, "depth_influence")
+ col = split.column()
+ col.prop(lanpr, "depth_curve")
+
layout.prop(lanpr, "use_same_taper")
if lanpr.use_same_taper == "DISABLED":
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 8e7acae20c6..f299ccba0ee 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -166,6 +166,9 @@ typedef struct LANPR_PrivateData {
int dpix_buffer_width;
float dpix_depth_offset;
+ float dpix_znear;
+ float dpix_zfar;
+
// drawing
unsigned v_buf;
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 2eae86b3242..791a8296815 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -263,6 +263,11 @@ void lanpr_dpix_draw_scene(LANPR_TextureList* txl, LANPR_FramebufferList * fbl,
int texw = GPU_texture_width(txl->edge_intermediate) ,texh = GPU_texture_height(txl->edge_intermediate);;
int tsize = texw*texh;
+
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ View3D *v3d = draw_ctx->v3d;
+ RegionView3D *rv3d = draw_ctx->rv3d;
+ Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
pd->dpix_viewport[2] = texw;
pd->dpix_viewport[3] = texh;
@@ -270,6 +275,8 @@ void lanpr_dpix_draw_scene(LANPR_TextureList* txl, LANPR_FramebufferList * fbl,
pd->dpix_sample_step = 1;
pd->dpix_buffer_width = TNS_DPIX_TEXTURE_SIZE;
pd->dpix_depth_offset=0.0001;
+ pd->dpix_znear = camera?((Camera*)camera->data)->clipsta:v3d->near;
+ pd->dpix_zfar = camera?((Camera*)camera->data)->clipend:v3d->far;
glPointSize(1);
glLineWidth(2);
@@ -280,18 +287,18 @@ void lanpr_dpix_draw_scene(LANPR_TextureList* txl, LANPR_FramebufferList * fbl,
//GPU_framebuffer_bind(fbl->edge_intermediate);
//DRW_draw_pass(psl->color_pass);// use depth
- glEnable(GL_LINE_SMOOTH);
- glHint(GL_LINE_SMOOTH, GL_NICEST);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ //glEnable(GL_POLYGON_SMOOTH);
+ //glHint(GL_POLYGON_SMOOTH, GL_NICEST);
+ //glEnable(GL_BLEND);
+ //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
GPU_framebuffer_bind(fbl->dpix_preview);
GPUFrameBufferBits clear_bits = GPU_COLOR_BIT;
GPU_framebuffer_clear(fbl->dpix_preview, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
DRW_draw_pass(psl->dpix_preview_pass);
- glDisable(GL_LINE_SMOOTH);
- glDisable(GL_BLEND);
+ //glDisable(GL_POLYGON_SMOOTH);
+ //glDisable(GL_BLEND);
GPU_framebuffer_bind(dfbl->default_fb);
//DRW_transform_to_display(txl->dpix_out_pl);
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 1aa0d56b7b6..8d7045494f3 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -77,6 +77,8 @@ static void lanpr_engine_init(void *ved){
lanpr->background_color[2] = 0.51;
lanpr->background_color[3] = 1;
+ lanpr->depth_influence = 0.3;
+
lanpr->reloaded = 1;
OneTime.InitComplete=1;
@@ -261,6 +263,11 @@ static void lanpr_cache_init(void *vedata){
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_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, "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);
pd->begin_index = 0;
int tsize = sizeof(float) * 4 * TNS_DPIX_TEXTURE_SIZE*TNS_DPIX_TEXTURE_SIZE;
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 791d924f0a7..70714c44fa9 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_atlas_preview.geometry
@@ -1,8 +1,5 @@
layout (points) in;
-layout (line_strip, max_vertices = 2) out;
-
-//in vec4 gColor[];
-//out vec4 fColor;
+layout (triangle_strip, max_vertices = 6) out;
uniform sampler2D vert0_tex;//L
uniform sampler2D vert1_tex;//R
@@ -10,21 +7,59 @@ uniform sampler2D vert1_tex;//R
uniform vec4 viewport; // viewport
uniform float depth_offset;
-void main() {
- //fColor = gColor[0];
-
- 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);
+// these are for depth related thickness control;
+uniform float line_thickness;
+uniform float depth_influence;
+uniform float depth_curve;
+uniform float zNear;
+uniform float zFar;
+
+float get_linear_depth(float z){
+ float ze = 2.0 * zNear * zFar / (zFar + zNear - z * (zFar - zNear));
+ return (ze-zNear)/(zFar-zNear);
+}
- //gl_Position = vec4(1,0,0.5,1);
- gl_Position = vec4(p1.x,p1.y,p1.z-depth_offset,p1.w);
- EmitVertex();
+float exp_depth(float z,float factor){
+ return pow(z,1-factor); // factor is -inf~1-eps
+}
- //fColor = gColor[0];
-
- //gl_Position = vec4(0,0,0.5,1);
- gl_Position = vec4(p2.x,p2.y,p2.z-depth_offset,p2.w);
- EmitVertex();
+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);
+}
+
+void draw_line(vec4 p1, vec4 p2){
+
+ vec4 Line = p2-p1;
+ vec4 Normal = normalize(vec4(-Line.y,Line.x,0,0));
+ vec4 a,b,c,d;
+
+ vec4 offset = Normal*line_thickness*0.001;
+ a = p1 + offset;
+ b = p1 - offset;
+ 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);
+
+ 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(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();
+
EndPrimitive();
+}
+
+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);
+
+ 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 a0d4e73ccca..1cee818c34e 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
@@ -1,16 +1,14 @@
//#extension GL_ARB_texture_rectangle : enable
+uniform mat4 ModelMatrix;
+uniform mat4 ViewMatrix;
+uniform mat4 ViewMatrixInverse;
+uniform mat4 ProjectionMatrix;
+uniform mat4 ProjectionMatrixInverse;
+uniform int is_perspective; // persp and orth use different feature determin method
-uniform mat4 ModelMatrix; //ModelMatrix
-uniform mat4 ViewMatrix; //ViewMatrix
-uniform mat4 ViewMatrixInverse; //ViewMatrixInv
-uniform mat4 ProjectionMatrix; //ProjectionMatrix
-uniform mat4 ProjectionMatrixInverse; //ProjectionMatrixInverse
-
-uniform int is_perspective;
-
-uniform float sample_step;
+uniform float sample_step; // length calculation unused now.
uniform int buffer_width;
@@ -29,6 +27,7 @@ uniform sampler2D face_normal1_tex;
vec3 view_pos;
vec3 view_dir;
+// these are for adapting argument names...
#define modelview (ViewMatrix*ModelMatrix)
#define projection ProjectionMatrix
#define inverse_projection ProjectionMatrixInverse
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 0edb8c30b15..89ddce8ecbf 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -206,7 +206,7 @@ void DRW_texture_ensure_2D(
struct GPUTexture **tex, int w, int h, GPUTextureFormat format, DRWTextureFlag flags);
void DRW_texture_ensure_fullscreen_2D_multisample(
- struct
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list