6#ifndef MATERIALX_TEXTUREBAKER
7#define MATERIALX_TEXTUREBAKER
21MATERIALX_NAMESPACE_BEGIN
30template <
typename Renderer,
typename ShaderGen>
37 _extension = extension;
54 _colorSpace = colorSpace;
66 _distanceUnit = unitSpace;
78 _averageImages = enable;
84 return _averageImages;
90 _optimizeConstants = enable;
96 return _optimizeConstants;
103 _outputImagePath = outputImagePath;
109 return _outputImagePath;
115 _bakedGraphName = name;
121 return _bakedGraphName;
127 _bakedGeomInfoName = name;
133 return _bakedGeomInfoName;
139 return _textureFilenameTemplate;
145 _textureFilenameTemplate = (filenameTemplate.find(
"$EXTENSION") == string::npos) ?
146 filenameTemplate +
".$EXTENSION" : filenameTemplate;
152 if (_permittedOverrides.count(key))
154 _texTemplateOverrides[key] = value;
161 _outputStream = outputStream;
167 return _outputStream;
175 _hashImageNames = enable;
181 return _hashImageNames;
187 _textureSpaceMin = min;
193 return _textureSpaceMin;
199 _textureSpaceMax = max;
205 return _textureSpaceMax;
222 const StringVec& udimSet, std::string& documentName);
232 _writeDocumentPerMaterial = value;
235 string getValueStringFromColor(
const Color4& color,
const string& type);
243 bool isUniform =
false;
249 bool isDefault =
false;
251 using BakedImageVec = vector<BakedImage>;
252 using BakedImageMap = std::unordered_map<OutputPtr, BakedImageVec>;
253 using BakedConstantMap = std::unordered_map<OutputPtr, BakedConstant>;
256 TextureBaker(
unsigned int width,
unsigned int height, Image::BaseType baseType,
bool flipSavedImage);
262 size_t findVarInTemplate(
const string& filename,
const string& var,
size_t start = 0);
276 string _distanceUnit;
278 bool _optimizeConstants;
280 string _bakedGraphName;
281 string _bakedGeomInfoName;
282 string _textureFilenameTemplate;
283 std::ostream* _outputStream;
284 bool _hashImageNames;
291 BakedImageMap _bakedImageMap;
292 BakedConstantMap _bakedConstantMap;
297 std::unordered_map<string, NodePtr> _worldSpaceNodes;
299 bool _flipSavedImage;
301 bool _writeDocumentPerMaterial;
305MATERIALX_NAMESPACE_END
307#include <MaterialXRender/TextureBaker.inl>
shared_ptr< Document > DocumentPtr
A shared pointer to a Document.
Definition: Document.h:22
Cross-platform support for file and search paths.
Context classes for shader generation.
shared_ptr< Image > ImagePtr
A shared pointer to an image.
Definition: Image.h:23
Image handler interfaces.
shared_ptr< Input > InputPtr
A shared pointer to an Input.
Definition: Interface.h:31
shared_ptr< Output > OutputPtr
A shared pointer to an Output.
Definition: Interface.h:36
std::set< string > StringSet
A set of strings.
Definition: Library.h:61
vector< string > StringVec
A vector of strings.
Definition: Library.h:57
std::unordered_map< string, string > StringMap
An unordered map with strings as both keys and values.
Definition: Library.h:59
shared_ptr< ShaderGenerator > ShaderGeneratorPtr
Shared pointer to a ShaderGenerator.
Definition: Library.h:38
Macros for declaring imported and exported symbols.
std::vector< std::pair< std::string, DocumentPtr > > BakedDocumentVec
A vector of baked documents with their associated names.
Definition: TextureBaker.h:24
shared_ptr< const Node > ConstNodePtr
A shared pointer to a const Node.
Definition: Node.h:26
shared_ptr< Node > NodePtr
A shared pointer to a Node.
Definition: Node.h:24
A four-component color value.
Definition: Types.h:364
A generic file path, supporting both syntactic and file system operations.
Definition: File.h:27
A sequence of file paths, which may be queried to find the first instance of a given filename on the ...
Definition: File.h:219
A context class for shader generation.
Definition: GenContext.h:31
Definition: TextureBaker.h:246
Definition: TextureBaker.h:239
A helper class for baking procedural material content to textures.
Definition: TextureBaker.h:32
void setBakedGeomInfoName(const string &name)
Set the name of the baked geometry info element.
Definition: TextureBaker.h:125
void setBakedGraphName(const string &name)
Set the name of the baked graph element.
Definition: TextureBaker.h:113
void setFilenameTemplateVarOverride(const string &key, const string &value)
Set texFilenameOverrides if template variable exists.
Definition: TextureBaker.h:150
void setTextureSpaceMax(const Vector2 &max)
Set the maximum texcoords used in texture baking. Defaults to 1, 1.
Definition: TextureBaker.h:197
const FilePath & getOutputImagePath()
Get the current output location for baked texture images.
Definition: TextureBaker.h:107
std::ostream * getOutputStream() const
Return the output stream for reporting progress and warnings.
Definition: TextureBaker.h:165
bool getAverageImages() const
Return whether images should be averaged to generate constants.
Definition: TextureBaker.h:82
bool getHashImageNames() const
Return whether automatic baked texture resolution is set.
Definition: TextureBaker.h:179
void setDistanceUnit(const string &unitSpace)
Set the distance unit to which textures are baked. Defaults to meters.
Definition: TextureBaker.h:64
const string & getBakedGraphName() const
Return the name of the baked graph element.
Definition: TextureBaker.h:119
const string & getColorSpace() const
Return the color space in which color textures are encoded.
Definition: TextureBaker.h:58
void setColorSpace(const string &colorSpace)
Set the color space in which color textures are encoded.
Definition: TextureBaker.h:52
void setOutputStream(std::ostream *outputStream)
Set the output stream for reporting progress and warnings. Defaults to std::cout.
Definition: TextureBaker.h:159
void setOutputImagePath(const FilePath &outputImagePath)
Set the output location for baked texture images.
Definition: TextureBaker.h:101
void bakeAllMaterials(DocumentPtr doc, const FileSearchPath &searchPath, const FilePath &outputFileName)
Bake materials in the given document and write them to disk.
Definition: TextureBaker.inl:552
void setAverageImages(bool enable)
Set whether images should be averaged to generate constants. Defaults to false.
Definition: TextureBaker.h:76
void setOptimizeConstants(bool enable)
Set whether uniform textures should be stored as constants. Defaults to true.
Definition: TextureBaker.h:88
DocumentPtr bakeMaterialToDoc(DocumentPtr doc, const FileSearchPath &searchPath, const string &materialPath, const StringVec &udimSet, std::string &documentName)
Bake material to document in memory and write baked textures to disk.
Definition: TextureBaker.inl:484
void setupUnitSystem(DocumentPtr unitDefinitions)
Set up the unit definitions to be used in baking.
Definition: TextureBaker.inl:629
Vector2 getTextureSpaceMax() const
Return the maximum texcoords used in texture baking.
Definition: TextureBaker.h:203
void setTextureSpaceMin(const Vector2 &min)
Set the minimum texcoords used in texture baking. Defaults to 0, 0.
Definition: TextureBaker.h:185
void setExtension(const string &extension)
Set the file extension for baked textures.
Definition: TextureBaker.h:35
void setHashImageNames(bool enable)
Set whether to create a short name for baked images by hashing the baked image filenames This is usef...
Definition: TextureBaker.h:173
bool getOptimizeConstants() const
Return whether uniform textures should be stored as constants.
Definition: TextureBaker.h:94
const string & getDistanceUnit() const
Return the distance unit to which textures are baked.
Definition: TextureBaker.h:70
void optimizeBakedTextures(NodePtr shader)
Optimize baked textures before writing.
Definition: TextureBaker.inl:259
void writeDocumentPerMaterial(bool value)
Set whether to write a separate document per material when calling bakeAllMaterials.
Definition: TextureBaker.h:230
const string & getBakedGeomInfoName() const
Return the name of the baked geometry info element.
Definition: TextureBaker.h:131
Vector2 getTextureSpaceMin() const
Return the minimum texcoords used in texture baking.
Definition: TextureBaker.h:191
const string & getTextureFilenameTemplate() const
Get the texture filename template.
Definition: TextureBaker.h:137
const string & getExtension() const
Return the file extension for baked textures.
Definition: TextureBaker.h:41
void setTextureFilenameTemplate(const string &filenameTemplate)
Set the texture filename template.
Definition: TextureBaker.h:143
void bakeGraphOutput(OutputPtr output, GenContext &context, const StringMap &filenameTemplateMap)
Bake a texture for the given graph output.
Definition: TextureBaker.inl:218
void bakeShaderInputs(NodePtr material, NodePtr shader, GenContext &context, const string &udim=EMPTY_STRING)
Bake textures for all graph inputs of the given shader.
Definition: TextureBaker.inl:178
A vector of two floating-point values.
Definition: Types.h:286