[Bf-blender-cvs] [63adcda7da0] usd-importer-T81257-merge: Apply orientation when importing USD normals.

makowalski noreply at git.blender.org
Mon Feb 8 22:21:44 CET 2021


Commit: 63adcda7da073abcb0bb2a78921417a12afceb19
Author: makowalski
Date:   Mon Feb 8 16:14:47 2021 -0500
Branches: usd-importer-T81257-merge
https://developer.blender.org/rB63adcda7da073abcb0bb2a78921417a12afceb19

Apply orientation when importing USD normals.

Also added check to ensure normal and loop counts match.

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

M	source/blender/io/usd/intern/usd_reader_mesh.cc

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

diff --git a/source/blender/io/usd/intern/usd_reader_mesh.cc b/source/blender/io/usd/intern/usd_reader_mesh.cc
index e48ce812a2e..9c735e930f0 100644
--- a/source/blender/io/usd/intern/usd_reader_mesh.cc
+++ b/source/blender/io/usd/intern/usd_reader_mesh.cc
@@ -510,7 +510,14 @@ void USDMeshReader::process_normals_vertex_varying(Mesh *mesh)
 
 void USDMeshReader::process_normals_face_varying(Mesh *mesh)
 {
-  if (m_normals.size() <= 0) {
+  if (m_normals.empty()) {
+    BKE_mesh_calc_normals(mesh);
+    return;
+  }
+
+  // Check for normals count mismatches to prevent crashes.
+  if (m_normals.size() != mesh->totloop) {
+    std::cerr << "WARNING: loop normal count mismatch for mesh " << mesh->id.name << std::endl;
     BKE_mesh_calc_normals(mesh);
     return;
   }
@@ -523,12 +530,19 @@ void USDMeshReader::process_normals_face_varying(Mesh *mesh)
       MEM_malloc_arrayN(loop_count, sizeof(float[3]), "USD::FaceNormals"));
 
   MPoly *mpoly = mesh->mpoly;
-  int usd_index = 0;
 
   for (int i = 0, e = mesh->totpoly; i < e; ++i, ++mpoly) {
-    for (int j = 0; j < mpoly->totloop; j++, usd_index++) {
+    for (int j = 0; j < mpoly->totloop; j++) {
       int blender_index = mpoly->loopstart + j;
 
+      int usd_index = mpoly->loopstart;
+      if (m_isLeftHanded) {
+        usd_index += mpoly->totloop - 1 - j;
+      }
+      else {
+        usd_index += j;
+      }
+
       lnors[blender_index][0] = m_normals[usd_index][0];
       lnors[blender_index][1] = m_normals[usd_index][1];
       lnors[blender_index][2] = m_normals[usd_index][2];



More information about the Bf-blender-cvs mailing list