[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