[Bf-blender-cvs] [2b9b69f] bake-cycles: Cycles-Bake: Selected to Active - using global coordinates

Dalai Felinto noreply at git.blender.org
Wed Apr 23 02:47:36 CEST 2014


Commit: 2b9b69fce0e285b960513e89b1f9b74ba44948a2
Author: Dalai Felinto
Date:   Sat Mar 22 16:41:29 2014 -0300
https://developer.blender.org/rB2b9b69fce0e285b960513e89b1f9b74ba44948a2

Cycles-Bake: Selected to Active - using global coordinates

The user no longer needs to apply the transformation before baking

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

M	source/blender/editors/object/object_bake_new.c
M	source/blender/render/extern/include/RE_bake.h
M	source/blender/render/intern/source/bake_new.c

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

diff --git a/source/blender/editors/object/object_bake_new.c b/source/blender/editors/object/object_bake_new.c
index 97c5047..e089017 100644
--- a/source/blender/editors/object/object_bake_new.c
+++ b/source/blender/editors/object/object_bake_new.c
@@ -326,9 +326,13 @@ static int bake_exec(bContext *C, wmOperator *op)
 		ModifierData *md, *nmd;
 		TriangulateModifierData *tmd;
 		ListBase modifiers_tmp, modifiers_original;
+		float mat_low2high[4][4];
 
 		if (ob_custom_cage) {
 			me_low = BKE_mesh_new_from_object(bmain, scene, ob_custom_cage, 1, 2, 1, 0);
+
+			invert_m4_m4(mat_low2high, ob_high->obmat);
+			mul_m4_m4m4(mat_low2high, mat_low2high, ob_custom_cage->obmat);
 		}
 		else {
 			modifiers_original = ob_low->modifiers;
@@ -351,6 +355,9 @@ static int bake_exec(bContext *C, wmOperator *op)
 
 			/* get the cage mesh as it arrives in the renderer */
 			me_low = BKE_mesh_new_from_object(bmain, scene, ob_low, 1, 2, 1, 0);
+
+			invert_m4_m4(mat_low2high, ob_high->obmat);
+			mul_m4_m4m4(mat_low2high, mat_low2high, ob_low->obmat);
 		}
 
 		/* populate the pixel array with the face data */
@@ -366,7 +373,7 @@ static int bake_exec(bContext *C, wmOperator *op)
 
 		if (is_tangent) {
 			pixel_array_high = MEM_callocN(sizeof(BakePixel) * num_pixels, "bake pixels high poly");
-			RE_populate_bake_pixels_from_object(me_low, me_high, pixel_array_low, pixel_array_high, num_pixels, cage_extrusion);
+			RE_populate_bake_pixels_from_object(me_low, me_high, pixel_array_low, pixel_array_high, num_pixels, cage_extrusion, mat_low2high);
 			pixel_array_render = pixel_array_high;
 
 			/* we need the pixel array to get normals and tangents from the original mesh */
@@ -382,7 +389,7 @@ static int bake_exec(bContext *C, wmOperator *op)
 		}
 		else {
 			/* re-use the same BakePixel array */
-			RE_populate_bake_pixels_from_object(me_low, me_high, pixel_array_low, pixel_array_low, num_pixels, cage_extrusion);
+			RE_populate_bake_pixels_from_object(me_low, me_high, pixel_array_low, pixel_array_low, num_pixels, cage_extrusion, mat_low2high);
 			pixel_array_render = pixel_array_low;
 		}
 
diff --git a/source/blender/render/extern/include/RE_bake.h b/source/blender/render/extern/include/RE_bake.h
index 6e9e7c2..b972021 100644
--- a/source/blender/render/extern/include/RE_bake.h
+++ b/source/blender/render/extern/include/RE_bake.h
@@ -58,7 +58,8 @@ void RE_mask_bake_pixels(struct BakePixel pixel_array_from[],
 
 void RE_populate_bake_pixels_from_object(struct Mesh *me_low, struct Mesh *me_high,
                                          struct BakePixel pixel_array_from[], struct BakePixel pixel_array_to[],
-                                         const int num_pixels, const float cage_extrusion);
+                                         const int num_pixels, const float cage_extrusion,
+                                         float mat_low2high[4][4]);
 
 void RE_populate_bake_pixels(struct Mesh *me, struct BakePixel pixel_array[], const int width, const int height);
 
diff --git a/source/blender/render/intern/source/bake_new.c b/source/blender/render/intern/source/bake_new.c
index 0266706..8c051ce 100644
--- a/source/blender/render/intern/source/bake_new.c
+++ b/source/blender/render/intern/source/bake_new.c
@@ -365,7 +365,7 @@ static void calculateTriTessFace(TriTessFace *triangles, Mesh *me, int (*lookup_
 
 void RE_populate_bake_pixels_from_object(Mesh *me_low, Mesh *me_high,
                                          BakePixel pixel_array_from[], BakePixel pixel_array_to[],
-                                         const int num_pixels, const float cage_extrusion)
+                                         const int num_pixels, const float cage_extrusion, float mat_low2high[4][4])
 {
 	int i;
 	int primitive_id;
@@ -416,6 +416,9 @@ void RE_populate_bake_pixels_from_object(Mesh *me_low, Mesh *me_high,
 		/* calculate from low poly mesh cage */
 		get_point_from_barycentric(tris_low, primitive_id, u, v, cage_extrusion, co, dir);
 
+		/* transform the ray from the low poly to the high poly space */
+		mul_m4_v3(mat_low2high, co);
+
 		/* cast ray */
 		cast_ray_highpoly(&treeData, tris_high, &pixel_array_to[i], co, dir);
 	}




More information about the Bf-blender-cvs mailing list