Added
- Added support for the Slang shading language in MaterialX shader generation and rendering, with language bindings for Python and JavaScript.
- Added initial support for Volume Distribution Functions in hardware shading, with a dedicated VDF struct in GLSL, MSL, and Slang, and a Beer's law approximation for volumetric absorption.
- Added hardware shader generation support for compound material nodes, enabling hardware rendering of nodegraph-based materials such as LamaSurface.
- Added an initial graph refactoring framework for shader generation, supporting composable graph transformations including node elision, premultiplied BSDF addition, and layer-over-mix distribution.
- Added a nightly build workflow in GitHub CI for long-running validation tasks, including render comparison between rasterized and ray-traced renders and MDL compiler validation of generated shaders.
- Added OSL implementations for hex-tiled images, completing cross-language coverage for hextiling nodes.
- Added an OSL command string code generator, enabling the mixing of external OSL shaders with MaterialX-generated nodes.
- Added support for GLSL probability density functions, providing a foundation for path-tracer use of generated GLSL, ESSL, and MSL shaders.
- Added a retroreflective input to specular BSDF nodes, enabling retroreflective scattering behavior on dielectric, conductor, and generalized Schlick BSDFs.
- Added extract node support for
matrix33andmatrix44types, enabling row vector extraction by index from matrices. - Added flake node implementations in GLSL, OSL, and MDL, providing shader support for the
flake2dandflake3dnodes, using standard cellnoise functions for optimized noise generation. - Added an enableDirectLight option to the MaterialX Viewer, enabling pure image-based lighting without direct light contributions.
- Added support for upstream and downstream node traversal in the property editor of the MaterialX Graph Editor.
- Added file image previews for image nodes in the MaterialX Graph Editor, with a configurable preview size.
- Added shader generation options for Airy Fresnel iterations and constant node eliding, supporting quality and performance trade-offs on iridescent materials and interactive editing workflows.
- Added Python operator bindings for Vector and Matrix types.
- Added a Python wrapper for Metal image handler creation on MslRenderer, extending language binding coverage for MSL rendering.
- Added MDL implementations for the frame node via scene data and geomcolor nodes with index 0.
- Added support for Doxygen-generated docstrings in MaterialX Python bindings, enabling IDE support and interactive help.
- Added a nodedef comparison script for validating alignment between data library definitions and specification documents.
- Added Perfetto tracing as an optional performance instrumentation framework, with extended instrumentation for shader code generation and rendering.
- Added developer guidelines to the MaterialX contributing guide.
Changed
- Improved specifications for the Standard Nodes, PBR Nodes, and NPR Nodes, converting prose descriptions to structured tables.
- Updated the OpenPBR Surface definition to v1.1.1, omitting specular_weight from the computation of metal edge tint and connecting geometry_thin_walled to the surface node.
- Updated the UsdPreviewSurface definition to the latest Pixar specification, revising the interpretation of
opacity,opacityMode, andopacityThreshold. - Consolidated shading graphs for OpenPBR Surface, Standard Surface, and glTF PBR, replacing hardcoded graph overrides with composable graph refactoring.
- Consolidated hardware shader generation in a new MaterialXGenHw module, unifying node implementations across GLSL and MSL, adopting syntax-portable type names for native Metal support, and streamlining the ShaderGenerator API across hardware shading language generators.
- Refactored the layout engine in the MaterialX Graph Editor, organizing its logic into a new Layout class aligned with the Sugiyama layered graph drawing algorithm.
- Improved the Metal syntax in generated MSL shaders, replacing preprocessor workarounds with native Metal code.
- Improved the MDL generator with support for backsurface shaders and volume IOR preservation.
- Improved material name handling in shader generation, converting names to identifiers early for cleaner output naming.
- Improved thread safety in the Document cache, adopting
std::shared_mutexfor reader and writer guarantees. - Improved hextiling implementations in GLSL and MDL, using array-based data structures for better maintainability.
- Optimized rotate3d in GLSL and OSL, using Rodrigues' rotation formula.
- Improved the translation graph from Standard Surface to glTF PBR, adding support for specular and specular color, IOR, emissive strength, dispersion, iridescence, normal and tangent, and alpha.
- Improved the MaterialX Web Viewer with an FPS timer, consistent styling, improved menu labels, and responsive layout for mobile.
- Modernized JavaScript build and test infrastructure in the MaterialX Web Viewer, migrating to ES modules, adopting Playwright for browser testing, and leveraging npm workspaces.
- Improved the MaterialX Graph Editor with UI/UX refinements including case-insensitive node search and auto-selection of new nodes, and consolidated edge creation with unified logic for document-scope outputs.
- Extended shader generation tests to cover all example materials.
- Refactored ShaderRenderTester::validate into modular methods, with new helper classes for test logging, performance metrics, and Perfetto tracing.
- Migrated Python packaging to
pyproject.toml, replacing the legacysetup.pyscript with the modern PEP 517 and PEP 621 standard. - Raised the default PyBind11 version to PyBind11 3.0.1, with Python 3.14 added to GitHub CI.
- Raised the default Emscripten SDK to emsdk 4.0.8 in the MaterialX Web Viewer.
- Upgraded the default three.js version to r183 in the MaterialX Web Viewer.
- Updated the StbImage library to stb_image v2.30 and stb_image_write v1.16, resolving a hang on invalid HDR files.
- Improved CMake install ordering for pip, running Python package installation at the end of the build to facilitate downstream customization.
- Improved build configuration in GitHub CI, with streamlined test logging, log file artifacts, and reduced dependency installation.
Fixed
- Fixed node key collisions in ShaderGraph, addressing crashes and shader generation errors when multiple nodes shared the same base name.
- Fixed a nullptr dereference in MaterialNode when a
surfaceshaderis bound through a graph interface with no upstream node. - Fixed prefiltered environment lighting in GLSL to use directional albedo rather than Fresnel weighting alone.
- Fixed precision in generated ESSL, using high precision to avoid underflow and accumulated math errors in Standard Surface, OpenPBR, and glTF PBR shaders.
- Fixed the implementations of splittb, ramptb, and ramp4 in GLSL, OSL, and MDL, correcting the inverted ordering of top and bottom values.
- Fixed the blackbody node to support temperatures down to 800K, extending physically accurate results to the Draper point.
- Fixed the UsdTransform2D node, reversing the direction of transformations to align with the USD reference.
- Fixed sheen roughness, the handling of thin_walled and transmission_depth, and the translation of semi-transmissive materials in the translation graph from Standard Surface to glTF PBR.
- Fixed direct lighting in MSL rendering, addressing a uniform name mismatch that caused missing lighting on MacOS.
- Fixed color output in Metal rendering, correcting a color space conversion mismatch for the viewer background and the sRGB encoding exponent for general rendering.
- Fixed inverse world matrix transposes and an uninitialized MetalState member in Metal rendering.
- Fixed environment light texture handling in Metal rendering, unifying the two prior IBL binding paths and honoring the indirect lighting flag.
- Fixed a crash on selecting functional graph outputs in the MaterialX Graph Editor.
- Fixed document load initialization in the MaterialX Graph Editor, addressing crashes from stale references and link deletion robustness.
- Fixed handling of top-level inputs in the MaterialX Graph Editor, addressing interface name assignment on connection and renaming.
- Fixed a missing OCIO include in the MaterialX Graph Editor, addressing a build error when OCIO support is enabled.
- Fixed alpha blending in
hextiledimage_color4across GLSL, OSL, and MDL implementations. - Fixed alpha handling in
rgbtohsvandhsvtorgbfor GLSL and OSL, forwarding the input alpha channel instead of clearing it to one. - Fixed MDL shader generation for empty materials, boolean and integer conversion alignment with GLSL and OSL, and missing origin annotations for unit transform inputs and node graph sockets.
- Fixed the MDL implementation of dielectric_bsdf, removing a stray specular lobe when
specular_weightis zero andspecular_ioris one. - Fixed CMake build rules for resource installation, the export of MATERIALX_INSTALL_STDLIB_PATH in the CMake config, and the propagation of dependencies for OpenGL and X11 in downstream projects.
- Fixed shadow and environment edge cases in GLSL generation, addressing spot light projection, shadow occlusion resetting, and zero-sample environment radiance.
- Fixed alignment of two-sided refraction and texture magnification filtering between GLSL and MSL rendering.
- Fixed interface name validation, resolving interface names against parent graph elements for correct validation of value elements, and createValidChildName for documents with referenced data libraries.
- Fixed OSL shader generation for textureresource and LamaSurface nodes.
- Fixed default inputs in the vector definitions of the atan2 nodes.
- Fixed edge cases in the version upgrade process for swizzle nodes.
- Fixed Python interfaces for image loaders.
- Fixed a crash on exit in debug Python builds.
Removed
- Removed the NodeGraph dependency in shader translation, using NodeDef outputs directly for improved flexibility.
- Removed global constructors for Traversal constants, improving compatibility with MacOS environments.
- Removed unused static members from the ShaderNode class.
Thanks
Thanks to @aabhinavvvvvvv, @ashwinbhat, @bhouston, @boberfly, @bowald, @chellmuth, @chinmaychahar, @codesavory, @craouette, @crystalqdm, @dbsmythe, @dougbtinoco, @exavi, @foundry-markf, @HardCoreCodin, @hybridherbst, @jakethorn, @JGamache-autodesk, @JHUbisoft, @jmertic, @JoshuaSenouf, @jreichel-nvidia, @jstone-lucasfilm, @krohmerNV, @kwokcb, @ld-kerley, @msuzuki-nvidia, @pablode, @paytonGilbertson, @pixelsandpointers, @ppenenko, @qbisi, @seang-ilm, @shill-lucasfilm, @tdavidovicNV, @warrenm, @weta-sfinnie, @wingfiring, @xipaja, @zeel2104, and @zychen8 for their contributions to this release!