[Bf-blender-cvs] [8072b683875] soc-2018-npr: Directional light control object ok, fixing file rw

Nick Wu noreply at git.blender.org
Tue Aug 28 12:11:46 CEST 2018


Commit: 8072b6838755f2493fade14a904fa9f818a94aed
Author: Nick Wu
Date:   Tue Aug 28 17:34:12 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB8072b6838755f2493fade14a904fa9f818a94aed

Directional light control object ok, fixing file rw

===================================================================

M	release/scripts/startup/bl_ui/properties_scene.py
M	source/blender/blenloader/intern/readfile.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 461f1f7db71..96cdeb2e518 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -676,6 +676,7 @@ class SCENE_PT_lanpr(SceneButtonsPanel, Panel):
                 layout.label(text= "Normal:")
                 layout.prop(active_layer,"normal_mode", expand = True)
                 if active_layer.normal_mode != "DISABLED":
+                    layout.prop(active_layer,"normal_control_object")
                     layout.prop(active_layer,"normal_effect_inverse", toggle = True)
                     layout.prop(active_layer,"normal_ramp_begin")
                     layout.prop(active_layer,"normal_ramp_end")
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 2bf211da431..148400da644 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6525,13 +6525,13 @@ static void direct_link_scene(FileData *fd, Scene *sce)
 	for (LANPR_LineLayer *ll = sce->lanpr.line_layers.first; ll; ll = ll->next) {
 		link_list(fd, &ll->components);
 		for(LANPR_LineLayerComponent *llc = ll->components.first; llc;llc=llc->next){
-			llc->object_select = newdataadr(fd, llc->object_select);
-			llc->material_select = newdataadr(fd, llc->material_select);
-			llc->collection_select = newdataadr(fd, llc->collection_select);
+			llc->object_select = newlibadr(fd, sce->id.lib, llc->object_select);
+			llc->material_select = newlibadr(fd, sce->id.lib, llc->material_select);
+			llc->collection_select = newlibadr(fd, sce->id.lib, llc->collection_select);
 		}
 		ll->batch = NULL;
 		ll->shgrp = NULL;
-		ll->normal_control_object = newdataadr(fd, ll->normal_control_object);
+		ll->normal_control_object = newlibadr(fd, sce->id.lib, ll->normal_control_object);
 	}
 
 	sce->layer_properties = newdataadr(fd, sce->layer_properties);
@@ -9902,6 +9902,8 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
 	SceneRenderLayer *srl;
 	FreestyleModuleConfig *module;
 	FreestyleLineSet *lineset;
+	LANPR_LineLayer* ll;
+	LANPR_LineLayerComponent* llc;
 
 	for (Base *base_legacy = sce->base.first; base_legacy; base_legacy = base_legacy->next) {
 		expand_doit(fd, mainvar, base_legacy->object);
@@ -9949,6 +9951,15 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
 		}
 	}
 
+	for (LANPR_LineLayer *ll = sce->lanpr.line_layers.first; ll; ll = ll->next) {
+		for (LANPR_LineLayerComponent *llc = ll->components.first; llc; llc = llc->next) {
+			if (llc->object_select) expand_doit(fd, mainvar, llc->object_select);
+			if (llc->material_select) expand_doit(fd, mainvar, llc->material_select);
+			if (llc->collection_select) expand_doit(fd, mainvar, llc->collection_select);
+		}
+		if (ll->normal_control_object) expand_doit(fd, mainvar, ll->normal_control_object);
+	}
+
 	if (sce->gpd)
 		expand_doit(fd, mainvar, sce->gpd);
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 7e8488d5092..3e359ea8667 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -3028,6 +3028,38 @@ void lanpr_viewport_draw_offline_result(LANPR_TextureList *txl, LANPR_Framebuffe
 
 void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb, float dist_threshold);
 
+void lanpr_calculate_normal_object_vector(LANPR_LineLayer* ll, float* normal_object_direction) {
+	Object* ob;
+	switch (ll->normal_mode) {
+	case LANPR_NORMAL_DONT_CARE:
+		return;
+	case LANPR_NORMAL_DIRECTIONAL:
+		if (!(ob = ll->normal_control_object)) {
+			normal_object_direction[0] = 0;
+			normal_object_direction[1] = 0;
+			normal_object_direction[2] = 1; // default z up direction
+		}else {
+			float dir[3] = {0,0,1};
+			mul_v3_m3v3(normal_object_direction, ob->obmat, dir);
+		}
+		return;
+	case LANPR_NORMAL_POINT:
+		if (!(ob = ll->normal_control_object)) {
+			normal_object_direction[0] = 0;
+			normal_object_direction[1] = 0;
+			normal_object_direction[2] = 0; // default origin position
+		}
+		else {
+			normal_object_direction[0] = ob->obmat[3][0];
+			normal_object_direction[1] = ob->obmat[3][1];
+			normal_object_direction[2] = ob->obmat[3][2];
+		}
+		return;
+	case LANPR_NORMAL_2D:
+		return;
+	}
+}
+
 void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render) {
 	LANPR_LineLayer *ll;
 	LANPR_PassList *psl = ((LANPR_Data *)vedata)->psl;
@@ -3040,6 +3072,7 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
 	SceneLANPR *lanpr = &scene->lanpr;
 	View3D *v3d = draw_ctx->v3d;
 	float indentity_mat[4][4];
+	float normal_object_direction[3] = { 0,0,1 };
 
 	if (is_render) {
 		lanpr_rebuild_all_command(lanpr);
@@ -3091,6 +3124,9 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
 				psl->software_pass = DRW_pass_create("Software Render Preview", DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL);
 				rb = lanpr->render_buffer;
 				rb->ChainShgrp = DRW_shgroup_create(lanpr_share.software_chaining_shader, psl->software_pass);
+
+				lanpr_calculate_normal_object_vector(ll, normal_object_direction);
+
 				DRW_shgroup_uniform_vec4(rb->ChainShgrp, "color", ll->color, 1);
 				DRW_shgroup_uniform_vec4(rb->ChainShgrp, "crease_color", ll->crease_color, 1);
 				DRW_shgroup_uniform_vec4(rb->ChainShgrp, "material_color", ll->material_color, 1);
@@ -3108,6 +3144,7 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
 				DRW_shgroup_uniform_float(rb->ChainShgrp, "normal_ramp_end", &ll->normal_ramp_end, 1);
 				DRW_shgroup_uniform_float(rb->ChainShgrp, "normal_thickness_begin", &ll->normal_thickness_begin, 1);
 				DRW_shgroup_uniform_float(rb->ChainShgrp, "normal_thickness_end", &ll->normal_thickness_end, 1);
+				DRW_shgroup_uniform_vec3(rb->ChainShgrp, "normal_direction", normal_object_direction, 1);
 
 				DRW_shgroup_uniform_int(rb->ChainShgrp, "occlusion_level_begin", &ll->qi_begin, 1);
 				DRW_shgroup_uniform_int(rb->ChainShgrp, "occlusion_level_end", &ll->qi_end, 1);
@@ -3136,6 +3173,9 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
 				if (ll->batch) {
 					psl->software_pass = DRW_pass_create("Software Render Preview", DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL);
 					ll->shgrp = DRW_shgroup_create(lanpr_share.software_shader, psl->software_pass);
+
+					lanpr_calculate_normal_object_vector(ll, normal_object_direction);
+
 					DRW_shgroup_uniform_vec4(ll->shgrp, "color", ll->color, 1);
 					DRW_shgroup_uniform_vec4(ll->shgrp, "crease_color", ll->crease_color, 1);
 					DRW_shgroup_uniform_vec4(ll->shgrp, "material_color", ll->material_color, 1);
@@ -3155,6 +3195,7 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
 					DRW_shgroup_uniform_float(ll->shgrp, "normal_ramp_end", &ll->normal_ramp_end, 1);
 					DRW_shgroup_uniform_float(ll->shgrp, "normal_thickness_begin", &ll->normal_thickness_begin, 1);
 					DRW_shgroup_uniform_float(ll->shgrp, "normal_thickness_end", &ll->normal_thickness_end, 1);
+					DRW_shgroup_uniform_vec3(ll->shgrp, "normal_direction", normal_object_direction, 1);
 
 					DRW_shgroup_call_add(ll->shgrp, ll->batch, NULL);
 					DRW_draw_pass(psl->software_pass);
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl b/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
index facb5a32fd8..19272241cdd 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_software_chain_geom.glsl
@@ -163,7 +163,10 @@ void decide_line_style(int component_id){
 	if(normal_mode == 0){
 		th=thickness;
 	}else if(normal_mode == 1){
-		float factor = dot(gNormal[0],vec3(0,0,1));
+		float factor = dot(gNormal[0],normal_direction);
+		th = factor_to_thickness(factor);
+	}else if(normal_mode == 2){
+		float factor = dot(gNormal[0],normal_direction);
 		th = factor_to_thickness(factor);
 	}
 
diff --git a/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl b/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
index 2112b47fcab..38254a7f992 100644
--- a/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
+++ b/source/blender/draw/engines/lanpr/shaders/lanpr_software_line_chain_geom.glsl
@@ -74,7 +74,10 @@ void decide_color_and_thickness(float component_id){
 	if(normal_mode == 0){
 		th=thickness;
 	}else if(normal_mode == 1){
-		float factor = dot(gNormal[0],vec3(0,0,1));
+		float factor = dot(gNormal[0],normal_direction);
+		th = factor_to_thickness(factor);
+	}else if(normal_mode == 2){
+		float factor = dot(gNormal[0],normal_direction);
 		th = factor_to_thickness(factor);
 	}
 
diff --git a/source/blender/makesdna/DNA_lanpr_types.h b/source/blender/makesdna/DNA_lanpr_types.h
index 3040bc0b992..1ed27187cfc 100644
--- a/source/blender/makesdna/DNA_lanpr_types.h
+++ b/source/blender/makesdna/DNA_lanpr_types.h
@@ -55,6 +55,8 @@ struct Collection;
 
 #define LANPR_NORMAL_DONT_CARE         0
 #define LANPR_NORMAL_DIRECTIONAL       1
+#define LANPR_NORMAL_POINT             2
+#define LANPR_NORMAL_2D                3
 
 #define LANPR_COMPONENT_MODE_ALL          0
 #define LANPR_COMPONENT_MODE_OBJECT       1
diff --git a/source/blender/makesrna/intern/rna_lanpr.c b/source/blender/makesrna/intern/rna_lanpr.c
index b6dd56d468c..0f716aecf1b 100644
--- a/source/blender/makesrna/intern/rna_lanpr.c
+++ b/source/blender/makesrna/intern/rna_lanpr.c
@@ -66,6 +66,7 @@ void RNA_def_lanpr(BlenderRNA *brna){
 	static const EnumPropertyItem rna_enum_lanpr_normal_mode[] = {
 		{LANPR_NORMAL_DONT_CARE, "DISABLED", 0, "Disabled", "Normal value does not affect line style"},
 		{LANPR_NORMAL_DIRECTIONAL, "DIRECTIONAL", 0, "Directional", "Use directional vector to control line width"},
+		{LANPR_NORMAL_POINT, "POINT", 0, "Point", "Use Point Light Style"},
 		{0, NULL, 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list