[Bf-blender-cvs] [2076721e71a] soc-2018-npr: Seam and Material lines can be ena/disabled in dpix. Also added UI.
Nick Wu
noreply at git.blender.org
Wed Jun 13 11:55:00 CEST 2018
Commit: 2076721e71a8efb8efff52b04646a91c345c45ea
Author: Nick Wu
Date: Wed Jun 13 17:27:17 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB2076721e71a8efb8efff52b04646a91c345c45ea
Seam and Material lines can be ena/disabled in dpix. Also added UI.
===================================================================
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_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 a623cf3fc42..bd12e26b4c9 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -502,13 +502,27 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
layout.label(text="Effect Settings:")
layout.prop(lanpr, "line_thickness")
- split = layout.split()
- col = split.column()
- col.prop(lanpr, "depth_width_influence")
- col.prop(lanpr, "depth_alpha_influence")
- col = split.column()
- col.prop(lanpr, "depth_width_curve")
- col.prop(lanpr, "depth_alpha_curve")
+
+ if lanpr.line_thickness > 0.01:
+ col = layout.column()
+ col.label(text="Enable:")
+ row = col.row(align=True)
+ row.prop(lanpr, "enable_crease", text="Crease", toggle=True)
+ row.prop(lanpr, "enable_edge_mark", text="Mark", toggle=True)
+ 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")
+
+ layout.prop(lanpr, "crease_threshold")
+
+ split = layout.split()
+ col = split.column()
+ col.prop(lanpr, "depth_width_influence")
+ col.prop(lanpr, "depth_alpha_influence")
+ col = split.column()
+ col.prop(lanpr, "depth_width_curve")
+ col.prop(lanpr, "depth_alpha_curve")
else:
layout.label(text="Snake:")
@@ -522,6 +536,14 @@ class SCENE_PT_lanpr(SceneButtonsPanel, PropertyPanel, Panel):
layout.prop(lanpr, "normal_clamp")
layout.prop(lanpr, "normal_strength")
+ col = layout.column()
+ col.label(text="Enable:")
+ row = col.row(align=True)
+ 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_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index af0a744749d..379c6e193b8 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -107,6 +107,7 @@ typedef struct LANPR_TextureList {
struct GPUTexture *dpix_in_pr;/* point R */
struct GPUTexture *dpix_in_nl;/* normal L */
struct GPUTexture *dpix_in_nr;/* normal R */
+ struct GPUTexture *dpix_in_edge_mask;/* RGBA, R:Material, GBA:Reserved for future usage */
struct GPUTexture *dpix_out_pl;
struct GPUTexture *dpix_out_pr;
@@ -154,7 +155,8 @@ typedef struct LANPR_PrivateData {
void* atlas_pl;
void* atlas_pr;
void* atlas_nl;
- void* atlas_nr;
+ void* atlas_nr;
+ void* atlas_edge_mask;
int begin_index;
@@ -301,6 +303,7 @@ void lanpr_destroy_atlas(void *ved);
int lanpr_feed_atlas_data_obj(void* vedata,
float* AtlasPointsL, float* AtlasPointsR,
float* AtlasFaceNormalL, float* AtlasFaceNormalR,
+ float* AtlasEdgeMask,
Object* ob, int BeginIndex);
int lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int BeginIndex);
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 3f06f7a08dd..76121402ac9 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -50,6 +50,7 @@ void lanpr_init_atlas_inputs(void *ved){
DRW_texture_ensure_2D(&txl->dpix_in_pr, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
DRW_texture_ensure_2D(&txl->dpix_in_nl, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
DRW_texture_ensure_2D(&txl->dpix_in_nr, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
+ DRW_texture_ensure_2D(&txl->dpix_in_edge_mask, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA8, 0);
DRW_texture_ensure_2D(&txl->dpix_out_pl, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
DRW_texture_ensure_2D(&txl->dpix_out_pr, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
DRW_texture_ensure_2D(&txl->dpix_out_length, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
@@ -113,6 +114,7 @@ void lanpr_destroy_atlas(void *ved){
DRW_texture_free(txl->dpix_in_pr);
DRW_texture_free(txl->dpix_in_nl);
DRW_texture_free(txl->dpix_in_nr);
+ DRW_texture_free(txl->dpix_in_edge_mask);
DRW_texture_free(txl->dpix_out_pl);
DRW_texture_free(txl->dpix_out_pr);
}
@@ -120,6 +122,7 @@ void lanpr_destroy_atlas(void *ved){
int lanpr_feed_atlas_data_obj(void* vedata,
float* AtlasPointsL, float* AtlasPointsR,
float* AtlasFaceNormalL, float* AtlasFaceNormalR,
+ float* AtlasEdgeMask,
Object* ob, int BeginIndex) {
LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
@@ -183,6 +186,9 @@ int lanpr_feed_atlas_data_obj(void* vedata,
AtlasFaceNormalR[idx + 1] = f2->no[1];
AtlasFaceNormalR[idx + 2] = f2->no[2];
AtlasFaceNormalR[idx + 3] = 1;
+
+ if(f2->mat_nr!=f1->mat_nr) AtlasEdgeMask[idx] = 1; // channel R
+
}else{
AtlasFaceNormalR[idx + 0] = 0;
AtlasFaceNormalR[idx + 1] = 0;
@@ -282,20 +288,12 @@ void lanpr_dpix_draw_scene(LANPR_TextureList* txl, LANPR_FramebufferList * fbl,
GPU_framebuffer_bind(fbl->dpix_transform);
DRW_draw_pass(psl->dpix_transform_pass);
- //GPU_framebuffer_bind(fbl->edge_intermediate);
- //DRW_draw_pass(psl->color_pass);// use depth
-
- glEnable(GL_MULTISAMPLE);
-
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_MULTISAMPLE);
-
GPU_framebuffer_bind(dfbl->default_fb);
GPU_framebuffer_clear(dfbl->default_fb, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
DRW_multisamples_resolve(txl->depth,txl->color);
- //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 9f6f9f32931..bfb1a49259c 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -249,11 +249,15 @@ static void lanpr_cache_init(void *vedata){
DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_transform_shgrp, "vert1_tex", &txl->dpix_in_pr);
DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_transform_shgrp, "face_normal0_tex", &txl->dpix_in_nl);
DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_transform_shgrp, "face_normal1_tex", &txl->dpix_in_nr);
+ DRW_shgroup_uniform_texture_ref(stl->g_data->dpix_transform_shgrp, "edge_mask_tex", &txl->dpix_in_edge_mask);
DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "sample_step", &stl->g_data->dpix_sample_step, 1);
DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "is_perspective", &stl->g_data->dpix_is_perspective, 1);
DRW_shgroup_uniform_vec4(stl->g_data->dpix_transform_shgrp, "viewport", stl->g_data->dpix_viewport, 1);
DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "buffer_width", &stl->g_data->dpix_buffer_width, 1);
-
+ DRW_shgroup_uniform_float(stl->g_data->dpix_transform_shgrp, "crease_threshold", &lanpr->crease_threshold, 1);
+ DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "enable_crease", &lanpr->enable_crease, 1);
+ DRW_shgroup_uniform_int(stl->g_data->dpix_transform_shgrp, "enable_material", &lanpr->enable_material_seperate, 1);
+
psl->dpix_preview_pass = DRW_pass_create("DPIX Preview", DRW_STATE_WRITE_COLOR|DRW_STATE_WRITE_DEPTH|DRW_STATE_DEPTH_LESS_EQUAL);
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);
@@ -272,13 +276,14 @@ static void lanpr_cache_init(void *vedata){
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;
+ int fsize = sizeof(float) * 4 * TNS_DPIX_TEXTURE_SIZE*TNS_DPIX_TEXTURE_SIZE;
if (lanpr->reloaded) {
- pd->atlas_pl = MEM_callocN(tsize, "atlas_point_l");
- pd->atlas_pr = MEM_callocN(tsize, "atlas_point_r");
- pd->atlas_nl = MEM_callocN(tsize, "atlas_normal_l");
- pd->atlas_nr = MEM_callocN(tsize, "atlas_normal_l");
+ pd->atlas_pl = MEM_callocN(fsize, "atlas_point_l");
+ pd->atlas_pr = MEM_callocN(fsize, "atlas_point_r");
+ pd->atlas_nl = MEM_callocN(fsize, "atlas_normal_l");
+ pd->atlas_nr = MEM_callocN(fsize, "atlas_normal_l");
+ pd->atlas_edge_mask = MEM_callocN(fsize, "atlas_edge_mask"); // should always be float
pd->dpix_batch_list.first = pd->dpix_batch_list.last = 0;
BLI_mempool_clear(pd->mp_batch_list);
@@ -309,7 +314,7 @@ static void lanpr_cache_populate(void *vedata, Object *ob){
if(lanpr->master_mode == LANPR_MASTER_MODE_DPIX){
int idx = pd->begin_index;
if(lanpr->reloaded){
- pd->begin_index = lanpr_feed_atlas_data_obj(vedata,pd->atlas_pl,pd->atlas_pr,pd->atlas_nl,pd->atlas_nr,ob,idx);
+ pd->begin_index = lanpr_feed_atlas_data_obj(vedata,pd->atlas_pl,pd->atlas_pr,pd->atlas_nl,pd->atlas_nr,pd->atlas_edge_mask,ob,idx);
lanpr_feed_atlas_trigger_preview_obj(vedata, ob, idx);
}
@@ -335,11 +340,13 @@ static void lanpr_cache_finish(void *vedata){
GPU_texture_update(txl->dpix_in_pr,pd->atlas_pr);
GPU_texture_update(txl->dpix_in_nl,pd->atlas_nl);
GPU_texture_update(txl->dpix_in_nr,pd->atlas_nr);
+ GPU_texture_update(txl->dpix_in_edge_mask,pd->a
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list