[Bf-blender-cvs] [6b005517db9] soc-2018-npr: Normal controlled normal thickness for software is ok. No direction and position variation.
Nick Wu
noreply at git.blender.org
Tue Aug 28 12:11:42 CEST 2018
Commit: 6b005517db982b3036d86a5cdbb8ab91abc598f2
Author: Nick Wu
Date: Tue Aug 28 15:48:01 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB6b005517db982b3036d86a5cdbb8ab91abc598f2
Normal controlled normal thickness for software is ok. No direction and position variation.
===================================================================
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_chain.c
M source/blender/draw/engines/lanpr/lanpr_ops.c
M source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
M source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
M source/blender/makesdna/DNA_lanpr_types.h
M source/blender/makesrna/intern/rna_lanpr.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py
index e90e8f4b890..461f1f7db71 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -672,6 +672,16 @@ class SCENE_PT_lanpr(SceneButtonsPanel, Panel):
layout.operator("scene.lanpr_rebuild_all_commands")
else:
layout.operator("scene.lanpr_add_line_layer")
+
+ layout.label(text= "Normal:")
+ layout.prop(active_layer,"normal_mode", expand = True)
+ if active_layer.normal_mode != "DISABLED":
+ layout.prop(active_layer,"normal_effect_inverse", toggle = True)
+ layout.prop(active_layer,"normal_ramp_begin")
+ layout.prop(active_layer,"normal_ramp_end")
+ layout.prop(active_layer,"normal_thickness_begin", slider=True)
+ layout.prop(active_layer,"normal_thickness_end", slider=True)
+
elif not lanpr.layers.active_layer:
layout.operator("scene.lanpr_add_line_layer")
@@ -734,9 +744,6 @@ class SCENE_PT_lanpr_line_types(SceneButtonsPanel, Panel):
else:
row.label(text= "Intersection Calculation Disabled")
- layout.label(text= "Normal:")
- layout.prop(active_layer,"normal_mode", expand = True)
-
if lanpr.master_mode == "DPIX" and active_layer.enable_intersection:
row = col.row(align = True)
row.prop(lanpr,"enable_intersections", toggle = True, text = "Enable")
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 460d3d1aad2..c0b72bdbac0 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -482,6 +482,7 @@ typedef struct LANPR_RenderLineChain {
typedef struct LANPR_RenderLineChainItem {
nListItem Item;
float pos[3]; // need z value for fading
+ float normal[3];
char LineType; // style of [1] style of [2]
char OcclusionLevel; // [1]--------------->[2]---------------->[3]--....
}LANPR_RenderLineChainItem;
diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c
index f0b53e9ee9f..236df7e7324 100644
--- a/source/blender/draw/engines/lanpr/lanpr_chain.c
+++ b/source/blender/draw/engines/lanpr/lanpr_chain.c
@@ -80,12 +80,13 @@ LANPR_RenderLineChain *lanpr_create_render_line_chain(LANPR_RenderBuffer *rb){
return rlc;
}
-LANPR_RenderLineChainItem *lanpr_append_render_line_chain_point(LANPR_RenderBuffer *rb, LANPR_RenderLineChain *rlc, float x, float y, char type, int level){
+LANPR_RenderLineChainItem *lanpr_append_render_line_chain_point(LANPR_RenderBuffer *rb, LANPR_RenderLineChain *rlc, float x, float y, float* normal, char type, int level){
LANPR_RenderLineChainItem *rlci;
rlci = mem_static_aquire(&rb->RenderDataPool, sizeof(LANPR_RenderLineChainItem));
rlci->pos[0] = x;
rlci->pos[1] = y;
+ copy_v3_v3(rlci->normal, normal);
rlci->LineType = type & LANPR_EDGE_FLAG_ALL_TYPE;
rlci->OcclusionLevel = level;
BLI_addtail(&rlc->Chain, rlci);
@@ -95,12 +96,13 @@ LANPR_RenderLineChainItem *lanpr_append_render_line_chain_point(LANPR_RenderBuff
return rlci;
}
-LANPR_RenderLineChainItem *lanpr_push_render_line_chain_point(LANPR_RenderBuffer *rb, LANPR_RenderLineChain *rlc, float x, float y, char type, int level){
+LANPR_RenderLineChainItem *lanpr_push_render_line_chain_point(LANPR_RenderBuffer *rb, LANPR_RenderLineChain *rlc, float x, float y, float* normal, char type, int level){
LANPR_RenderLineChainItem *rlci;
rlci = mem_static_aquire(&rb->RenderDataPool, sizeof(LANPR_RenderLineChainItem));
rlci->pos[0] = x;
rlci->pos[1] = y;
+ copy_v3_v3(rlci->normal, normal);
rlci->LineType = type & LANPR_EDGE_FLAG_ALL_TYPE;
rlci->OcclusionLevel = level;
BLI_addhead(&rlc->Chain, rlci);
@@ -161,23 +163,53 @@ void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb, float dist_thre
int r1, r2, c1, c2, row, col;
LANPR_RenderLine *new_rl = rl;
LANPR_RenderVert *new_rv;
+ float N[3] = { 0 };
+
+ if (rl->TL) {
+ N[0] += rl->TL->GN[0];
+ N[1] += rl->TL->GN[1];
+ N[2] += rl->TL->GN[2];
+ }
+ if (rl->TR) {
+ N[0] += rl->TR->GN[0];
+ N[1] += rl->TR->GN[1];
+ N[2] += rl->TR->GN[2];
+ }
+ if (rl->TL || rl->TR) {
+ normalize_v3(N);
+ }
// step 1: grow left
ba = lanpr_get_point_bounding_area(rb, rl->L->FrameBufferCoord[0], rl->L->FrameBufferCoord[1]);
new_rv = rl->L;
rls = rl->Segments.first;
- lanpr_push_render_line_chain_point(rb, rlc, new_rv->FrameBufferCoord[0], new_rv->FrameBufferCoord[1], rl->Flags, rls->OcclusionLevel);
+ lanpr_push_render_line_chain_point(rb, rlc, new_rv->FrameBufferCoord[0], new_rv->FrameBufferCoord[1], N, rl->Flags, rls->OcclusionLevel);
while (ba && (new_rl = lanpr_get_connected_render_line(ba, new_rv, &new_rv))) {
new_rl->Flags |= LANPR_EDGE_FLAG_CHAIN_PICKED;
int last_occlusion;
+ N[0] = N[1] = N[2] = 0;
+ if (new_rl->TL) {
+ N[0] += new_rl ->TL->GN[0];
+ N[1] += new_rl ->TL->GN[1];
+ N[2] += new_rl ->TL->GN[2];
+ }
+ if (new_rl->TR) {
+ N[0] += new_rl->TR->GN[0];
+ N[1] += new_rl->TR->GN[1];
+ N[2] += new_rl->TR->GN[2];
+ }
+ if (rl->TL || rl->TR) {
+ normalize_v3(N);
+ }
+
if (new_rv == new_rl->L) {
for (rls = new_rl->Segments.last; rls; rls = rls->Item.pPrev) {
float px, py;
px = tnsLinearItp(new_rl->L->FrameBufferCoord[0], new_rl->R->FrameBufferCoord[0], rls->at);
py = tnsLinearItp(new_rl->L->FrameBufferCoord[1], new_rl->R->FrameBufferCoord[1], rls->at);
- lanpr_push_render_line_chain_point(rb, rlc, px, py, new_rl->Flags, rls->OcclusionLevel);
+ lanpr_push_render_line_chain_point(rb, rlc, px, py, N, new_rl->Flags, rls->OcclusionLevel);
}
} elif(new_rv == new_rl->R)
{
@@ -188,10 +220,10 @@ void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb, float dist_thre
float px, py;
px = tnsLinearItp(new_rl->L->FrameBufferCoord[0], new_rl->R->FrameBufferCoord[0], rls->at);
py = tnsLinearItp(new_rl->L->FrameBufferCoord[1], new_rl->R->FrameBufferCoord[1], rls->at);
- lanpr_push_render_line_chain_point(rb, rlc, px, py, new_rl->Flags, last_occlusion);
+ lanpr_push_render_line_chain_point(rb, rlc, px, py, N, new_rl->Flags, last_occlusion);
last_occlusion = rls->OcclusionLevel;
}
- lanpr_push_render_line_chain_point(rb, rlc, new_rl->R->FrameBufferCoord[0], new_rl->R->FrameBufferCoord[1], new_rl->Flags, last_occlusion);
+ lanpr_push_render_line_chain_point(rb, rlc, new_rl->R->FrameBufferCoord[0], new_rl->R->FrameBufferCoord[1], N, new_rl->Flags, last_occlusion);
}
ba = lanpr_get_point_bounding_area(rb, new_rv->FrameBufferCoord[0], new_rv->FrameBufferCoord[1]);
}
@@ -202,9 +234,9 @@ void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb, float dist_thre
float px, py;
px = tnsLinearItp(rl->L->FrameBufferCoord[0], rl->R->FrameBufferCoord[0], rls->at);
py = tnsLinearItp(rl->L->FrameBufferCoord[1], rl->R->FrameBufferCoord[1], rls->at);
- lanpr_append_render_line_chain_point(rb, rlc, px, py, rl->Flags, rls->OcclusionLevel);
+ lanpr_append_render_line_chain_point(rb, rlc, px, py, N, rl->Flags, rls->OcclusionLevel);
}
- lanpr_append_render_line_chain_point(rb, rlc, rl->R->FrameBufferCoord[0], rl->R->FrameBufferCoord[1], rl->Flags, 0);
+ lanpr_append_render_line_chain_point(rb, rlc, rl->R->FrameBufferCoord[0], rl->R->FrameBufferCoord[1], N, rl->Flags, 0);
// step 3: grow right
ba = lanpr_get_point_bounding_area(rb, rl->R->FrameBufferCoord[0], rl->R->FrameBufferCoord[1]);
@@ -231,7 +263,7 @@ void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb, float dist_thre
px = tnsLinearItp(new_rl->L->FrameBufferCoord[0], new_rl->R->FrameBufferCoord[0], rls->at);
py = tnsLinearItp(new_rl->L->FrameBufferCoord[1], new_rl->R->FrameBufferCoord[1], rls->at);
last_occlusion = rls->Item.pPrev ? ((LANPR_RenderLineSegment *)rls->Item.pPrev)->OcclusionLevel : 0;
- lanpr_append_render_line_chain_point(rb, rlc, px, py, new_rl->Flags, last_occlusion);
+ lanpr_append_render_line_chain_point(rb, rlc, px, py, N, new_rl->Flags, last_occlusion);
}
} elif(new_rv == new_rl->R)
{
@@ -243,10 +275,10 @@ void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb, float dist_thre
float px, py;
px = tnsLinearItp(new_rl->L->FrameBufferCoord[0], new_rl->R->FrameBufferCoord[0], rls->at);
py = tnsLinearItp(new_rl->L->FrameBufferCoord[1], new_rl->R->FrameBufferCoord[1], rls->at);
- lanpr_append_render_line_chain_point(rb, rlc, px, py, new_rl->Flags, rls->OcclusionLevel);
+ lanpr_append_render_line_chain_point(rb, rlc, px, py, N, new_rl->Flags, rls->OcclusionLevel);
//last_occlusion = rls->OcclusionLevel;
}
- lanpr_append_render_line_chain_point(rb, rlc, new_rl->R->FrameBufferCoord[0], new_rl->R->FrameBufferCoord[1], new_rl->Flags, 0);
+ lanpr_append_render_line_chain_point(rb, rlc, new_rl->R->FrameBufferCoord[0], new_rl->R->FrameBufferCoord[1], N, new_rl->Flags, 0);
}
ba = lanpr_get_point_bounding_area(rb, new_rv->FrameBufferCoord[0], new_rv->FrameBufferCoord[1]);
}
@@ -312,10 +344,11 @@ void lanpr_chain_generate_draw_command(LANPR_RenderBuffer *rb){
float length_target[2];
static GPUVertFormat format = { 0 };
- static struct { uint pos, uvs, type, level; } attr_id;
+ static struct { uint pos, uvs, normal, type, level; } attr_id;
if (format.attr_len == 0) {
attr_id.pos = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
attr_id.uvs = GPU_vertformat_attr_add(&format, "uvs", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ attr_id.normal = GPU_vertformat_attr_add(&format, "normal", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
attr_id.type = GPU_vertformat_attr_add(&format, "type", GPU_COMP_I32, 1, GPU_FETCH_INT);
attr_id.level = GPU_vertformat_attr_add(&format, "level", GPU_COMP_I32, 1, GPU_FETCH_INT);
}
@@ -345,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list