From fdbcf4b2ea712d569716d6f587cbf3fa56f0965c Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 12 Feb 2019 12:03:35 -0800 Subject: [PATCH] cleanup and expose mapped materials to getScriptableModel --- libraries/model-baker/src/model-baker/Baker.cpp | 3 +-- .../src/model-baker/ParseMaterialMappingTask.cpp | 5 +---- .../src/model-baker/ParseMaterialMappingTask.h | 2 +- libraries/render-utils/src/Model.cpp | 12 +++++++++++- libraries/render-utils/src/Model.h | 1 + 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/libraries/model-baker/src/model-baker/Baker.cpp b/libraries/model-baker/src/model-baker/Baker.cpp index 037cfb7912..dfb18eef86 100644 --- a/libraries/model-baker/src/model-baker/Baker.cpp +++ b/libraries/model-baker/src/model-baker/Baker.cpp @@ -155,8 +155,7 @@ namespace baker { const auto jointIndices = jointInfoOut.getN(2); // Parse material mapping - const auto materialMappingInputs = ParseMaterialMappingTask::Input(materials, mapping).asVarying(); - const auto materialMapping = model.addJob("ParseMaterialMapping", materialMappingInputs); + const auto materialMapping = model.addJob("ParseMaterialMapping", mapping); // Combine the outputs into a new hfm::Model const auto buildBlendshapesInputs = BuildBlendshapesTask::Input(blendshapesPerMeshIn, normalsPerBlendshapePerMesh, tangentsPerBlendshapePerMesh).asVarying(); diff --git a/libraries/model-baker/src/model-baker/ParseMaterialMappingTask.cpp b/libraries/model-baker/src/model-baker/ParseMaterialMappingTask.cpp index b313593be2..7a923a3702 100644 --- a/libraries/model-baker/src/model-baker/ParseMaterialMappingTask.cpp +++ b/libraries/model-baker/src/model-baker/ParseMaterialMappingTask.cpp @@ -10,10 +10,7 @@ #include "ModelBakerLogging.h" -void ParseMaterialMappingTask::run(const baker::BakeContextPointer& context, const Input& input, Output& output) { - const auto& materialsIn = input.get0(); - const auto& mapping = input.get1(); - +void ParseMaterialMappingTask::run(const baker::BakeContextPointer& context, const Input& mapping, Output& output) { MaterialMapping materialMapping; auto mappingIter = mapping.find("materialMap"); diff --git a/libraries/model-baker/src/model-baker/ParseMaterialMappingTask.h b/libraries/model-baker/src/model-baker/ParseMaterialMappingTask.h index 3e48c00acf..69e00b0324 100644 --- a/libraries/model-baker/src/model-baker/ParseMaterialMappingTask.h +++ b/libraries/model-baker/src/model-baker/ParseMaterialMappingTask.h @@ -19,7 +19,7 @@ class ParseMaterialMappingTask { public: - using Input = baker::VaryingSet2, QVariantHash>; + using Input = QVariantHash; using Output = MaterialMapping; using JobModel = baker::Job::ModelIO; diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index c15941b465..b4eee57d89 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -756,7 +756,16 @@ scriptable::ScriptableModelBase Model::getScriptableModel() { int numParts = (int)mesh->getNumParts(); for (int partIndex = 0; partIndex < numParts; partIndex++) { - result.appendMaterial(graphics::MaterialLayer(getGeometry()->getShapeMaterial(shapeID), 0), shapeID, _modelMeshMaterialNames[shapeID]); + auto& materialName = _modelMeshMaterialNames[shapeID]; + result.appendMaterial(graphics::MaterialLayer(getGeometry()->getShapeMaterial(shapeID), 0), shapeID, materialName); + + auto mappedMaterialIter = _materialMapping.find(shapeID); + if (mappedMaterialIter != _materialMapping.end()) { + auto mappedMaterials = mappedMaterialIter->second; + for (auto& mappedMaterial : mappedMaterials) { + result.appendMaterial(mappedMaterial, shapeID, materialName); + } + } shapeID++; } } @@ -1546,6 +1555,7 @@ void Model::applyMaterialMapping() { auto meshIndex = _modelMeshRenderItemShapes[shapeID].meshIndex; bool invalidatePayloadShapeKey = shouldInvalidatePayloadShapeKey(meshIndex); graphics::MaterialLayer material = graphics::MaterialLayer(networkMaterial, ++_priorityMap[shapeID]); + _materialMapping[shapeID].push_back(material); transaction.updateItem(itemID, [material, renderItemsKey, invalidatePayloadShapeKey, primitiveMode, useDualQuaternionSkinning](ModelMeshPartPayload& data) { data.addMaterial(material); diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index c4d1feaa1b..2b73ac0a28 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -375,6 +375,7 @@ signals: protected: std::unordered_map _priorityMap; // only used for materialMapping + std::unordered_map> _materialMapping; // generated during applyMaterialMapping void applyMaterialMapping(); void setBlendshapeCoefficients(const QVector& coefficients) { _blendshapeCoefficients = coefficients; }