[Bf-blender-cvs] [17cd9adbde9] usd-importer-T81257-merge: USD import: Handle empty vertex-varying normals.
makowalski
noreply at git.blender.org
Mon Feb 8 22:21:43 CET 2021
Commit: 17cd9adbde9df63d2fa700a303d7ea1fef4ff332
Author: makowalski
Date: Mon Feb 8 11:58:14 2021 -0500
Branches: usd-importer-T81257-merge
https://developer.blender.org/rB17cd9adbde9df63d2fa700a303d7ea1fef4ff332
USD import: Handle empty vertex-varying normals.
If point normals are empty, now invoking BKE_mesh_calc_normals()
to avoid black renders. Since BKE_mesh_calc_normals() requires
edges to be defined, moving point normal calculation to follow
reading polys.
===================================================================
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 75f666db1d1..8afd8378386 100644
--- a/source/blender/io/usd/intern/usd_reader_mesh.cc
+++ b/source/blender/io/usd/intern/usd_reader_mesh.cc
@@ -486,6 +486,11 @@ void USDMeshReader::read_vels(Mesh *mesh,
void USDMeshReader::process_normals_vertex_varying(Mesh *mesh)
{
+ if (m_normals.empty()) {
+ BKE_mesh_calc_normals(mesh);
+ return;
+ }
+
for (int i = 0; i < m_normals.size(); i++) {
MVert &mvert = mesh->mvert[i];
normal_float_to_short_v3(mvert.no, m_normals[i].data());
@@ -565,9 +570,6 @@ void USDMeshReader::read_mesh_sample(const std::string &iobject_full_name,
mvert.co[1] = m_positions[i][1];
mvert.co[2] = m_positions[i][2];
}
-
- if (m_normalInterpolation == pxr::UsdGeomTokens->vertex)
- process_normals_vertex_varying(mesh);
}
if ((settings->read_flag & MOD_MESHSEQ_READ_POLY) != 0) {
@@ -576,6 +578,15 @@ void USDMeshReader::read_mesh_sample(const std::string &iobject_full_name,
process_normals_face_varying(mesh);
}
+ // Process point normals after reading polys. This
+ // is important in the case where the normals are empty
+ // and we invoke BKE_mesh_calc_normals(mesh), which requires
+ // edges to be defined.
+ if ((settings->read_flag & MOD_MESHSEQ_READ_VERT) != 0 &&
+ m_normalInterpolation == pxr::UsdGeomTokens->vertex) {
+ process_normals_vertex_varying(mesh);
+ }
+
if ((settings->read_flag & MOD_MESHSEQ_READ_UV) != 0) {
read_uvs(mesh, mesh_prim, motionSampleTime, new_mesh);
}
More information about the Bf-blender-cvs
mailing list