diff --git a/AssetStudioGUI/AssetStudioGUIForm.cs b/AssetStudioGUI/AssetStudioGUIForm.cs index d85e4ec..8eb896d 100644 --- a/AssetStudioGUI/AssetStudioGUIForm.cs +++ b/AssetStudioGUI/AssetStudioGUIForm.cs @@ -2714,7 +2714,7 @@ namespace AssetStudioGUI GL.GenVertexArrays(1, out vao); GL.BindVertexArray(vao); CreateVBO(out var vboPositions, vertexData, attributeVertexPosition); - if (normalMode == 0) + if (normalMode == 1) { CreateVBO(out var vboNormals, normal2Data, attributeNormalDirection); } diff --git a/AssetStudioUtility/ModelConverter.cs b/AssetStudioUtility/ModelConverter.cs index 4e086df..d2c1628 100644 --- a/AssetStudioUtility/ModelConverter.cs +++ b/AssetStudioUtility/ModelConverter.cs @@ -570,6 +570,8 @@ namespace AssetStudio private static Mesh GetMesh(Renderer meshR) { + GameObject m_GameObject; + if (meshR is SkinnedMeshRenderer sMesh) { if (sMesh.m_Mesh.TryGet(out var m_Mesh)) @@ -579,7 +581,7 @@ namespace AssetStudio } else { - meshR.m_GameObject.TryGet(out var m_GameObject); + meshR.m_GameObject.TryGet(out m_GameObject); if (m_GameObject.m_MeshFilter != null) { if (m_GameObject.m_MeshFilter.m_Mesh.TryGet(out var m_Mesh)) @@ -589,6 +591,23 @@ namespace AssetStudio } } + // Last resort + if (meshR.m_GameObject.TryGet(out m_GameObject)) + { + Logger.Debug("Mesh Renderer had no Mesh attached, trying to find Mesh by name.."); + var meshR_originalName = m_GameObject.m_Name; + foreach (var serializedFile in m_GameObject.assetsFile.assetsManager.assetsFileList) + { + var nameRelatedMesh = (Mesh)serializedFile.Objects.Find(x => x is Mesh m_Mesh && m_Mesh.m_Name == meshR_originalName); + if (nameRelatedMesh != null) + { + Logger.Debug($"Successfully found a Mesh replacement for the component \"{meshR_originalName}\""); + return nameRelatedMesh; + } + } + Logger.Debug($"No Mesh was found for the component \"{meshR_originalName}\""); + } + return null; }