[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