[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