[Bf-blender-cvs] [07dc383f4b1] blender-v3.1-release: Fix T96401: Broken multires baked normals result

Hans Goudey noreply at git.blender.org
Thu Mar 24 09:07:13 CET 2022


Commit: 07dc383f4b19e5a30dd5dced3cda7cd6160cb962
Author: Hans Goudey
Date:   Mon Mar 21 16:55:55 2022 -0500
Branches: blender-v3.1-release
https://developer.blender.org/rB07dc383f4b19e5a30dd5dced3cda7cd6160cb962

Fix T96401: Broken  multires baked normals result

A 7 year old commit, 2ec00ea0c1be1ace7c, used incorrect indexing for
the optional array of precomputed poly normals. Apparently that code
path was never used, or this issue would have been discovered earlier.
Recent changes calculate normals on a temporary mesh and use those
for the "low-res" layer, meaning the precomputed path was always taken.

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

M	source/blender/render/intern/multires_bake.c

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

diff --git a/source/blender/render/intern/multires_bake.c b/source/blender/render/intern/multires_bake.c
index 73f925f5905..f804877db3e 100644
--- a/source/blender/render/intern/multires_bake.c
+++ b/source/blender/render/intern/multires_bake.c
@@ -82,7 +82,7 @@ typedef struct {
   MLoopUV *mloopuv;
   const MLoopTri *mlooptri;
   float *pvtangent;
-  const float *precomputed_normals;
+  const float (*precomputed_normals)[3];
   int w, h;
   int tri_index;
   DerivedMesh *lores_dm, *hires_dm;
@@ -132,7 +132,7 @@ static void multiresbake_get_normal(const MResolvePixelData *data,
 
   if (!smoothnormal) { /* flat */
     if (data->precomputed_normals) {
-      copy_v3_v3(norm, &data->precomputed_normals[poly_index]);
+      copy_v3_v3(norm, data->precomputed_normals[poly_index]);
     }
     else {
       BKE_mesh_calc_poly_normal(mp, &data->mloop[mp->loopstart], data->mvert, norm);
@@ -558,7 +558,7 @@ static void do_multires_bake(MultiresBakeRender *bkr,
       handle->data.mlooptri = mlooptri;
       handle->data.mloop = mloop;
       handle->data.pvtangent = pvtangent;
-      handle->data.precomputed_normals = (float *)poly_normals; /* don't strictly need this */
+      handle->data.precomputed_normals = poly_normals; /* don't strictly need this */
       handle->data.w = ibuf->x;
       handle->data.h = ibuf->y;
       handle->data.lores_dm = dm;



More information about the Bf-blender-cvs mailing list