From ee84d53cdca42b811822f0f39ef660313cedb68c Mon Sep 17 00:00:00 2001 From: Preben Eriksen Date: Tue, 29 Nov 2022 11:09:34 +0100 Subject: [PATCH] PE: Support normal generation when using assimp importer. --- .../Tools/ModelTool/ModelTool.Assimp.cpp | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp b/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp index 6d06961dd..7f3cfbba0 100644 --- a/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp +++ b/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp @@ -248,18 +248,6 @@ bool ProcessMesh(ImportedModelData& result, AssimpImporterData& data, const aiMe } } - // Normals - if (aMesh->mNormals) - { - mesh.Normals.Set((const Float3*)aMesh->mNormals, aMesh->mNumVertices); - } - - // Tangents - if (aMesh->mTangents) - { - mesh.Tangents.Set((const Float3*)aMesh->mTangents, aMesh->mNumVertices); - } - // Indices const int32 indicesCount = aMesh->mNumFaces * 3; mesh.Indices.Resize(indicesCount, false); @@ -277,6 +265,27 @@ bool ProcessMesh(ImportedModelData& result, AssimpImporterData& data, const aiMe mesh.Indices[i++] = face->mIndices[2]; } + // Normals + if (data.Options.CalculateNormals || !aMesh->mNormals) + { + // Support generation of normals when using assimp. + if (mesh.GenerateNormals(data.Options.SmoothingNormalsAngle)) + { + errorMsg = TEXT("Failed to generate normals."); + return true; + } + } + else if (aMesh->mNormals) + { + mesh.Normals.Set((const Float3*)aMesh->mNormals, aMesh->mNumVertices); + } + + // Tangents + if (aMesh->mTangents) + { + mesh.Tangents.Set((const Float3*)aMesh->mTangents, aMesh->mNumVertices); + } + // Lightmap UVs if (data.Options.LightmapUVsSource == ModelLightmapUVsSource::Disable) {