mirror of
https://github.com/overte-org/overte.git
synced 2025-06-22 20:20:04 +02:00
remove need for destination path
This commit is contained in:
parent
7b0854c121
commit
14bd5ed687
13 changed files with 27 additions and 32 deletions
|
@ -33,8 +33,8 @@
|
||||||
#include "ModelBakingLoggingCategory.h"
|
#include "ModelBakingLoggingCategory.h"
|
||||||
#include "TextureBaker.h"
|
#include "TextureBaker.h"
|
||||||
|
|
||||||
FBXBaker::FBXBaker(const QUrl& inputModelURL, const QUrl& destinationPath, const QString& bakedOutputDirectory, const QString& originalOutputDirectory, bool hasBeenBaked) :
|
FBXBaker::FBXBaker(const QUrl& inputModelURL, const QString& bakedOutputDirectory, const QString& originalOutputDirectory, bool hasBeenBaked) :
|
||||||
ModelBaker(inputModelURL, destinationPath, bakedOutputDirectory, originalOutputDirectory, hasBeenBaked) {
|
ModelBaker(inputModelURL, bakedOutputDirectory, originalOutputDirectory, hasBeenBaked) {
|
||||||
if (hasBeenBaked) {
|
if (hasBeenBaked) {
|
||||||
// Look for the original model file one directory higher. Perhaps this is an oven output directory.
|
// Look for the original model file one directory higher. Perhaps this is an oven output directory.
|
||||||
QUrl originalRelativePath = QUrl("../original/" + inputModelURL.fileName().replace(BAKED_FBX_EXTENSION, FBX_EXTENSION));
|
QUrl originalRelativePath = QUrl("../original/" + inputModelURL.fileName().replace(BAKED_FBX_EXTENSION, FBX_EXTENSION));
|
||||||
|
|
|
@ -31,7 +31,7 @@ using TextureBakerThreadGetter = std::function<QThread*()>;
|
||||||
class FBXBaker : public ModelBaker {
|
class FBXBaker : public ModelBaker {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
FBXBaker(const QUrl& inputModelURL, const QUrl& destinationPath, const QString& bakedOutputDirectory, const QString& originalOutputDirectory = "", bool hasBeenBaked = false);
|
FBXBaker(const QUrl& inputModelURL, const QString& bakedOutputDirectory, const QString& originalOutputDirectory = "", bool hasBeenBaked = false);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void bakeProcessedSource(const hfm::Model::Pointer& hfmModel, const std::vector<hifi::ByteArray>& dracoMeshes, const std::vector<std::vector<hifi::ByteArray>>& dracoMaterialLists) override;
|
virtual void bakeProcessedSource(const hfm::Model::Pointer& hfmModel, const std::vector<hifi::ByteArray>& dracoMeshes, const std::vector<std::vector<hifi::ByteArray>>& dracoMaterialLists) override;
|
||||||
|
|
|
@ -27,12 +27,11 @@ std::function<QThread*()> MaterialBaker::_getNextOvenWorkerThreadOperator;
|
||||||
|
|
||||||
static int materialNum = 0;
|
static int materialNum = 0;
|
||||||
|
|
||||||
MaterialBaker::MaterialBaker(const QString& materialData, bool isURL, const QString& bakedOutputDir, const QUrl& destinationPath) :
|
MaterialBaker::MaterialBaker(const QString& materialData, bool isURL, const QString& bakedOutputDir) :
|
||||||
_materialData(materialData),
|
_materialData(materialData),
|
||||||
_isURL(isURL),
|
_isURL(isURL),
|
||||||
_bakedOutputDir(bakedOutputDir),
|
_bakedOutputDir(bakedOutputDir),
|
||||||
_textureOutputDir(bakedOutputDir + "/materialTextures/" + QString::number(materialNum++)),
|
_textureOutputDir(bakedOutputDir + "/materialTextures/" + QString::number(materialNum++))
|
||||||
_destinationPath(destinationPath)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,7 +170,7 @@ void MaterialBaker::handleFinishedTextureBaker() {
|
||||||
|
|
||||||
// Replace the old texture URLs
|
// Replace the old texture URLs
|
||||||
for (auto networkMaterial : _materialsNeedingRewrite.values(textureKey)) {
|
for (auto networkMaterial : _materialsNeedingRewrite.values(textureKey)) {
|
||||||
networkMaterial->getTextureMap(baker->getMapChannel())->getTextureSource()->setUrl(_destinationPath.resolved(relativeURL));
|
networkMaterial->getTextureMap(baker->getMapChannel())->getTextureSource()->setUrl(relativeURL);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// this texture failed to bake - this doesn't fail the entire bake but we need to add the errors from
|
// this texture failed to bake - this doesn't fail the entire bake but we need to add the errors from
|
||||||
|
|
|
@ -24,7 +24,7 @@ static const QString BAKED_MATERIAL_EXTENSION = ".baked.json";
|
||||||
class MaterialBaker : public Baker {
|
class MaterialBaker : public Baker {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
MaterialBaker(const QString& materialData, bool isURL, const QString& bakedOutputDir, const QUrl& destinationPath);
|
MaterialBaker(const QString& materialData, bool isURL, const QString& bakedOutputDir);
|
||||||
|
|
||||||
QString getMaterialData() const { return _materialData; }
|
QString getMaterialData() const { return _materialData; }
|
||||||
bool isURL() const { return _isURL; }
|
bool isURL() const { return _isURL; }
|
||||||
|
@ -60,7 +60,6 @@ private:
|
||||||
QString _bakedOutputDir;
|
QString _bakedOutputDir;
|
||||||
QString _textureOutputDir;
|
QString _textureOutputDir;
|
||||||
QString _bakedMaterialData;
|
QString _bakedMaterialData;
|
||||||
QUrl _destinationPath;
|
|
||||||
|
|
||||||
QScriptEngine _scriptEngine;
|
QScriptEngine _scriptEngine;
|
||||||
static std::function<QThread*()> _getNextOvenWorkerThreadOperator;
|
static std::function<QThread*()> _getNextOvenWorkerThreadOperator;
|
||||||
|
|
|
@ -44,9 +44,8 @@
|
||||||
|
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
|
|
||||||
ModelBaker::ModelBaker(const QUrl& inputModelURL, const QUrl& destinationPath, const QString& bakedOutputDirectory, const QString& originalOutputDirectory, bool hasBeenBaked) :
|
ModelBaker::ModelBaker(const QUrl& inputModelURL, const QString& bakedOutputDirectory, const QString& originalOutputDirectory, bool hasBeenBaked) :
|
||||||
_modelURL(inputModelURL),
|
_modelURL(inputModelURL),
|
||||||
_destinationPath(destinationPath),
|
|
||||||
_bakedOutputDir(bakedOutputDirectory),
|
_bakedOutputDir(bakedOutputDirectory),
|
||||||
_originalOutputDir(originalOutputDirectory),
|
_originalOutputDir(originalOutputDirectory),
|
||||||
_hasBeenBaked(hasBeenBaked)
|
_hasBeenBaked(hasBeenBaked)
|
||||||
|
@ -259,7 +258,7 @@ void ModelBaker::bakeSourceCopy() {
|
||||||
|
|
||||||
if (_hfmModel->materials.size() > 0) {
|
if (_hfmModel->materials.size() > 0) {
|
||||||
_materialBaker = QSharedPointer<MaterialBaker>(
|
_materialBaker = QSharedPointer<MaterialBaker>(
|
||||||
new MaterialBaker(_modelURL.fileName(), true, _bakedOutputDir, _destinationPath),
|
new MaterialBaker(_modelURL.fileName(), true, _bakedOutputDir),
|
||||||
&MaterialBaker::deleteLater
|
&MaterialBaker::deleteLater
|
||||||
);
|
);
|
||||||
_materialBaker->setMaterials(_hfmModel->materials, _modelURL.toString());
|
_materialBaker->setMaterials(_hfmModel->materials, _modelURL.toString());
|
||||||
|
|
|
@ -38,7 +38,7 @@ class ModelBaker : public Baker {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ModelBaker(const QUrl& inputModelURL, const QUrl& destinationPath, const QString& bakedOutputDirectory, const QString& originalOutputDirectory = "", bool hasBeenBaked = false);
|
ModelBaker(const QUrl& inputModelURL, const QString& bakedOutputDirectory, const QString& originalOutputDirectory = "", bool hasBeenBaked = false);
|
||||||
|
|
||||||
void setOutputURLSuffix(const QUrl& urlSuffix);
|
void setOutputURLSuffix(const QUrl& urlSuffix);
|
||||||
void setMappingURL(const QUrl& mappingURL);
|
void setMappingURL(const QUrl& mappingURL);
|
||||||
|
@ -67,7 +67,6 @@ protected:
|
||||||
|
|
||||||
FBXNode _rootNode;
|
FBXNode _rootNode;
|
||||||
QUrl _modelURL;
|
QUrl _modelURL;
|
||||||
QUrl _destinationPath;
|
|
||||||
QUrl _outputURLSuffix;
|
QUrl _outputURLSuffix;
|
||||||
QUrl _mappingURL;
|
QUrl _mappingURL;
|
||||||
hifi::VariantHash _mapping;
|
hifi::VariantHash _mapping;
|
||||||
|
|
|
@ -45,7 +45,7 @@ bool isModelBaked(const QUrl& bakeableModelURL) {
|
||||||
return beforeModelExtension.endsWith(".baked");
|
return beforeModelExtension.endsWith(".baked");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<ModelBaker> getModelBaker(const QUrl& bakeableModelURL, const QString& contentOutputPath, const QUrl& destinationPath) {
|
std::unique_ptr<ModelBaker> getModelBaker(const QUrl& bakeableModelURL, const QString& contentOutputPath) {
|
||||||
auto filename = bakeableModelURL.fileName();
|
auto filename = bakeableModelURL.fileName();
|
||||||
|
|
||||||
// Output in a sub-folder with the name of the model, potentially suffixed by a number to make it unique
|
// Output in a sub-folder with the name of the model, potentially suffixed by a number to make it unique
|
||||||
|
@ -59,20 +59,20 @@ std::unique_ptr<ModelBaker> getModelBaker(const QUrl& bakeableModelURL, const QS
|
||||||
QString bakedOutputDirectory = contentOutputPath + subDirName + "/baked";
|
QString bakedOutputDirectory = contentOutputPath + subDirName + "/baked";
|
||||||
QString originalOutputDirectory = contentOutputPath + subDirName + "/original";
|
QString originalOutputDirectory = contentOutputPath + subDirName + "/original";
|
||||||
|
|
||||||
return getModelBakerWithOutputDirectories(bakeableModelURL, destinationPath, bakedOutputDirectory, originalOutputDirectory);
|
return getModelBakerWithOutputDirectories(bakeableModelURL, bakedOutputDirectory, originalOutputDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<ModelBaker> getModelBakerWithOutputDirectories(const QUrl& bakeableModelURL, const QUrl& destinationPath, const QString& bakedOutputDirectory, const QString& originalOutputDirectory) {
|
std::unique_ptr<ModelBaker> getModelBakerWithOutputDirectories(const QUrl& bakeableModelURL, const QString& bakedOutputDirectory, const QString& originalOutputDirectory) {
|
||||||
auto filename = bakeableModelURL.fileName();
|
auto filename = bakeableModelURL.fileName();
|
||||||
|
|
||||||
std::unique_ptr<ModelBaker> baker;
|
std::unique_ptr<ModelBaker> baker;
|
||||||
|
|
||||||
if (filename.endsWith(FST_EXTENSION, Qt::CaseInsensitive)) {
|
if (filename.endsWith(FST_EXTENSION, Qt::CaseInsensitive)) {
|
||||||
baker = std::make_unique<FSTBaker>(bakeableModelURL, destinationPath, bakedOutputDirectory, originalOutputDirectory, filename.endsWith(BAKED_FST_EXTENSION, Qt::CaseInsensitive));
|
baker = std::make_unique<FSTBaker>(bakeableModelURL, bakedOutputDirectory, originalOutputDirectory, filename.endsWith(BAKED_FST_EXTENSION, Qt::CaseInsensitive));
|
||||||
} else if (filename.endsWith(FBX_EXTENSION, Qt::CaseInsensitive)) {
|
} else if (filename.endsWith(FBX_EXTENSION, Qt::CaseInsensitive)) {
|
||||||
baker = std::make_unique<FBXBaker>(bakeableModelURL, destinationPath, bakedOutputDirectory, originalOutputDirectory, filename.endsWith(BAKED_FBX_EXTENSION, Qt::CaseInsensitive));
|
baker = std::make_unique<FBXBaker>(bakeableModelURL, bakedOutputDirectory, originalOutputDirectory, filename.endsWith(BAKED_FBX_EXTENSION, Qt::CaseInsensitive));
|
||||||
} else if (filename.endsWith(OBJ_EXTENSION, Qt::CaseInsensitive)) {
|
} else if (filename.endsWith(OBJ_EXTENSION, Qt::CaseInsensitive)) {
|
||||||
baker = std::make_unique<OBJBaker>(bakeableModelURL, destinationPath, bakedOutputDirectory, originalOutputDirectory);
|
baker = std::make_unique<OBJBaker>(bakeableModelURL, bakedOutputDirectory, originalOutputDirectory);
|
||||||
//} else if (filename.endsWith(GLTF_EXTENSION, Qt::CaseInsensitive)) {
|
//} else if (filename.endsWith(GLTF_EXTENSION, Qt::CaseInsensitive)) {
|
||||||
//baker = std::make_unique<GLTFBaker>(bakeableModelURL, inputTextureThreadGetter, bakedOutputDirectory, originalOutputDirectory);
|
//baker = std::make_unique<GLTFBaker>(bakeableModelURL, inputTextureThreadGetter, bakedOutputDirectory, originalOutputDirectory);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -23,9 +23,9 @@ bool isModelBaked(const QUrl& bakeableModelURL);
|
||||||
|
|
||||||
// Assuming the URL is valid, gets the appropriate baker for the given URL, and creates the base directory where the baker's output will later be stored
|
// Assuming the URL is valid, gets the appropriate baker for the given URL, and creates the base directory where the baker's output will later be stored
|
||||||
// Returns an empty pointer if a baker could not be created
|
// Returns an empty pointer if a baker could not be created
|
||||||
std::unique_ptr<ModelBaker> getModelBaker(const QUrl& bakeableModelURL, const QString& contentOutputPath, const QUrl& destinationPath);
|
std::unique_ptr<ModelBaker> getModelBaker(const QUrl& bakeableModelURL, const QString& contentOutputPath);
|
||||||
|
|
||||||
// Similar to getModelBaker, but gives control over where the output folders will be
|
// Similar to getModelBaker, but gives control over where the output folders will be
|
||||||
std::unique_ptr<ModelBaker> getModelBakerWithOutputDirectories(const QUrl& bakeableModelURL, const QUrl& destinationPath, const QString& bakedOutputDirectory, const QString& originalOutputDirectory);
|
std::unique_ptr<ModelBaker> getModelBakerWithOutputDirectories(const QUrl& bakeableModelURL, const QString& bakedOutputDirectory, const QString& originalOutputDirectory);
|
||||||
|
|
||||||
#endif // hifi_BakerLibrary_h
|
#endif // hifi_BakerLibrary_h
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
|
|
||||||
#include <FSTReader.h>
|
#include <FSTReader.h>
|
||||||
|
|
||||||
FSTBaker::FSTBaker(const QUrl& inputMappingURL, const QUrl& destinationPath, const QString& bakedOutputDirectory, const QString& originalOutputDirectory, bool hasBeenBaked) :
|
FSTBaker::FSTBaker(const QUrl& inputMappingURL, const QString& bakedOutputDirectory, const QString& originalOutputDirectory, bool hasBeenBaked) :
|
||||||
ModelBaker(inputMappingURL, destinationPath, bakedOutputDirectory, originalOutputDirectory, hasBeenBaked) {
|
ModelBaker(inputMappingURL, bakedOutputDirectory, originalOutputDirectory, hasBeenBaked) {
|
||||||
if (hasBeenBaked) {
|
if (hasBeenBaked) {
|
||||||
// Look for the original model file one directory higher. Perhaps this is an oven output directory.
|
// Look for the original model file one directory higher. Perhaps this is an oven output directory.
|
||||||
QUrl originalRelativePath = QUrl("../original/" + inputMappingURL.fileName().replace(BAKED_FST_EXTENSION, FST_EXTENSION));
|
QUrl originalRelativePath = QUrl("../original/" + inputMappingURL.fileName().replace(BAKED_FST_EXTENSION, FST_EXTENSION));
|
||||||
|
@ -69,7 +69,7 @@ void FSTBaker::bakeSourceCopy() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto baker = getModelBakerWithOutputDirectories(bakeableModelURL, _destinationPath, _bakedOutputDir, _originalOutputDir);
|
auto baker = getModelBakerWithOutputDirectories(bakeableModelURL, _bakedOutputDir, _originalOutputDir);
|
||||||
_modelBaker = std::unique_ptr<ModelBaker>(dynamic_cast<ModelBaker*>(baker.release()));
|
_modelBaker = std::unique_ptr<ModelBaker>(dynamic_cast<ModelBaker*>(baker.release()));
|
||||||
if (!_modelBaker) {
|
if (!_modelBaker) {
|
||||||
handleError("The model url '" + bakeableModelURL.toString() + "' from the FST file '" + _originalOutputModelPath + "' (property: '" + FILENAME_FIELD + "') could not be used to initialize a valid model baker");
|
handleError("The model url '" + bakeableModelURL.toString() + "' from the FST file '" + _originalOutputModelPath + "' (property: '" + FILENAME_FIELD + "') could not be used to initialize a valid model baker");
|
||||||
|
|
|
@ -18,7 +18,7 @@ class FSTBaker : public ModelBaker {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FSTBaker(const QUrl& inputMappingURL, const QUrl& destinationPath, const QString& bakedOutputDirectory, const QString& originalOutputDirectory = "", bool hasBeenBaked = false);
|
FSTBaker(const QUrl& inputMappingURL, const QString& bakedOutputDirectory, const QString& originalOutputDirectory = "", bool hasBeenBaked = false);
|
||||||
|
|
||||||
virtual QUrl getFullOutputMappingURL() const override;
|
virtual QUrl getFullOutputMappingURL() const override;
|
||||||
|
|
||||||
|
|
|
@ -44,13 +44,12 @@ void BakerCLI::bakeFile(QUrl inputUrl, const QString& outputPath, const QString&
|
||||||
static const QString SCRIPT_EXTENSION { "js" };
|
static const QString SCRIPT_EXTENSION { "js" };
|
||||||
|
|
||||||
_outputPath = outputPath;
|
_outputPath = outputPath;
|
||||||
QUrl destinationPath = QUrl(outputPath);
|
|
||||||
|
|
||||||
// create our appropiate baker
|
// create our appropiate baker
|
||||||
if (type == MODEL_EXTENSION || type == FBX_EXTENSION) {
|
if (type == MODEL_EXTENSION || type == FBX_EXTENSION) {
|
||||||
QUrl bakeableModelURL = getBakeableModelURL(inputUrl);
|
QUrl bakeableModelURL = getBakeableModelURL(inputUrl);
|
||||||
if (!bakeableModelURL.isEmpty()) {
|
if (!bakeableModelURL.isEmpty()) {
|
||||||
_baker = getModelBaker(bakeableModelURL, outputPath, destinationPath);
|
_baker = getModelBaker(bakeableModelURL, outputPath);
|
||||||
if (_baker) {
|
if (_baker) {
|
||||||
_baker->moveToThread(Oven::instance().getNextWorkerThread());
|
_baker->moveToThread(Oven::instance().getNextWorkerThread());
|
||||||
}
|
}
|
||||||
|
@ -59,7 +58,7 @@ void BakerCLI::bakeFile(QUrl inputUrl, const QString& outputPath, const QString&
|
||||||
_baker = std::unique_ptr<Baker> { new JSBaker(inputUrl, outputPath) };
|
_baker = std::unique_ptr<Baker> { new JSBaker(inputUrl, outputPath) };
|
||||||
_baker->moveToThread(Oven::instance().getNextWorkerThread());
|
_baker->moveToThread(Oven::instance().getNextWorkerThread());
|
||||||
} else if (type == MATERIAL_EXTENSION) {
|
} else if (type == MATERIAL_EXTENSION) {
|
||||||
_baker = std::unique_ptr<Baker> { new MaterialBaker(inputUrl.toDisplayString(), true, outputPath, destinationPath) };
|
_baker = std::unique_ptr<Baker> { new MaterialBaker(inputUrl.toDisplayString(), true, outputPath) };
|
||||||
_baker->moveToThread(Oven::instance().getNextWorkerThread());
|
_baker->moveToThread(Oven::instance().getNextWorkerThread());
|
||||||
} else {
|
} else {
|
||||||
// If the type doesn't match the above, we assume we have a texture, and the type specified is the
|
// If the type doesn't match the above, we assume we have a texture, and the type specified is the
|
||||||
|
|
|
@ -152,7 +152,7 @@ void DomainBaker::addModelBaker(const QString& property, const QString& url, con
|
||||||
// setup a ModelBaker for this URL, as long as we don't already have one
|
// setup a ModelBaker for this URL, as long as we don't already have one
|
||||||
bool haveBaker = _modelBakers.contains(bakeableModelURL);
|
bool haveBaker = _modelBakers.contains(bakeableModelURL);
|
||||||
if (!haveBaker) {
|
if (!haveBaker) {
|
||||||
QSharedPointer<ModelBaker> baker = QSharedPointer<ModelBaker>(getModelBaker(bakeableModelURL, _contentOutputPath, _destinationPath).release(), &Baker::deleteLater);
|
QSharedPointer<ModelBaker> baker = QSharedPointer<ModelBaker>(getModelBaker(bakeableModelURL, _contentOutputPath).release(), &Baker::deleteLater);
|
||||||
if (baker) {
|
if (baker) {
|
||||||
// Hold on to the old url userinfo/query/fragment data so ModelBaker::getFullOutputMappingURL retains that data from the original model URL
|
// Hold on to the old url userinfo/query/fragment data so ModelBaker::getFullOutputMappingURL retains that data from the original model URL
|
||||||
// Note: The ModelBaker currently doesn't store this in the FST because the equal signs mess up FST parsing.
|
// Note: The ModelBaker currently doesn't store this in the FST because the equal signs mess up FST parsing.
|
||||||
|
@ -272,7 +272,7 @@ void DomainBaker::addMaterialBaker(const QString& property, const QString& data,
|
||||||
|
|
||||||
// setup a baker for this material
|
// setup a baker for this material
|
||||||
QSharedPointer<MaterialBaker> materialBaker {
|
QSharedPointer<MaterialBaker> materialBaker {
|
||||||
new MaterialBaker(data, isURL, _contentOutputPath, _destinationPath),
|
new MaterialBaker(data, isURL, _contentOutputPath),
|
||||||
&MaterialBaker::deleteLater
|
&MaterialBaker::deleteLater
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -180,7 +180,7 @@ void ModelBakeWidget::bakeButtonClicked() {
|
||||||
|
|
||||||
QUrl bakeableModelURL = getBakeableModelURL(modelToBakeURL);
|
QUrl bakeableModelURL = getBakeableModelURL(modelToBakeURL);
|
||||||
if (!bakeableModelURL.isEmpty()) {
|
if (!bakeableModelURL.isEmpty()) {
|
||||||
std::unique_ptr<Baker> baker = getModelBaker(bakeableModelURL, outputDirectory.path(), QUrl(outputDirectory.path()));
|
std::unique_ptr<Baker> baker = getModelBaker(bakeableModelURL, outputDirectory.path());
|
||||||
if (baker) {
|
if (baker) {
|
||||||
// everything seems to be in place, kick off a bake for this model now
|
// everything seems to be in place, kick off a bake for this model now
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue