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" };
38 static const QString VRM_EXTENSION {
".vrm" };
40 class ModelBaker :
public Baker {
44 ModelBaker(
const QUrl& inputModelURL,
const QString& bakedOutputDirectory,
const QString& originalOutputDirectory =
"",
bool hasBeenBaked =
false);
46 void setOutputURLSuffix(
const QUrl& urlSuffix);
47 void setMappingURL(
const QUrl& mappingURL);
48 void setMapping(
const hifi::VariantHash& mapping);
50 void initializeOutputDirs();
52 bool buildDracoMeshNode(
FBXNode& dracoMeshNode,
const QByteArray& dracoMeshBytes,
const std::vector<hifi::ByteArray>& dracoMaterialList);
53 virtual void setWasAborted(
bool wasAborted)
override;
55 QUrl getModelURL()
const {
return _modelURL; }
56 QUrl getOriginalInputModelURL()
const {
return _originalInputModelURL; }
57 virtual QUrl getFullOutputMappingURL()
const;
58 QUrl getBakedModelURL()
const {
return _bakedModelURL; }
64 virtual void bake()
override;
65 virtual void abort()
override;
68 void saveSourceModel();
69 virtual void bakeProcessedSource(
const hfm::Model::Pointer& hfmModel,
const std::vector<hifi::ByteArray>& dracoMeshes,
const std::vector<std::vector<hifi::ByteArray>>& dracoMaterialLists) = 0;
73 QUrl _originalInputModelURL;
75 QUrl _outputURLSuffix;
77 hifi::VariantHash _mapping;
78 QString _bakedOutputDir;
79 QString _originalOutputDir;
80 QString _originalOutputModelPath;
81 QString _outputMappingURL;
85 void handleModelNetworkReply();
86 virtual void bakeSourceCopy();
87 void handleFinishedMaterialBaker();
88 void handleFinishedMaterialMapBaker();
91 void outputUnbakedFST();
92 void outputBakedFST();
93 void bakeMaterialMap();
95 bool _hasBeenBaked {
false };
97 hfm::Model::Pointer _hfmModel;
98 MaterialMapping _materialMapping;
99 int _materialMapIndex { 0 };
100 QJsonArray _materialMappingJSON;
101 QSharedPointer<MaterialBaker> _materialBaker;
A node within an FBX document.
Definition: FBX.h:41