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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to