it's working!

This commit is contained in:
SamGondelman 2019-02-12 11:41:47 -08:00
parent 189ccfde4a
commit f75a3e1a72
3 changed files with 42 additions and 30 deletions

View file

@ -25,35 +25,51 @@ void ParseMaterialMappingTask::run(const baker::BakeContextPointer& context, con
} else { } else {
auto mappingKeys = materialMap.keys(); auto mappingKeys = materialMap.keys();
for (auto mapping : mappingKeys) { for (auto mapping : mappingKeys) {
auto mappingValue = materialMap[mapping].toObject(); auto mappingJSON = materialMap[mapping];
if (mappingJSON.isObject()) {
auto mappingValue = mappingJSON.toObject();
// Old subsurface scattering mapping // Old subsurface scattering mapping
{ {
auto scatteringIter = mappingValue.find("scattering"); auto scatteringIter = mappingValue.find("scattering");
auto scatteringMapIter = mappingValue.find("scatteringMap"); auto scatteringMapIter = mappingValue.find("scatteringMap");
if (scatteringIter != mappingValue.end() || scatteringMapIter != mappingValue.end()) { if (scatteringIter != mappingValue.end() || scatteringMapIter != mappingValue.end()) {
std::shared_ptr<NetworkMaterial> material = std::make_shared<NetworkMaterial>(); std::shared_ptr<NetworkMaterial> material = std::make_shared<NetworkMaterial>();
if (scatteringIter != mappingValue.end()) { if (scatteringIter != mappingValue.end()) {
float scattering = (float)scatteringIter.value().toDouble(); float scattering = (float)scatteringIter.value().toDouble();
material->setScattering(scattering); material->setScattering(scattering);
}
if (scatteringMapIter != mappingValue.end()) {
QString scatteringMap = scatteringMapIter.value().toString();
material->setScatteringMap(scatteringMap);
}
material->setDefaultFallthrough(true);
NetworkMaterialResourcePointer materialResource = NetworkMaterialResourcePointer(new NetworkMaterialResource(), [](NetworkMaterialResource* ptr) { ptr->deleteLater(); });
materialResource->moveToThread(qApp->thread());
materialResource->parsedMaterials.names.push_back("scattering");
materialResource->parsedMaterials.networkMaterials["scattering"] = material;
materialMapping.push_back(std::pair<std::string, NetworkMaterialResourcePointer>("mat::" + mapping.toStdString(), materialResource));
continue;
} }
}
if (scatteringMapIter != mappingValue.end()) { // Material JSON description
QString scatteringMap = scatteringMapIter.value().toString(); {
material->setScatteringMap(scatteringMap);
}
material->setDefaultFallthrough(true);
NetworkMaterialResourcePointer materialResource = NetworkMaterialResourcePointer(new NetworkMaterialResource(), [](NetworkMaterialResource* ptr) { ptr->deleteLater(); }); NetworkMaterialResourcePointer materialResource = NetworkMaterialResourcePointer(new NetworkMaterialResource(), [](NetworkMaterialResource* ptr) { ptr->deleteLater(); });
materialResource->moveToThread(qApp->thread()); materialResource->moveToThread(qApp->thread());
materialResource->parsedMaterials.names.push_back("scattering"); // TODO: add baseURL to allow FSTs to reference relative files next to them
materialResource->parsedMaterials.networkMaterials["scattering"] = material; materialResource->parsedMaterials = NetworkMaterialResource::parseJSONMaterials(QJsonDocument(mappingValue), QUrl());
materialMapping.push_back(std::pair<std::string, NetworkMaterialResourcePointer>(mapping.toStdString(), materialResource));
materialMapping.push_back(std::pair<std::string, NetworkMaterialResourcePointer>("mat::" + mapping.toStdString(), materialResource));
continue;
} }
} else if (mappingJSON.isString()) {
auto mappingValue = mappingJSON.toString();
materialMapping.push_back(std::pair<std::string, NetworkMaterialResourcePointer>(mapping.toStdString(), MaterialCache::instance().getMaterial(mappingValue)));
} }
} }
} }

View file

@ -64,7 +64,6 @@ void CauterizedModel::createRenderItemSet() {
_modelMeshRenderItems.clear(); _modelMeshRenderItems.clear();
_modelMeshMaterialNames.clear(); _modelMeshMaterialNames.clear();
_modelMeshRenderItemShapes.clear(); _modelMeshRenderItemShapes.clear();
_priorityMap.clear();
Transform transform; Transform transform;
transform.setTranslation(_translation); transform.setTranslation(_translation);
@ -98,7 +97,6 @@ void CauterizedModel::createRenderItemSet() {
} }
} }
_blendshapeOffsetsInitialized = true; _blendshapeOffsetsInitialized = true;
applyMaterialMapping();
} else { } else {
Model::createRenderItemSet(); Model::createRenderItemSet();
} }

View file

@ -956,6 +956,7 @@ bool Model::addToScene(const render::ScenePointer& scene,
} }
if (somethingAdded) { if (somethingAdded) {
applyMaterialMapping();
_addedToScene = true; _addedToScene = true;
updateRenderItems(); updateRenderItems();
_needsFixupInScene = false; _needsFixupInScene = false;
@ -973,6 +974,7 @@ void Model::removeFromScene(const render::ScenePointer& scene, render::Transacti
_modelMeshRenderItems.clear(); _modelMeshRenderItems.clear();
_modelMeshMaterialNames.clear(); _modelMeshMaterialNames.clear();
_modelMeshRenderItemShapes.clear(); _modelMeshRenderItemShapes.clear();
_priorityMap.clear();
_blendshapeOffsets.clear(); _blendshapeOffsets.clear();
_blendshapeOffsetsInitialized = false; _blendshapeOffsetsInitialized = false;
@ -1434,7 +1436,6 @@ void Model::createRenderItemSet() {
_modelMeshRenderItems.clear(); _modelMeshRenderItems.clear();
_modelMeshMaterialNames.clear(); _modelMeshMaterialNames.clear();
_modelMeshRenderItemShapes.clear(); _modelMeshRenderItemShapes.clear();
_priorityMap.clear();
Transform transform; Transform transform;
transform.setTranslation(_translation); transform.setTranslation(_translation);
@ -1466,7 +1467,6 @@ void Model::createRenderItemSet() {
} }
} }
_blendshapeOffsetsInitialized = true; _blendshapeOffsetsInitialized = true;
applyMaterialMapping();
} }
bool Model::isRenderable() const { bool Model::isRenderable() const {
@ -1535,14 +1535,12 @@ void Model::applyMaterialMapping() {
} }
auto materialLoaded = [this, networkMaterialResource, shapeIDs, renderItemsKey, primitiveMode, useDualQuaternionSkinning]() { auto materialLoaded = [this, networkMaterialResource, shapeIDs, renderItemsKey, primitiveMode, useDualQuaternionSkinning]() {
qDebug() << "boop2" << networkMaterialResource->isFailed() << networkMaterialResource->parsedMaterials.names.size(); if (networkMaterialResource->isFailed() || networkMaterialResource->parsedMaterials.names.size() == 0) {
if (networkMaterialResource->isFailed() || networkMaterialResource->parsedMaterials.names.size() > 0) {
return; return;
} }
render::Transaction transaction; render::Transaction transaction;
auto networkMaterial = networkMaterialResource->parsedMaterials.networkMaterials[networkMaterialResource->parsedMaterials.names[0]]; auto networkMaterial = networkMaterialResource->parsedMaterials.networkMaterials[networkMaterialResource->parsedMaterials.names[0]];
for (auto shapeID : shapeIDs) { for (auto shapeID : shapeIDs) {
qDebug() << "boop3" << shapeID << _modelMeshRenderItemIDs.size();
if (shapeID < _modelMeshRenderItemIDs.size()) { if (shapeID < _modelMeshRenderItemIDs.size()) {
auto itemID = _modelMeshRenderItemIDs[shapeID]; auto itemID = _modelMeshRenderItemIDs[shapeID];
auto meshIndex = _modelMeshRenderItemShapes[shapeID].meshIndex; auto meshIndex = _modelMeshRenderItemShapes[shapeID].meshIndex;
@ -1559,7 +1557,7 @@ void Model::applyMaterialMapping() {
} }
AbstractViewStateInterface::instance()->getMain3DScene()->enqueueTransaction(transaction); AbstractViewStateInterface::instance()->getMain3DScene()->enqueueTransaction(transaction);
}; };
qDebug() << "boop" << networkMaterialResource->isLoaded();
if (networkMaterialResource->isLoaded()) { if (networkMaterialResource->isLoaded()) {
materialLoaded(); materialLoaded();
} else { } else {