void AtomicGlowApp::HandleUpdate(StringHash eventType, VariantMap& eventData) { SharedPtr<ModelAOBake> baker(new ModelAOBake(context_)); baker->LoadModel("5630bdba26c7d8ab29daf2ceaba45cd2.mdl"); exitCode_ = EXIT_SUCCESS; engine_->Exit(); }
void ModelBaker::bakeSourceCopy() { QFile modelFile(_originalOutputModelPath); if (!modelFile.open(QIODevice::ReadOnly)) { handleError("Error opening " + _originalOutputModelPath + " for reading"); return; } hifi::ByteArray modelData = modelFile.readAll(); std::vector<hifi::ByteArray> dracoMeshes; std::vector<std::vector<hifi::ByteArray>> dracoMaterialLists; // Material order for per-mesh material lookup used by dracoMeshes { auto serializer = DependencyManager::get<ModelFormatRegistry>()->getSerializerForMediaType(modelData, _modelURL, ""); if (!serializer) { handleError("Could not recognize file type of model file " + _originalOutputModelPath); return; } hifi::VariantHash serializerMapping = _mapping; serializerMapping["combineParts"] = true; // set true so that OBJSerializer reads material info from material library serializerMapping["deduplicateIndices"] = true; // Draco compression also deduplicates, but we might as well shave it off to save on some earlier processing (currently FBXSerializer only) hfm::Model::Pointer loadedModel = serializer->read(modelData, serializerMapping, _modelURL); // Temporarily support copying the pre-parsed node from FBXSerializer, for better performance in FBXBaker // TODO: Pure HFM baking std::shared_ptr<FBXSerializer> fbxSerializer = std::dynamic_pointer_cast<FBXSerializer>(serializer); if (fbxSerializer) { qCDebug(model_baking) << "Parsing" << _modelURL; _rootNode = fbxSerializer->_rootNode; } baker::Baker baker(loadedModel, serializerMapping, _mappingURL); auto config = baker.getConfiguration(); // Enable compressed draco mesh generation config->getJobConfig("BuildDracoMesh")->setEnabled(true); // Do not permit potentially lossy modification of joint data meant for runtime ((PrepareJointsConfig*)config->getJobConfig("PrepareJoints"))->passthrough = true; // Begin hfm baking baker.run(); _hfmModel = baker.getHFMModel(); _materialMapping = baker.getMaterialMapping(); dracoMeshes = baker.getDracoMeshes(); dracoMaterialLists = baker.getDracoMaterialLists(); } // Do format-specific baking bakeProcessedSource(_hfmModel, dracoMeshes, dracoMaterialLists); if (shouldStop()) { return; } if (!_hfmModel->materials.isEmpty()) { _materialBaker = QSharedPointer<MaterialBaker>( new MaterialBaker(_modelURL.fileName(), true, _bakedOutputDir), &MaterialBaker::deleteLater ); _materialBaker->setMaterials(_hfmModel->materials, _modelURL.toString()); connect(_materialBaker.data(), &MaterialBaker::finished, this, &ModelBaker::handleFinishedMaterialBaker); _materialBaker->bake(); } else { bakeMaterialMap(); } }