12 #ifndef hifi_ModelBaker_h
13 #define hifi_ModelBaker_h
15 #include <QtCore/QFutureSynchronizer>
16 #include <QtCore/QDir>
17 #include <QtCore/QUrl>
18 #include <QtNetwork/QNetworkReply>
20 #include <QtCore/QSharedPointer>
23 #include "MaterialBaker.h"
25 #include "ModelBakingLoggingCategory.h"
30 using GetMaterialIDCallback = std::function <int(
int)>;
32 static const QString FST_EXTENSION {
".fst" };
33 static const QString BAKED_FST_EXTENSION {
".baked.fst" };
34 static const QString FBX_EXTENSION {
".fbx" };
35 static const QString BAKED_FBX_EXTENSION {
".baked.fbx" };
36 static const QString OBJ_EXTENSION {
".obj" };
37 static const QString GLTF_EXTENSION {
".gltf" };
39 class ModelBaker :
public Baker {
43 ModelBaker(
const QUrl& inputModelURL,
const QString& bakedOutputDirectory,
const QString& originalOutputDirectory =
"",
bool hasBeenBaked =
false);
45 void setOutputURLSuffix(
const QUrl& urlSuffix);
46 void setMappingURL(
const QUrl& mappingURL);
47 void setMapping(
const hifi::VariantHash& mapping);
49 void initializeOutputDirs();
51 bool buildDracoMeshNode(
FBXNode& dracoMeshNode,
const QByteArray& dracoMeshBytes,
const std::vector<hifi::ByteArray>& dracoMaterialList);
52 virtual void setWasAborted(
bool wasAborted)
override;
54 QUrl getModelURL()
const {
return _modelURL; }
55 QUrl getOriginalInputModelURL()
const {
return _originalInputModelURL; }
56 virtual QUrl getFullOutputMappingURL()
const;
57 QUrl getBakedModelURL()
const {
return _bakedModelURL; }
63 virtual void bake()
override;
64 virtual void abort()
override;
67 void saveSourceModel();
68 virtual void bakeProcessedSource(
const hfm::Model::Pointer& hfmModel,
const std::vector<hifi::ByteArray>& dracoMeshes,
const std::vector<std::vector<hifi::ByteArray>>& dracoMaterialLists) = 0;
72 QUrl _originalInputModelURL;
74 QUrl _outputURLSuffix;
76 hifi::VariantHash _mapping;
77 QString _bakedOutputDir;
78 QString _originalOutputDir;
79 QString _originalOutputModelPath;
80 QString _outputMappingURL;
84 void handleModelNetworkReply();
85 virtual void bakeSourceCopy();
86 void handleFinishedMaterialBaker();
87 void handleFinishedMaterialMapBaker();
90 void outputUnbakedFST();
91 void outputBakedFST();
92 void bakeMaterialMap();
94 bool _hasBeenBaked {
false };
96 hfm::Model::Pointer _hfmModel;
97 MaterialMapping _materialMapping;
98 int _materialMapIndex { 0 };
99 QJsonArray _materialMappingJSON;
100 QSharedPointer<MaterialBaker> _materialBaker;
A node within an FBX document.
Definition: FBX.h:41