[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41474] trunk/blender: Nodes: add support for shader nodes on world and lamps, in addition to materials.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Nov 2 19:55:32 CET 2011


Revision: 41474
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41474
Author:   blendix
Date:     2011-11-02 18:55:32 +0000 (Wed, 02 Nov 2011)
Log Message:
-----------
Nodes: add support for shader nodes on world and lamps, in addition to materials.
The internal render engine does not support them, and they are not accesible in
the UI yet, but cycles will use them.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_node.py
    trunk/blender/source/blender/blenkernel/intern/anim_sys.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenkernel/intern/world.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/editors/include/ED_node.h
    trunk/blender/source/blender/editors/render/render_preview.c
    trunk/blender/source/blender/editors/render/render_update.c
    trunk/blender/source/blender/editors/space_node/node_draw.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/editors/space_node/space_node.c
    trunk/blender/source/blender/makesdna/DNA_lamp_types.h
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/makesdna/DNA_world_types.h
    trunk/blender/source/blender/makesrna/intern/rna_lamp.c
    trunk/blender/source/blender/makesrna/intern/rna_material.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/makesrna/intern/rna_space.c
    trunk/blender/source/blender/makesrna/intern/rna_world.c
    trunk/blender/source/blender/nodes/shader/node_shader_tree.c
    trunk/blender/source/blender/nodes/shader/node_shader_util.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_node.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_node.py	2011-11-02 18:20:53 UTC (rev 41473)
+++ trunk/blender/release/scripts/startup/bl_ui/space_node.py	2011-11-02 18:55:32 UTC (rev 41474)
@@ -42,7 +42,7 @@
 
         layout.prop(snode, "tree_type", text="", expand=True)
 
-        if snode.tree_type == 'MATERIAL':
+        if snode.tree_type == 'SHADER':
             if id_from:
                 layout.template_ID(id_from, "active_material", new="material.new")
             if snode_id:

Modified: trunk/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim_sys.c	2011-11-02 18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/blenkernel/intern/anim_sys.c	2011-11-02 18:55:32 UTC (rev 41474)
@@ -43,9 +43,11 @@
 #include "BLI_utildefines.h"
 
 #include "DNA_anim_types.h"
+#include "DNA_lamp_types.h"
 #include "DNA_material_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_texture_types.h"
+#include "DNA_world_types.h"
 
 #include "BKE_animsys.h"
 #include "BKE_action.h"
@@ -2291,7 +2293,7 @@
 	EVAL_ANIM_NODETREE_IDS(main->tex.first, Tex, ADT_RECALC_ANIM);
 	
 	/* lamps */
-	EVAL_ANIM_IDS(main->lamp.first, ADT_RECALC_ANIM);
+	EVAL_ANIM_NODETREE_IDS(main->lamp.first, Lamp, ADT_RECALC_ANIM);
 	
 	/* materials */
 	EVAL_ANIM_NODETREE_IDS(main->mat.first, Material, ADT_RECALC_ANIM);
@@ -2331,7 +2333,7 @@
 	EVAL_ANIM_IDS(main->object.first, 0); 
 	
 	/* worlds */
-	EVAL_ANIM_IDS(main->world.first, ADT_RECALC_ANIM);
+	EVAL_ANIM_NODETREE_IDS(main->world.first, World, ADT_RECALC_ANIM);
 	
 	/* scenes */
 	EVAL_ANIM_NODETREE_IDS(main->scene.first, Scene, ADT_RECALC_ANIM);

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2011-11-02 18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2011-11-02 18:55:32 UTC (rev 41474)
@@ -86,6 +86,7 @@
 #include "BKE_mesh.h"
 #include "BKE_mball.h"
 #include "BKE_modifier.h"
+#include "BKE_node.h"
 #include "BKE_object.h"
 #include "BKE_paint.h"
 #include "BKE_particle.h"
@@ -877,6 +878,9 @@
 	}
 	
 	lan->curfalloff = curvemapping_copy(la->curfalloff);
+
+	if(la->nodetree)
+		lan->nodetree= ntreeCopyTree(la->nodetree);
 	
 	if(la->preview)
 		lan->preview = BKE_previewimg_copy(la->preview);
@@ -903,6 +907,9 @@
 	
 	lan->curfalloff = curvemapping_copy(la->curfalloff);
 
+	if(la->nodetree)
+		lan->nodetree= ntreeLocalize(la->nodetree);
+	
 	lan->preview= NULL;
 	
 	return lan;
@@ -978,6 +985,12 @@
 	BKE_free_animdata((ID *)la);
 
 	curvemapping_free(la->curfalloff);
+
+	/* is no lib link block, but lamp extension */
+	if(la->nodetree) {
+		ntreeFreeTree(la->nodetree);
+		MEM_freeN(la->nodetree);
+	}
 	
 	BKE_previewimg_free(&la->preview);
 	BKE_icon_delete(&la->id);

Modified: trunk/blender/source/blender/blenkernel/intern/world.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/world.c	2011-11-02 18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/blenkernel/intern/world.c	2011-11-02 18:55:32 UTC (rev 41474)
@@ -42,12 +42,14 @@
 #include "BLI_utildefines.h"
 #include "BLI_bpath.h"
 
-#include "BKE_world.h"
-#include "BKE_library.h"
 #include "BKE_animsys.h"
 #include "BKE_global.h"
+#include "BKE_icons.h"
+#include "BKE_library.h"
+#include "BKE_library.h"
 #include "BKE_main.h"
-#include "BKE_icons.h"
+#include "BKE_node.h"
+#include "BKE_world.h"
 
 void free_world(World *wrld)
 {
@@ -63,6 +65,12 @@
 
 	BKE_free_animdata((ID *)wrld);
 
+	/* is no lib link block, but world extension */
+	if(wrld->nodetree) {
+		ntreeFreeTree(wrld->nodetree);
+		MEM_freeN(wrld->nodetree);
+	}
+
 	BKE_icon_delete((struct ID*)wrld);
 	wrld->id.icon_id = 0;
 }
@@ -119,6 +127,9 @@
 			id_us_plus((ID *)wrldn->mtex[a]->tex);
 		}
 	}
+
+	if(wrld->nodetree)
+		wrldn->nodetree= ntreeCopyTree(wrld->nodetree);
 	
 	if(wrld->preview)
 		wrldn->preview = BKE_previewimg_copy(wrld->preview);
@@ -143,6 +154,9 @@
 		}
 	}
 
+	if(wrld->nodetree)
+		wrldn->nodetree= ntreeLocalize(wrld->nodetree);
+	
 	wrldn->preview= NULL;
 	
 	return wrldn;

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2011-11-02 18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2011-11-02 18:55:32 UTC (rev 41474)
@@ -2182,6 +2182,7 @@
 		for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next)
 			if (ntree->update)
 				ntreeUpdateTree(ntree);
+
 		for (i=0; i < NUM_NTREE_TYPES; ++i) {
 			ntreetype= ntreeGetType(i);
 			if (ntreetype && ntreetype->foreach_nodetree)
@@ -2507,6 +2508,9 @@
 			}
 			
 			la->ipo= newlibadr_us(fd, la->id.lib, la->ipo); // XXX depreceated - old animation system
+
+			if(la->nodetree)
+				lib_link_ntree(fd, &la->id, la->nodetree);
 			
 			la->id.flag -= LIB_NEEDLINK;
 		}
@@ -2528,6 +2532,10 @@
 	la->curfalloff= newdataadr(fd, la->curfalloff);
 	if(la->curfalloff)
 		direct_link_curvemapping(fd, la->curfalloff);
+
+	la->nodetree= newdataadr(fd, la->nodetree);
+	if(la->nodetree)
+		direct_link_nodetree(fd, la->nodetree);
 	
 	la->preview = direct_link_preview_image(fd, la->preview);
 }
@@ -2670,6 +2678,9 @@
 					mtex->object= newlibadr(fd, wrld->id.lib, mtex->object);
 				}
 			}
+
+			if(wrld->nodetree)
+				lib_link_ntree(fd, &wrld->id, wrld->nodetree);
 			
 			wrld->id.flag -= LIB_NEEDLINK;
 		}
@@ -2687,6 +2698,11 @@
 	for(a=0; a<MAX_MTEX; a++) {
 		wrld->mtex[a]= newdataadr(fd, wrld->mtex[a]);
 	}
+
+	wrld->nodetree= newdataadr(fd, wrld->nodetree);
+	if(wrld->nodetree)
+		direct_link_nodetree(fd, wrld->nodetree);
+
 	wrld->preview = direct_link_preview_image(fd, wrld->preview);
 }
 
@@ -5004,6 +5020,10 @@
 							if(snode->id) {
 								if(GS(snode->id->name)==ID_MA)
 									snode->nodetree= ((Material *)snode->id)->nodetree;
+								else if(GS(snode->id->name)==ID_WO)
+									snode->nodetree= ((World *)snode->id)->nodetree;
+								else if(GS(snode->id->name)==ID_LA)
+									snode->nodetree= ((Lamp *)snode->id)->nodetree;
 								else if(GS(snode->id->name)==ID_SCE)
 									snode->nodetree= ((Scene *)snode->id)->nodetree;
 								else if(GS(snode->id->name)==ID_TE)
@@ -12723,6 +12743,9 @@
 	
 	if (la->adt)
 		expand_animdata(fd, mainvar, la->adt);
+
+	if(la->nodetree)
+		expand_nodetree(fd, mainvar, la->nodetree);
 }
 
 static void expand_lattice(FileData *fd, Main *mainvar, Lattice *lt)
@@ -12750,6 +12773,9 @@
 	
 	if (wrld->adt)
 		expand_animdata(fd, mainvar, wrld->adt);
+
+	if(wrld->nodetree)
+		expand_nodetree(fd, mainvar, wrld->nodetree);
 }
 
 

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c	2011-11-02 18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c	2011-11-02 18:55:32 UTC (rev 41474)
@@ -1857,6 +1857,12 @@
 			for(a=0; a<MAX_MTEX; a++) {
 				if(wrld->mtex[a]) writestruct(wd, DATA, "MTex", 1, wrld->mtex[a]);
 			}
+
+			/* nodetree is integral part of lamps, no libdata */
+			if(wrld->nodetree) {
+				writestruct(wd, DATA, "bNodeTree", 1, wrld->nodetree);
+				write_nodetree(wd, wrld->nodetree);
+			}
 			
 			write_previews(wd, wrld->preview);
 		}
@@ -1886,6 +1892,12 @@
 			if(la->curfalloff)
 				write_curvemapping(wd, la->curfalloff);	
 			
+			/* nodetree is integral part of lamps, no libdata */
+			if(la->nodetree) {
+				writestruct(wd, DATA, "bNodeTree", 1, la->nodetree);
+				write_nodetree(wd, la->nodetree);
+			}
+
 			write_previews(wd, la->preview);
 			
 		}

Modified: trunk/blender/source/blender/editors/include/ED_node.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_node.h	2011-11-02 18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/editors/include/ED_node.h	2011-11-02 18:55:32 UTC (rev 41474)
@@ -51,7 +51,7 @@
 void ED_node_generic_update(struct Main *bmain, struct bNodeTree *ntree, struct bNode *node);
 
 /* node_edit.c */
-void ED_node_shader_default(struct Material *ma);
+void ED_node_shader_default(struct Scene *scene, struct ID *id);
 void ED_node_composit_default(struct Scene *sce);
 void ED_node_texture_default(struct Tex *tex);
 void ED_node_link_intersect_test(struct ScrArea *sa, int test);

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c	2011-11-02 18:20:53 UTC (rev 41473)
+++ trunk/blender/source/blender/editors/render/render_preview.c	2011-11-02 18:55:32 UTC (rev 41474)
@@ -420,6 +420,12 @@
 						base->object->data= la;
 				}
 			}
+
+			if(la && la->nodetree && sp->pr_method==PR_NODE_RENDER) {
+				/* two previews, they get copied by wmJob */
+				ntreeInitPreview(origla->nodetree, sp->sizex, sp->sizey);
+				ntreeInitPreview(la->nodetree, sp->sizex, sp->sizey);
+			}
 		}
 		else if(id_type==ID_WO) {
 			World *wrld= NULL, *origwrld= (World *)id;
@@ -432,6 +438,12 @@
 
 			sce->lay= 1<<MA_SKY;
 			sce->world= wrld;
+
+			if(wrld && wrld->nodetree && sp->pr_method==PR_NODE_RENDER) {
+				/* two previews, they get copied by wmJob */
+				ntreeInitPreview(wrld->nodetree, sp->sizex, sp->sizey);
+				ntreeInitPreview(origwrld->nodetree, sp->sizex, sp->sizey);
+			}
 		}
 		
 		return sce;
@@ -566,6 +578,18 @@
 				if(sp->texcopy && tex->nodetree && sp->texcopy->nodetree)
 					ntreeLocalSync(sp->texcopy->nodetree, tex->nodetree);
 			}
+			else if( GS(sp->id->name) == ID_WO) {
+				World *wrld= (World *)sp->id;
+				
+				if(sp->worldcopy && wrld->nodetree && sp->worldcopy->nodetree)
+					ntreeLocalSync(sp->worldcopy->nodetree, wrld->nodetree);
+			}
+			else if( GS(sp->id->name) == ID_LA) {
+				Lamp *la= (Lamp *)sp->id;
+				
+				if(sp->lampcopy && la->nodetree && sp->lampcopy->nodetree)
+					ntreeLocalSync(sp->lampcopy->nodetree, la->nodetree);
+			}
 		}		
 	}
 }

Modified: trunk/blender/source/blender/editors/render/render_update.c

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list