Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2016-02-14 03:54:09 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2016-02-14 05:51:41 +0300
commit3143ec29d0577948f2f7750c47a6a84ab33f39d7 (patch)
tree6d390d218b0bd0c5725421d27c7d6369a141007a /source/blender/editors/object/object_bake_api.c
parentf6f851d28ae35deb98604f9d62369a69a3988b3b (diff)
Fix T45606: cycles multires tangent space normal map bake issues.
Diffstat (limited to 'source/blender/editors/object/object_bake_api.c')
-rw-r--r--source/blender/editors/object/object_bake_api.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/source/blender/editors/object/object_bake_api.c b/source/blender/editors/object/object_bake_api.c
index 51affb3e1fc..3c9b43b4278 100644
--- a/source/blender/editors/object/object_bake_api.c
+++ b/source/blender/editors/object/object_bake_api.c
@@ -647,6 +647,9 @@ static int bake(
Mesh *me_low = NULL;
Mesh *me_cage = NULL;
+ MultiresModifierData *mmd_low = NULL;
+ int mmd_flags_low = 0;
+
float *result = NULL;
BakePixel *pixel_array_low = NULL;
@@ -762,6 +765,17 @@ static int bake(
pixel_array_high = MEM_mallocN(sizeof(BakePixel) * num_pixels, "bake pixels high poly");
result = MEM_callocN(sizeof(float) * depth * num_pixels, "bake return pixels");
+ /* for multires bake, use linear UV subdivision to match low res UVs */
+ if (pass_type == SCE_PASS_NORMAL && normal_space == R_BAKE_SPACE_TANGENT && !is_selected_to_active)
+ {
+ mmd_low = (MultiresModifierData *) modifiers_findByType(ob_low, eModifierType_Multires);
+ if (mmd_low)
+ {
+ mmd_flags_low = mmd_low->flags;
+ mmd_low->flags |= eMultiresModifierFlag_PlainUv;
+ }
+ }
+
/* get the mesh as it arrives in the renderer */
me_low = bake_mesh_new_from_object(bmain, scene, ob_low);
@@ -1063,6 +1077,9 @@ cleanup:
ob_low->restrictflag = restrict_flag_low;
+ if (mmd_low)
+ mmd_low->flags = mmd_flags_low;
+
if (ob_cage)
ob_cage->restrictflag = restrict_flag_cage;