- Added a broad set of new pattern nodes to MaterialX, including Circle, Hexagon, Cloverleaf, Line, Grid, Crosshatch, Checkerboard, Random Color, Random Float, Triangle Wave, Integer Floor, Integer Ceiling, and Distance.
- Added support for MaterialX builds on iOS.
- Added support for drag-and-drop import of MaterialX files in the Web Viewer.
- Added generation of MaterialX Python wheels in GitHub Actions, enabling the distribution of MaterialX Python packages through PyPI.
- Added support for the lin_displayp3 and srgb_displayp3 colorspaces in shader generation.
- Added support for the blackbody PBR node in shader generation.
- Added support for displacement in MDL generation.
- Added version details to shared libraries on Windows.
- Added a MacOS 13 build to GitHub Actions.
- Raised the minimum C++ version for MaterialX builds to C++14.
- Upgraded the PyBind11 library to version 2.10.4, raising the minimum Python version to 3.6, and enabling support for Python versions 3.11 and beyond.
- Improved the performance and convergence of GGX importance sampling in GLSL generation, leveraging insights from the HPG 2023 paper by Jonathan Dupuy and Anis Benyoub.
- Improved property panel display in the MaterialX Graph Editor.
- Improved node spacing in the MaterialX Graph Editor.
- Improved the robustness of MaterialX unit tests with respect to the current working directory.
- Simplified the handling of default colors in GLSL generation, removing dynamic branches on texture size.
- Simplified the definitions of the default color transforms, implementing them as language-independent MaterialX graphs.
- Moved the MaterialX specification to public Markdown files in GitHub, enabling direct contributions from the community.
- Fixed brightness artifacts in the triplanar projection node.
- Aligned default values for conductor_bsdf with the MaterialX specification.
- Fixed volume mixing in MDL generation.
- Fixed a bug to improve shader generation determinism.
- Fixed a bug to improve the consistency of auto layout in the MaterialX Graph Editor.
- Added the MaterialX Graph Editor, an example application for visualizing, creating, and editing MaterialX graphs.
- Added support for the Metal Shading Language in MaterialX shader generation and rendering.
- Added support for the generalized_schlick_edf node, enabling the expression of coated emissive surfaces.
- Added support for the adobergb and lin_adobergb color spaces in shader generation.
- Added uisoftmin and uisoftmax attributes to mix nodes and IOR inputs.
- Added support for authored bitangent vectors in GLSL, selected by the hwImplicitBitangents generator option.
- Added a tangent input to the glTF PBR shading model.
- Added a Clang Format step to GitHub Actions builds.
- Added support for Xcode 14.
- Included the standard data libraries in MaterialX Python packages.
- Improved the support library and node implementations for OSL generation.
- Updated MDL shader generation to support MDL 1.7.
- Improved the handling of functional graphs in MDL generation.
- Upgraded the NanoGUI version in the viewer to support Apple M1 builds.
- Upgraded the Catch library to version 2.13.9.
- Fixed logic for tangent basis orthogonalization in generated GLSL.
- Fixed logic for metallic F90 and an opacity edge case in UsdPreviewSurface.
- Fixed parsing of inline source code variables in node implementations.
- Added new Unified Noise, Color Correct, and Bump nodes, providing artistic interfaces over the standard procedural, adjustment, and geometric primitives.
- Added shader generation support for the MaterialX closures in OSL, selected by a new CMake build option.
- Added a shader translation graph from Autodesk Standard Surface to glTF PBR.
- Added support for the transmission_extra_roughness input in the Standard Surface shading model.
- Added support for the iridescence inputs in the glTF PBR shading model.
- Added support for the subsurface_bsdf node in MDL.
- Added an operationorder input to the 'place2d' node.
- Extended the mix node to support multi-channel interpolators.
- Extended the flattenSubgraphs method to handle a broader range of graph structures.
- Improved the alignment of the UsdPreviewSurface shading graph with reference implementations.
- Improved the accuracy of the thin-film BSDF implementation in GLSL.
- Improved code generation for the mix node of 'surfaceshader' type.
- Removed add and multiply nodes for 'surfaceshader', 'volumeshader', and 'displacementshader' types.
- Refactored and extended the Advanced Options panel in MaterialXView.
- Fixed the implementation of the screen compositing node in GLSL, OSL, and MDL.
- Fixed parent/child precedence in the getGeometryBindings function.
- Fixed OpenGL errors when unbinding geometry in MaterialXView on MacOS.
- Added a refraction approximation for transmissive surfaces in GLSL, selected by the hwTransmissionRenderMethod generator option.
- Added support for generalized Schlick transmission in GLSL and OSL.
- Added support for code generation from material nodes.
- Added a specialization of GlslShaderGenerator for Vulkan GLSL generation.
- Added the Chess Set example from the Karma: A Beautiful Game tutorial. Contributed to the MaterialX project by SideFX, original artwork by Moeen and Mujtaba Sayed.
- Added static and dynamic analysis tests to GitHub Actions builds.
- Added support for GCC 12, Clang 13, and Clang 14.
- Switched to relative shader includes within the MaterialX data libraries, enabling custom folder names in distributions.
- Improved and extended the sample Web Viewer.
- Fixed math for normalizing normal and tangent vectors in GLSL.
- Fixed math for transforming a vector4 by a matrix in OSL.
- Fixed compatibility of OSL Worley noise with OSL 1.9.10.
- Fixed layering of thin-film effects in the Standard Surface shading model.
- Fixed input default values in the glTF PBR shading model.
- Added JavaScript bindings for MaterialXCore, MaterialXFormat, and MaterialXGenGlsl.
- Added a sample Web Viewer, built and deployed through GitHub Actions.
- Added a MaterialX graph for the glTF PBR shading model.
- Added new 'worleynoise2d' and 'worleynoise3d' nodes, with implementations in GLSL, OSL, and MDL.
- Added new 'surface_unlit' node, with implementations in GLSL, OSL, and MDL.
- Added support for the glTF geometry format in MaterialXRender and MaterialXView.
- Moved the MaterialX project to the Academy Software Foundation GitHub.
- Removed hardcoded references to "libraries" in calls to GenContext::registerSourceCodeSearchPath. (See Developer Notes below for additional details.)
- Improved the accuracy of mx_ggx_dir_albedo_analytic and mx_fresnel_conductor in GLSL.
- Updated the PyBind11 library to version 2.9.0.
- Aligned GLSL and MDL implementations of 'fractal3d' with OSL.
- Fixed MDL implementations of 'sheen_bsdf' and 'thin_film_bsdf'.
- Fixed an error in code generation from multi-output node graphs.
- This release removes hardcoded references to "libraries" in calls to GenContext::registerSourceCodeSearchPath within the MaterialX codebase. Applications with their own custom code generators should make the same change, removing hardcoded references to "libraries" in calls to GenContext::registerSourceCodeSearchPath. See pull request 877 for coding details.
- Added an inheritance structure for versions of Autodesk Standard Surface.
- Added versioning and customization support to MaterialX namespaces in C++.
- Added preprocessor definitions for the API version to MaterialXCore.
- Added color transform methods to the Image class.
- Added an initial ClangFormat file for the MaterialX codebase.
- Added initial support for FreeBSD.
- Added support for Xcode 13.
- Refactored BSDF handling in shader generation, allowing for more flexible and efficient vertical layering.
- Optimized GLSL implementations for GGX specular, moving common computations to tangent space.
- Refactored the TextureBaker API for clarity and flexibility.
- Merged the ViewHandler and viewer camera into a new Camera class in MaterialXRender.
- Updated CMake configuration generation logic, adding handling for shared library builds.
- Updated the PyBind11 library to version 2.7.1
- Fixed a performance regression in MaterialXView for multi-UDIM assets.
- Fixed a bug that caused shader inputs to be skipped in createUIPropertyGroups.
- Fixed the value of transmission roughness in UsdPreviewSurface.
- Fixed Vulkan compatibility for generated GLSL code.
- Added an initial shader translation graph from Autodesk Standard Surface to UsdPreviewSurface.
- Added example script translateshader.py with validation in GitHub Actions.
- Added support for filename templates in texture baking.
- Added graph definitions for the MaterialX Lama node set.
- Added UI properties to the interface of UsdPreviewSurface.
- Added an initial ESSL shader generator.
- Added support for GCC 11.
- Improved the accuracy of directional albedo computations for GGX specular and Imageworks sheen.
- Updated default color space names to follow ACES 1.2 conventions (e.g. g22_rec709), while maintaining compatibility with legacy names (e.g. gamma22).
- Fixed the default value of the roughness input of UsdPreviewSurface.
- Fixed the assignment of channel names in EXR files written through OpenImageIO.
- Added support for shared library builds on Windows.
- Added support for 16-bit unsigned integer images in MaterialXRender.
- Added support for compound nodegraphs with user interfaces in shader and UI generation.
- Added headers for newly proposed MaterialX closures in OSL.
- Added a shader translation command to the viewer, assigned to the 'T' hotkey.
- Improved the memory efficiency of texture baking operations.
- Improved the compatibility of generated MDL code with Omniverse.
- Refactored image resolution logic into new methods ImageHandler::getReferencedImages and MaterialX::getMaxDimensions.
- Moved the viewer hotkey for GLSL code generation from 'S' to 'G' for consistency with other languages.
- Fixed the Color3.asTuple and Color4.asTuple methods in Python
Updated the MaterialX library to the v1.38 specification. See the v1.38 changelist for full details.
- Added support for the generalized 'layer' node in Physically Based Shading.
- Added user controls for texture baking and wedge rendering in the MaterialX Viewer.
- Added support for Nvidia's Material Definition Language (MDL) in MaterialX code generation.
- Added support for inline source code in Implementation elements.
- Added support for TargetDef elements.
- Added viewer rendering to cloud-based tests in GitHub Actions.
- Added support for Xcode 12.
- Updated the set of standard nodes to match the v1.38 specification, including significant improvements to the Physically Based Shading nodes.
- Replaced specialized Material elements with material nodes, allowing more flexible material definitions and more consistent traversal.
- Unified the Input and Parameter element classes, simplifying the MaterialX API and client code.
- Updated the MaterialX viewer to use native classes for GLSL rendering and camera controls, opening the door to additional render frameworks in the future.
- Updated the prefiltered path for specular environment rendering in GLSL, providing a closer match with the Filtered Importance Sampling path.
- Updated the definition of Autodesk Standard Surface to version 1.0.1.
- Updated the definition of UsdPreviewSurface to version 2.3.
- Renamed the default branch from master to main.
- Removed support for the 'complex_ior', 'backfacing', 'viewdirection' and 'fresnel' nodes in Physically Based Shading.
- Removed support for the Color2 type.
- Added software rendering tests for MaterialXRenderGlsl to GitHub Actions.
- Improved the robustness of context management in MaterialXRenderGlsl.
- Added a missing VAO binding to GlslRenderer::drawScreenSpaceQuad.
- Added Render Transparency and Render Double-Sided options to the Advanced Settings panel of the viewer.
- Added viewer support for partially-transparent mesh partitions.
- Added a subsurface scattering approximation to MaterialX GLSL.
- Added a CMake option for building shared libraries on Linux and MacOS.
- Added support for the latest OpenImageIO interface.
- Improved the robustness of texture baking and shader translation.
- Unified the handling of missing images in generated GLSL.
- Moved CI builds from Travis and Appveyor to GitHub Actions.
- Fixed a bug in code generation for custom BSDF/EDF graphs.
- Fixed rendering of single-channel textures in MaterialXRenderGlsl.
- Added support for texture baking from Python, including new example script baketextures.py.
- Added support for texture baking of materials with multiple UDIMs.
- Added support for floating-point render targets in ShaderRenderer and its subclasses, allowing for HDR texture baking.
- Added support for displacement shaders in generated OSL.
- Added the ShaderTranslator class, laying the groundwork for support of shader translation graphs.
- Added Python bindings for the Image class.
- Fixed the alignment of environment backgrounds in the viewer.
- Removed the CopyOptions class, making it the default behavior of Document::importLibrary to skip conflicting elements.
- Added command-line options for mesh, light, and camera transforms to the viewer.
- Added command-line options for screen dimensions and background color to the viewer.
- Added a Light Rotation slider to the Advanced Settings panel of the viewer.
- Added utility methods Backdrop::setContainsElements and Backdrop::getContainsElements.
- Added backwards compatibility for OpenImageIO 1.x.
- Added support for GCC 10.
- Improved energy conservation and preservation computations in generated GLSL.
- Upgraded Smith masking-shadowing to height-correlated form in generated GLSL.
- Improved the robustness of tangent frame computations in MaterialXRender.
- Renamed Backdrop::setContains and getContains to Backdrop::setContainsString and getContainsString for consistency.
- Fixed the GLSL implementation of Burley diffuse for punctual lights.
- Fixed the upgrade path for compare nodes in v1.36 documents.
Updated the MaterialX library to the v1.37 specification. See the v1.37 changelist for full details.
- Added a Shadow Map option to the viewer, supported by shadowing functionality in GLSL code generation.
- Added support for the 'uisoftmin', 'uisoftmax', and 'uistep' attributes, updating Autodesk Standard Surface to leverage these features.
- Added support for LookGroup elements.
- Added support for Clang 9.
- Updated the set of standard nodes to match the v1.37 specification.
- Unified the rules for NodeDef outputs, with all NodeDefs defining their output set through Output child elements rather than 'type' attributes.
- Replaced GeomAttr elements with GeomProp elements.
- Replaced backdrop nodes with Backdrop elements.
- Aligned Matrix33 and Matrix44 with the row-vector convention, for improved consistency with Imath, USD, and other libraries.
- Updated the stb_image library to version 2.23.
- Added a Load Environment option to the viewer, allowing arbitrary latitude-longitude HDR environments to be loaded at run-time.
- Added an initial TextureBaker class, supporting baking of procedural content to textures.
- Added initial support for units, including the MaterialX::Unit, MaterialX::UnitDef, and MaterialX::UnitTypeDef classes.
- Added support for unit conversion in shader code generation.
- Added support for Visual Studio 2019.
- Updated Autodesk Standard Surface to the latest interface and graph.
- Updated the PyBind11 library to version 2.4.3.
- Added a Save Material option to the viewer.
- Added property accessors to PropertyAssign and PropertySetAssign
- Added Python bindings for TypeDesc and array-type Values.
- Added Python functions getTypeString, getValueString, and createValueFromStrings.
- Added support for GCC 9 and Clang 8.
- Updated the interface of readFromXmlFile and writeToXmlFile to support FilePath and FileSearchPath arguments.
- Extended Python bindings for FilePath and FileSearchPath.
- Deprecated Python functions typeToName, valueToString, and stringToValue.
- Removed deprecated Python functions objectToString and stringToObject.
- Fixed the OSL implementation of roughness_dual.
Merged shader code generation and physically-based shading nodes from Autodesk's ShaderX extensions. Added a default MaterialX viewer based on GLSL shader generation.
- Added the MaterialXGenShader library, supporting shader code generation in GLSL and OSL.
- Added the MaterialXRender library, providing helper functionality for rendering MaterialX content.
- Added the MaterialXView library, providing a default MaterialX viewer.
- Added the physically-based shading node library (libraries/pbrlib).
- Added a root-level 'cmake' folder, including a standard FindMaterialX module.
- Added a root-level 'resources' folder, including example materials and meshes.
- Added documents for the 1.37 specification.
- Moved the MaterialX data libraries from 'documents/Libraries' to 'libraries'.
- Updated MaterialX node definitions to the 1.37 specification.
- Updated the PyBind11 library to version 2.2.4.
- Removed customizations of PyBind11 to support Python 2.6. Only Python versions 2.7 and 3.x are now supported.
- Added support for 'nodedef' attributes on MaterialX::Node, integrating this usage into GraphElement::addNodeInstance.
- Added the MaterialX::GeomPropDef class for geometric input declarations.
- Added the Document::getGeomAttrValue method.
- Added the ValueElement::getResolvedValue method.
- Added support for the MATERIALX_SEARCH_PATH environment variable.
- Added support for GCC 8 and Clang 7.
- Added callbacks Observer::onCopyContent and Observer::onClearContent, and removed callback Observer::onInitialize.
- Moved the standard document library to the 'documents/Libraries/stdlib' folder.
- Added support for interface tokens, including the MaterialX::BindToken class and '[TOKEN]' syntax in filenames.
- Added support for Clang 6.
- Updated geometry token syntax from '%TOKEN' to '<TOKEN>'.
- Replaced readXIncludes boolean with a readXIncludeFunction callback in the XmlReadOptions structure.
- Combined individual options into an XmlWriteOptions argument for the XML write functions.
- Extended functionality of the vector and matrix classes.
- Updated the PyBind11 library to version 2.2.3.
- Updated the PugiXML library to version 1.9.
- Fixed graph implementations of range, extract, tiledimage, and ramp4 nodes.
Updated the MaterialX library to the v1.36 specification. See the v1.36 changelist for full details.
- Added support for Element namespaces.
- Added support for NodeDef inheritance.
- Added support for root-level node elements.
- Added support for inheritance attributes on MaterialX::Material and MaterialX::Look.
- Added support for include and exclude attributes on MaterialX::Collection.
- Added the MaterialX::Token class for string substitutions.
- Added the MaterialX::Variant, MaterialX::VariantSet, and MaterialX::VariantAssign classes.
- Added the MaterialX::GeomPath class for geometry name comparisons.
- Added the Collection::matchesGeomString method, for testing matches between collections and geometries.
- Added the Material::getGeometryBindings method, for finding the bindings of a material to specific geometries.
- Removed the MaterialX::MaterialInherit and MaterialX::LookInherit classes.
- Removed the MaterialX::CollectionAdd and MaterialX::CollectionRemove classes.
- Removed the MaterialX::Override class and support for public names.
- Removed the 'channels' attribute from MaterialX::InterfaceElement.
- Removed the Material::getReferencingMaterialAssigns method (deprecated in Python).
- Added material inheritance support to graph traversal and the high-level Material API.
- Added Material methods getActiveShaderRefs and getActiveOverrides.
- Added PropertySet methods setPropertyValue and getPropertyValue.
- Added Element methods setInheritsFrom, getInheritsFrom, traverseInheritance, hasInheritanceCycle, and getDescendant.
- Added function templates MaterialX::fromValueString and MaterialX::toValueString.
- Added math functionality to the vector and matrix classes.
- Added support for Visual Studio 2017, GCC 7, and Clang 5.
- Renamed Matrix3x3 to Matrix33 and Matrix4x4 to Matrix44.
- Renamed VectorN::length to VectorN::numElements.
- Updated the PyBind11 library to version 2.2.1.
- Added high-level Material API, including getPrimaryShaderParameters, getPrimaryShaderInputs, getBoundGeomStrings, and getBoundGeomCollections.
- Added methods ValueElement::getBoundValue and ValueElement::getDefaultValue.
- Added support for multi-output nodes.
- Added support for TypeDef members.
- Added StringResolver class, for applying substring modifiers to data values.
- Added example interfaces for the Disney BRDF, Disney BSDF, and alSurface shaders.
- Renamed method Material::getReferencedShaderDefs to Material::getShaderNodeDefs.
- Renamed method ShaderRef::getReferencedShaderDef to ShaderRef::getNodeDef.
- Renamed method Node::getReferencedNodeDef to Node::getNodeDef.
- Added a 'string' suffix to all accessors for 'node', 'nodedef', and 'collection' strings.
- Combined individual booleans into an XmlReadOptions argument for the XML read functions.
- Removed method Document::applyStringSubstitutions (deprecated in Python).
- Removed method InterfaceElement::getParameterValueString (deprecated in Python).
- Added support for Python 3.
- Added support for standard TypeDef attributes.
- Added support for values of type 'stringarray'.
- Added method Element::setName.
- Extended Python bindings for Document, NodeGraph, MaterialAssign, and Collection.
- Modified NodeGraph::topologicalSort to return elements in a more intuitive top-down order, with upstream elements preceding downstream elements.
- Removed special cases for string return values in MaterialX Python, with all strings now returned as 'unicode' in Python 2 and 'str' in Python 3.
- Updated OSL reference implementations.
- Fixed handling of empty names in Element::addChildOfCategory.
- Fixed an edge case in Document::upgradeVersion.
- Added OSL source files for the standard nodes.
- Added example document 'PostShaderComposite.mtlx'.
- Added method MaterialX::prependXInclude.
- Argument 'writeXIncludes' defaults to true in MaterialX::writeToXmlStream and MaterialX::writeToXmlString.
- Fixed handling of BindInput elements with missing connections.
- Added a 'viewercollection' attribute to MaterialX::Visibility.
- Added Python support for visibility and source URI methods.
- Changed naming convention from 'ColorSpace' to 'ColorManagement' in Document methods.
- Split library document 'mx_stdlib.mtlx' into 'mx_stdlib_defs.mtlx' and 'mx_stdlib_osl_impl.mtlx'.
Updated the MaterialX library to the v1.35 specification. See the v1.35 changelist for full details.
- Added the MaterialX::Visibility class.
- Added 'file', 'function', and 'language' attributes to MaterialX::Implementation.
- Added 'node' and 'nodedef' attributes to MaterialX::ShaderRef. In v1.35, these attributes define which NodeDef is referenced by a ShaderRef.
- Added a 'material' attribute to MaterialX::MaterialAssign. In v1.35, this attribute defines which Material is referenced by a MaterialAssign.
- Removed the MaterialX::LightAssign and MaterialX::Light classes. In v1.35, this functionality is now handled by the MaterialX::Visibility class.
- Removed the 'default' attribute from MaterialX::ValueElement. In v1.35, this functionality is now handled by the 'value' attribute.
- Replaced the 'matrix' type with 'matrix33' and 'matrix44', and replaced the MaterialX::Matrix16 class with MaterialX::Matrix3x3 and MaterialX::Matrix4x4.
- Renamed Material::getMaterialAssigns to Material::getReferencingMaterialAssigns.
- Changed the argument type for MaterialAssign::setExclusive and MaterialAssign::getExclusive to boolean.
- Added support for graph-based implementations of nodes.
- Added support for subtree/subgraph pruning in traversals.
- Added NodeGraph::topologicalSort and MaterialX::printGraphDot methods.
- Added a File module to MaterialXFormat and MaterialXTest.
- Extended NodeGraph::flattenSubgraphs to support subgraph recursion.
- Added a searchPath argument to MaterialX::readFromXmlFile.
- Fixed an issue where connecting elements were not returned in graph traversal edges.
- Added support for document validation, including the Document::validate and Element::validate methods.
- Added helper methods ValueElement::getResolvedValueString and Element::getNamePath.
- Added standard library document.