[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