From 27643023a3675cbc46b7658570bf2eb47af066b4 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Thu, 31 Oct 2019 17:37:46 -0700 Subject: [PATCH] Make shape extent calculations use slim mesh extents, and rename task to CalculateTransformedExtentsTask --- libraries/hfm/src/hfm/HFMModelMath.cpp | 18 ++++++------------ libraries/hfm/src/hfm/HFMModelMath.h | 2 +- .../model-baker/src/model-baker/Baker.cpp | 10 +++++----- ...cpp => CalculateTransformedExtentsTask.cpp} | 10 +++++----- ...ask.h => CalculateTransformedExtentsTask.h} | 8 ++++---- 5 files changed, 21 insertions(+), 27 deletions(-) rename libraries/model-baker/src/model-baker/{CalculateExtentsTask.cpp => CalculateTransformedExtentsTask.cpp} (74%) rename libraries/model-baker/src/model-baker/{CalculateExtentsTask.h => CalculateTransformedExtentsTask.h} (71%) diff --git a/libraries/hfm/src/hfm/HFMModelMath.cpp b/libraries/hfm/src/hfm/HFMModelMath.cpp index 7ce06821ec..436e520643 100644 --- a/libraries/hfm/src/hfm/HFMModelMath.cpp +++ b/libraries/hfm/src/hfm/HFMModelMath.cpp @@ -54,22 +54,16 @@ void calculateExtentsForTriangleListMesh(TriangleListMesh& triangleListMesh) { } } -void calculateExtentsForShape(hfm::Shape& shape, const std::vector& meshes, const std::vector joints) { +void calculateExtentsForShape(hfm::Shape& shape, const std::vector& triangleListMeshes, const std::vector& joints) { auto& shapeExtents = shape.transformedExtents; shapeExtents.reset(); - const auto& mesh = meshes[shape.mesh]; - const auto& meshPart = mesh.parts[shape.meshPart]; + const auto& triangleListMesh = triangleListMeshes[shape.mesh]; + const auto& partExtent = triangleListMesh.partExtents[shape.meshPart]; - glm::mat4 transform = joints[shape.joint].transform; - forEachIndex(meshPart, [&](int32_t idx){ - if (mesh.vertices.size() <= idx) { - return; - } - const glm::vec3& vertex = mesh.vertices[idx]; - const glm::vec3 transformedVertex = glm::vec3(transform * glm::vec4(vertex, 1.0f)); - shapeExtents.addPoint(transformedVertex); - }); + const glm::mat4& transform = joints[shape.joint].transform; + shapeExtents = partExtent; + shapeExtents.transform(transform); thickenFlatExtents(shapeExtents); } diff --git a/libraries/hfm/src/hfm/HFMModelMath.h b/libraries/hfm/src/hfm/HFMModelMath.h index 3ed0584fac..ef86e7379a 100644 --- a/libraries/hfm/src/hfm/HFMModelMath.h +++ b/libraries/hfm/src/hfm/HFMModelMath.h @@ -23,7 +23,7 @@ void initializeExtents(Extents& extents); void calculateExtentsForTriangleListMesh(TriangleListMesh& triangleListMesh); // This can't be moved to model-baker until -void calculateExtentsForShape(hfm::Shape& shape, const std::vector& meshes, const std::vector joints); +void calculateExtentsForShape(hfm::Shape& shape, const std::vector& triangleListMeshes, const std::vector& joints); void calculateExtentsForModel(Extents& modelExtents, const std::vector& shapes); diff --git a/libraries/model-baker/src/model-baker/Baker.cpp b/libraries/model-baker/src/model-baker/Baker.cpp index bd39b3178f..662b4670ee 100644 --- a/libraries/model-baker/src/model-baker/Baker.cpp +++ b/libraries/model-baker/src/model-baker/Baker.cpp @@ -20,7 +20,7 @@ #include "CalculateBlendshapeNormalsTask.h" #include "CalculateBlendshapeTangentsTask.h" #include "PrepareJointsTask.h" -#include "CalculateExtentsTask.h" +#include "CalculateTransformedExtentsTask.h" #include "BuildDracoMeshTask.h" #include "ParseFlowDataTask.h" #include @@ -200,10 +200,10 @@ namespace baker { const auto jointIndices = jointInfoOut.getN(2); // Use transform information to compute extents - const auto calculateExtentsInputs = CalculateExtentsTask::Input(modelExtentsIn, meshesIn, shapesIn, jointsOut).asVarying(); - const auto calculateExtentsOutputs = model.addJob("CalculateExtents", calculateExtentsInputs); - const auto modelExtentsOut = calculateExtentsOutputs.getN(0); - const auto shapesOut = calculateExtentsOutputs.getN(1); + const auto calculateExtentsInputs = CalculateTransformedExtentsTask::Input(modelExtentsIn, triangleListMeshes, shapesIn, jointsOut).asVarying(); + const auto calculateExtentsOutputs = model.addJob("CalculateExtents", calculateExtentsInputs); + const auto modelExtentsOut = calculateExtentsOutputs.getN(0); + const auto shapesOut = calculateExtentsOutputs.getN(1); // Parse material mapping const auto parseMaterialMappingInputs = ParseMaterialMappingTask::Input(mapping, materialMappingBaseURL).asVarying(); diff --git a/libraries/model-baker/src/model-baker/CalculateExtentsTask.cpp b/libraries/model-baker/src/model-baker/CalculateTransformedExtentsTask.cpp similarity index 74% rename from libraries/model-baker/src/model-baker/CalculateExtentsTask.cpp rename to libraries/model-baker/src/model-baker/CalculateTransformedExtentsTask.cpp index e237cdb402..028dba4939 100644 --- a/libraries/model-baker/src/model-baker/CalculateExtentsTask.cpp +++ b/libraries/model-baker/src/model-baker/CalculateTransformedExtentsTask.cpp @@ -1,5 +1,5 @@ // -// CalculateExtentsTask.cpp +// CalculateTransformedExtentsTask.cpp // model-baker/src/model-baker // // Created by Sabrina Shanman on 2019/10/04. @@ -9,13 +9,13 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include "CalculateExtentsTask.h" +#include "CalculateTransformedExtentsTask.h" #include "hfm/HFMModelMath.h" -void CalculateExtentsTask::run(const baker::BakeContextPointer& context, const Input& input, Output& output) { +void CalculateTransformedExtentsTask::run(const baker::BakeContextPointer& context, const Input& input, Output& output) { const auto& modelExtentsIn = input.get0(); - const auto& meshes = input.get1(); + const auto& triangleListMeshes = input.get1(); const auto& shapesIn = input.get2(); const auto& joints = input.get3(); auto& modelExtentsOut = output.edit0(); @@ -31,7 +31,7 @@ void CalculateExtentsTask::run(const baker::BakeContextPointer& context, const I continue; } - hfm::calculateExtentsForShape(shapeOut, meshes, joints); + hfm::calculateExtentsForShape(shapeOut, triangleListMeshes, joints); } modelExtentsOut = modelExtentsIn; diff --git a/libraries/model-baker/src/model-baker/CalculateExtentsTask.h b/libraries/model-baker/src/model-baker/CalculateTransformedExtentsTask.h similarity index 71% rename from libraries/model-baker/src/model-baker/CalculateExtentsTask.h rename to libraries/model-baker/src/model-baker/CalculateTransformedExtentsTask.h index 006688ec5a..aed089a13d 100644 --- a/libraries/model-baker/src/model-baker/CalculateExtentsTask.h +++ b/libraries/model-baker/src/model-baker/CalculateTransformedExtentsTask.h @@ -1,5 +1,5 @@ // -// CalculateExtentsTask.h +// CalculateTransformedExtentsTask.h // model-baker/src/model-baker // // Created by Sabrina Shanman on 2019/10/04. @@ -17,11 +17,11 @@ // Calculates any undefined extents in the shapes and the model. Precalculated extents will be left alone. // Bind extents will currently not be calculated -class CalculateExtentsTask { +class CalculateTransformedExtentsTask { public: - using Input = baker::VaryingSet4, std::vector, std::vector>; + using Input = baker::VaryingSet4, std::vector, std::vector>; using Output = baker::VaryingSet2>; - using JobModel = baker::Job::ModelIO; + using JobModel = baker::Job::ModelIO; void run(const baker::BakeContextPointer& context, const Input& input, Output& output); };