From 53e75fb6c4ccf8fd1f319893f65e4808e8a34219 Mon Sep 17 00:00:00 2001 From: "Sergio R. Z. Masson" <97050577+SergioRZMasson@users.noreply.github.com> Date: Tue, 19 Sep 2023 16:01:46 -0300 Subject: [PATCH] Morph target export performance improvement (#1096) - Added small performance improvements to morph targets import, reducing load time by 50%. --- .../Exporter/BabylonExporter.Mesh.cs | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Mesh.cs b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Mesh.cs index 410afcd1..50ba8e58 100644 --- a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Mesh.cs +++ b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Mesh.cs @@ -623,30 +623,32 @@ private BabylonNode ExportMasterMesh(IIGameScene scene, IIGameNode meshNode, Bab return babylonMesh; } - private IEnumerable ExtractMorphTargetVertices(BabylonAbstractMesh babylonAbstractMesh, List vertices, IMatrix3 offsetTM, int morphIndex, IIGameNode maxMorphTarget, bool optimizeVertices, List faceIndexes) + private IList ExtractMorphTargetVertices(BabylonAbstractMesh babylonAbstractMesh, List vertices, IMatrix3 offsetTM, int morphIndex, IIGameNode maxMorphTarget, bool optimizeVertices, List faceIndexes) { - if (maxMorphTarget != null ) + if (maxMorphTarget != null) { - foreach(var v in ExtractVertices(babylonAbstractMesh, maxMorphTarget, optimizeVertices, faceIndexes)) - { - yield return v; - } - yield break; + return ExtractVertices(babylonAbstractMesh, maxMorphTarget, optimizeVertices, faceIndexes); } - // rebuild Morph Target - if (exportParameters.rebuildMorphTarget) + + var result = new List(); + + if (!exportParameters.rebuildMorphTarget) { - var points = ExtractMorphTargetPoints(babylonAbstractMesh, morphIndex, offsetTM).ToList(); - for (int i = 0; i != vertices.Count; i++) + return result; + } + + var points = ExtractMorphTargetPoints(babylonAbstractMesh, morphIndex, offsetTM).ToList(); + for (int i = 0; i != vertices.Count; i++) + { + int bi = vertices[i].BaseIndex; + result.Add(new GlobalVertex() { - int bi = vertices[i].BaseIndex; - yield return new GlobalVertex() - { - BaseIndex = bi, - Position = points[bi] - }; - } + BaseIndex = bi, + Position = points[bi] + }); } + + return result; } private IEnumerable ExtractMorphTargetPoints(BabylonAbstractMesh babylonAbstractMesh, int morphIndex, IMatrix3 offsetTM)