Merge pull request #8227 from ZappoMan/skinMaterialMap

added support for material map in FST file
This commit is contained in:
samcake 2016-07-11 17:54:20 -07:00 committed by GitHub
commit d2d1a8d220
3 changed files with 20 additions and 11 deletions

View file

@ -1366,7 +1366,7 @@ FBXGeometry* FBXReader::extractFBXGeometry(const QVariantHash& mapping, const QS
geometry.meshExtents.reset();
// Create the Material Library
consolidateFBXMaterials();
consolidateFBXMaterials(mapping);
geometry.materials = _fbxMaterials;
// see if any materials have texture children

View file

@ -444,7 +444,7 @@ public:
QHash<QString, FBXMaterial> _fbxMaterials;
void consolidateFBXMaterials();
void consolidateFBXMaterials(const QVariantHash& mapping);
bool _loadLightmaps = true;
float _lightmapOffset = 0.0f;

View file

@ -18,6 +18,8 @@
#include <QtDebug>
#include <QtEndian>
#include <QFileInfo>
#include <QJsonDocument>
#include <QJsonObject>
#include "FBXReader.h"
#include <memory>
@ -67,9 +69,13 @@ FBXTexture FBXReader::getTexture(const QString& textureID) {
return texture;
}
void FBXReader::consolidateFBXMaterials() {
// foreach (const QString& materialID, materials) {
void FBXReader::consolidateFBXMaterials(const QVariantHash& mapping) {
QString materialMapString = mapping.value("materialMap").toString();
QJsonDocument materialMapDocument = QJsonDocument::fromJson(materialMapString.toUtf8());
QJsonObject materialMap = materialMapDocument.object();
// foreach (const QString& materialID, materials) {
for (QHash<QString, FBXMaterial>::iterator it = _fbxMaterials.begin(); it != _fbxMaterials.end(); it++) {
FBXMaterial& material = (*it);
@ -253,12 +259,15 @@ void FBXReader::consolidateFBXMaterials() {
}
}
if (material.name.contains("body_mat") || material.name.contains("skin")) {
material._material->setScattering(1.0);
if (!material.emissiveTexture.isNull()) {
material.scatteringTexture = material.emissiveTexture;
material.emissiveTexture = FBXTexture();
}
if (materialMap.contains(material.name)) {
QJsonObject materialOptions = materialMap.value(material.name).toObject();
float scattering = materialOptions.contains("scattering") ? materialOptions.value("scattering").toDouble() : 1.0f;
QByteArray scatteringMap = materialOptions.value("scatteringMap").toVariant().toByteArray();
qDebug() << "Replacing material:" << material.name << "with skin scattering effect. scattering:" << scattering << "scatteringMap:" << scatteringMap;
material._material->setScattering(scattering);
material.scatteringTexture = FBXTexture();
material.scatteringTexture.name = material.name + ".scatteringMap";
material.scatteringTexture.filename = scatteringMap;
}
if (material.opacity <= 0.0f) {