[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12711] trunk/blender/source/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Nov 28 23:21:12 CET 2007


Revision: 12711
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12711
Author:   blendix
Date:     2007-11-28 23:21:12 +0100 (Wed, 28 Nov 2007)

Log Message:
-----------

Render Baking
=============

A new "Selected to Active" option in the Bake panel, to (typically) bake
a high poly object onto a low poly object. Code based on patch #7339 by
Frank Richter (Crystal Space developer), thanks!.

Normal Mapping
==============

Camera, World, Object and Tangent space is now supported for baking, and
for material textures. The "NMap TS" setting is replaced with a dropdown
of the four choices in the image texture buttons.


http://www.blender.org/development/current-projects/changes-since-244/render-baking/

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_blender.h
    trunk/blender/source/blender/blenkernel/intern/displist.c
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenkernel/intern/texture.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesdna/DNA_texture_types.h
    trunk/blender/source/blender/render/extern/include/RE_pipeline.h
    trunk/blender/source/blender/render/extern/include/RE_raytrace.h
    trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
    trunk/blender/source/blender/render/intern/include/render_types.h
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/rayshade.c
    trunk/blender/source/blender/render/intern/source/raytrace.c
    trunk/blender/source/blender/render/intern/source/rendercore.c
    trunk/blender/source/blender/render/intern/source/renderdatabase.c
    trunk/blender/source/blender/render/intern/source/shadeinput.c
    trunk/blender/source/blender/render/intern/source/texture.c
    trunk/blender/source/blender/src/buttons_editing.c
    trunk/blender/source/blender/src/buttons_scene.c
    trunk/blender/source/blender/src/buttons_shading.c
    trunk/blender/source/blender/src/meshtools.c

Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_blender.h	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/blenkernel/BKE_blender.h	2007-11-28 22:21:12 UTC (rev 12711)
@@ -44,7 +44,7 @@
 struct MemFile;
 
 #define BLENDER_VERSION			245
-#define BLENDER_SUBVERSION		8
+#define BLENDER_SUBVERSION		9
 
 #define BLENDER_MINVERSION		240
 #define BLENDER_MINSUBVERSION	0

Modified: trunk/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/displist.c	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/blenkernel/intern/displist.c	2007-11-28 22:21:12 UTC (rev 12711)
@@ -296,7 +296,7 @@
 	if(re==NULL) {
 		re= RE_NewRender("_Shade View_");
 	
-		RE_Database_Baking(re, G.scene, 0);	/* 0= no faces */
+		RE_Database_Baking(re, G.scene, 0, 0);	/* 0= no faces */
 	}
 	return re;
 }

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2007-11-28 22:21:12 UTC (rev 12711)
@@ -629,7 +629,7 @@
 static void do_init_render_material(Material *ma, int r_mode, float *amb)
 {
 	MTex *mtex;
-	int a, needuv=0;
+	int a, needuv=0, needtang=0;
 	
 	if(ma->flarec==0) ma->flarec= 1;
 
@@ -653,8 +653,14 @@
 			if(ma->texco & (TEXCO_ORCO|TEXCO_REFL|TEXCO_NORM|TEXCO_STRAND|TEXCO_STRESS)) needuv= 1;
 			else if(ma->texco & (TEXCO_GLOB|TEXCO_UV|TEXCO_OBJECT|TEXCO_SPEED)) needuv= 1;
 			else if(ma->texco & (TEXCO_LAVECTOR|TEXCO_VIEW|TEXCO_STICKY)) needuv= 1;
+
+			if((ma->mapto & MAP_NORM) && (mtex->normapspace == MTEX_NSPACE_TANGENT))
+				needtang= 1;
 		}
 	}
+
+	if(needtang) ma->mode |= MA_NORMAP_TANG;
+	else ma->mode &= ~MA_NORMAP_TANG;
 	
 	if(r_mode & R_RADIO)
 		if(ma->mode & MA_RADIO) needuv= 1;

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2007-11-28 22:21:12 UTC (rev 12711)
@@ -206,6 +206,7 @@
 	sce->r.bake_filter= 2;
 	sce->r.bake_osa= 5;
 	sce->r.bake_flag= R_BAKE_CLEAR;
+	sce->r.bake_normal_space= R_BAKE_SPACE_TANGENT;
 	
 	sce->r.xplay= 640;
 	sce->r.yplay= 480;

Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c	2007-11-28 22:21:12 UTC (rev 12711)
@@ -517,6 +517,7 @@
 	mtex->norfac= 0.5;
 	mtex->varfac= 1.0;
 	mtex->dispfac=0.2;
+	mtex->normapspace= MTEX_NSPACE_TANGENT;
 }
 
 

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2007-11-28 22:21:12 UTC (rev 12711)
@@ -7170,6 +7170,16 @@
 			}
 		}
 	}
+	if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 9)) {
+		Material *ma;
+		int a;
+
+		for(ma=main->mat.first; ma; ma= ma->id.next)
+			if(ma->mode & MA_NORMAP_TANG)
+				for(a=0; a<MAX_MTEX; a++)
+					if(ma->mtex[a] && ma->mtex[a]->tex)
+						ma->mtex[a]->normapspace = MTEX_NSPACE_TANGENT;
+	}
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
 	/* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
 

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2007-11-28 22:21:12 UTC (rev 12711)
@@ -265,6 +265,8 @@
 	
 	/* Bake Render options */
 	short bake_osa, bake_filter, bake_mode, bake_flag;
+	short bake_normal_space, bpad;
+	float bake_maxdist;
 	
 	/* yafray: global panel params. TODO: move elsewhere */
 	short GIquality, GIcache, GImethod, GIphotons, GIdirect;
@@ -605,9 +607,16 @@
 
 /* bake_mode: same as RE_BAKE_xxx defines */
 /* bake_flag: */
-#define R_BAKE_CLEAR	1
-#define R_BAKE_OSA		2
+#define R_BAKE_CLEAR		1
+#define R_BAKE_OSA			2
+#define R_BAKE_TO_ACTIVE	4
 
+/* bake_normal_space */
+#define R_BAKE_SPACE_CAMERA	 0
+#define R_BAKE_SPACE_WORLD	 1
+#define R_BAKE_SPACE_OBJECT	 2
+#define R_BAKE_SPACE_TANGENT 3
+
 /* **************** SCENE ********************* */
 #define RAD_PHASE_PATCHES	1
 #define RAD_PHASE_FACES		2

Modified: trunk/blender/source/blender/makesdna/DNA_texture_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_texture_types.h	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/makesdna/DNA_texture_types.h	2007-11-28 22:21:12 UTC (rev 12711)
@@ -58,6 +58,7 @@
 	float ofs[3], size[3];
 	
 	short texflag, colormodel, pmapto, pmaptoneg;
+	short normapspace, pad[3];
 	float r, g, b, k;
 	float def_var, rt;
 	
@@ -157,7 +158,7 @@
 	float cropxmin, cropymin, cropxmax, cropymax;
 	short xrepeat, yrepeat;
 	short extend;
-	
+
 	/* variables disabled, moved to struct iuser */
 	short fie_ima;
 	int len;
@@ -319,6 +320,12 @@
 #define TEX_COL2		2
 #define TEX_COL3		3
 
+/* mtex->normapspace */
+#define MTEX_NSPACE_CAMERA	0
+#define MTEX_NSPACE_WORLD	1
+#define MTEX_NSPACE_OBJECT	2
+#define MTEX_NSPACE_TANGENT	3
+
 /* wrap */
 #define MTEX_FLAT		0
 #define MTEX_CUBE		1

Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2007-11-28 22:21:12 UTC (rev 12711)
@@ -37,6 +37,7 @@
 struct Scene;
 struct RenderData;
 struct NodeBlurData;
+struct Object;
 
 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
 /* this include is what is exposed of render to outside world */
@@ -209,7 +210,7 @@
 #define RE_BAKE_AO		2
 #define RE_BAKE_NORMALS	3
 #define RE_BAKE_TEXTURE	4
-void RE_Database_Baking(struct Render *re, struct Scene *scene, int type);
+void RE_Database_Baking(struct Render *re, struct Scene *scene, int type, struct Object *actob);
 
 void RE_DataBase_GetView(struct Render *re, float mat[][4]);
 

Modified: trunk/blender/source/blender/render/extern/include/RE_raytrace.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_raytrace.h	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/render/extern/include/RE_raytrace.h	2007-11-28 22:21:12 UTC (rev 12711)
@@ -64,6 +64,9 @@
 	RayFace *facecontr;
 	float ddalabda;
 	short faceisect;		/* flag if facecontr was done or not */
+
+	/* custom pointer to be used in the RayCheckFunc */
+	void *userdata;
 } Isect;
 
 /* function callbacks for face type abstraction */
@@ -80,6 +83,7 @@
 
 /* intersection with full tree and single face */
 int RE_ray_tree_intersect(RayTree *tree, Isect *is);
+int RE_ray_tree_intersect_check(RayTree *tree, Isect *is, RayCheckFunc check);
 int RE_ray_face_intersection(Isect *is, RayCoordsFunc coordsfunc);
 
 /* retrieve the diameter of the tree structure, for setting intersection

Modified: trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_shader_ext.h	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/render/extern/include/RE_shader_ext.h	2007-11-28 22:21:12 UTC (rev 12711)
@@ -173,9 +173,10 @@
 /* shaded view and bake */
 struct Render;
 struct Image;
+struct Object;
 
 void RE_shade_external(struct Render *re, struct ShadeInput *shi, struct ShadeResult *shr);
-int RE_bake_shade_all_selected(struct Render *re, int type);
+int RE_bake_shade_all_selected(struct Render *re, int type, struct Object *actob);
 struct Image *RE_bake_shade_get_image(void);
 
 #endif /* RE_SHADER_EXT_H */

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2007-11-28 22:21:12 UTC (rev 12711)
@@ -181,6 +181,8 @@
 
 	ListBase customdata_names;
 
+	struct Object *excludeob;
+
 	/* arena for allocating data for use during render, for
 		* example dynamic TFaces to go in the VlakRen structure.
 		*/
@@ -394,6 +396,7 @@
 #define R_SEC_FIELD		4
 #define R_LAMPHALO		8
 #define R_GLOB_NOPUNOFLIP	16
+#define R_NEED_TANGENT	32
 
 /* vlakren->flag (vlak = face in dutch) char!!! */
 #define R_SMOOTH		1

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2007-11-28 21:42:27 UTC (rev 12710)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2007-11-28 22:21:12 UTC (rev 12711)
@@ -447,14 +447,39 @@
 	MEM_freeN(accum);
 }
 
+void tangent_from_uv(float *uv1, float *uv2, float *uv3, float *co1, float *co2, float *co3, float *n, float *tang)
+{
+	float tangv[3], ct[3], e1[3], e2[3], s1, t1, s2, t2, det;
+
+	s1= uv2[0] - uv1[0];
+	s2= uv3[0] - uv1[0];
+	t1= uv2[1] - uv1[1];
+	t2= uv3[1] - uv1[1];
+	det= 1.0f / (s1 * t2 - s2 * t1);
+	
+	/* normals in render are inversed... */
+	VecSubf(e1, co1, co2);
+	VecSubf(e2, co1, co3);
+	tang[0] = (t2*e1[0] - t1*e2[0])*det;
+	tang[1] = (t2*e1[1] - t1*e2[1])*det;
+	tang[2] = (t2*e1[2] - t1*e2[2])*det;
+	tangv[0] = (s1*e2[0] - s2*e1[0])*det;
+	tangv[1] = (s1*e2[1] - s2*e1[1])*det;
+	tangv[2] = (s1*e2[2] - s2*e1[2])*det;
+	Crossf(ct, tang, tangv);
+
+	/* check flip */

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list