mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 19:59:28 +02:00
it's working!
This commit is contained in:
parent
189ccfde4a
commit
f75a3e1a72
3 changed files with 42 additions and 30 deletions
|
@ -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)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue