[Bf-blender-cvs] [db7d18f] bake-cycles: Cycles-Bake: Fix for "missing" rays generating spurious result in tangent maps

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


Commit: db7d18f70f39b2da7a15d52acc6eaf6775230716
Author: Dalai Felinto
Date:   Wed Mar 19 16:16:52 2014 -0300
https://developer.blender.org/rBdb7d18f70f39b2da7a15d52acc6eaf6775230716

Cycles-Bake: Fix for "missing" rays generating spurious result in tangent maps

missing rays are rays cast from the low poly mesh (or the cage) that dont hit the high poly object

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

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 b58d243..991dc9d 100644
--- a/source/blender/editors/object/object_bake_new.c
+++ b/source/blender/editors/object/object_bake_new.c
@@ -376,6 +376,9 @@ static int bake_exec(bContext *C, wmOperator *op)
 				me_low = BKE_mesh_new_from_object(bmain, scene, ob_low, 1, 2, 1, 0);
 				RE_populate_bake_pixels(me_low, pixel_array_low, width, height);
 			}
+
+			/* need to make sure missed rays are masked out of the result */
+			RE_mask_bake_pixels(pixel_array_high, pixel_array_low, width, height);
 		}
 		else {
 			/* re-use the same BakePixel array */
diff --git a/source/blender/render/extern/include/RE_bake.h b/source/blender/render/extern/include/RE_bake.h
index 395dcb8..6e9e7c2 100644
--- a/source/blender/render/extern/include/RE_bake.h
+++ b/source/blender/render/extern/include/RE_bake.h
@@ -51,6 +51,11 @@ bool RE_engine_bake(struct Render *re, struct Object *object, struct BakePixel p
 int RE_pass_depth(ScenePassType pass_type);
 bool RE_internal_bake(struct Render *re, struct Object *object, struct BakePixel pixel_array[], int num_pixels, int depth, ScenePassType pass_type, float result[]);
 
+
+void RE_mask_bake_pixels(struct BakePixel pixel_array_from[],
+                         struct BakePixel pixel_array_to[],
+						 const int width, const int height);
+
 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);
diff --git a/source/blender/render/intern/source/bake_new.c b/source/blender/render/intern/source/bake_new.c
index 7ca48e1..0266706 100644
--- a/source/blender/render/intern/source/bake_new.c
+++ b/source/blender/render/intern/source/bake_new.c
@@ -429,6 +429,17 @@ void RE_populate_bake_pixels_from_object(Mesh *me_low, Mesh *me_high,
 	MEM_freeN(tris_high);
 }
 
+void RE_mask_bake_pixels(BakePixel pixel_array_from[], BakePixel pixel_array_to[], const int width, const int height)
+{
+	int i;
+	const int num_pixels = width * height;
+
+	for (i = 0; i < num_pixels; i++) {
+		if (pixel_array_from[i].primitive_id == -1)
+			pixel_array_to[i].primitive_id = -1;
+	}
+}
+
 void RE_populate_bake_pixels(Mesh *me, BakePixel pixel_array[], const int width, const int height)
 {
 	BakeData bd;




More information about the Bf-blender-cvs mailing list