Releases: joaovbs96/MaterialXPlayground
Release list
v2026.9.4
v2026.9.3
Scene Viewer (experimental)
A new tool for loading OpenUSD stages whose materials are MaterialX, rendered through the MaterialX shader generator in the browser.
- Open a stage by dropping a folder or zip, with a choice of root layer and per phase load progress.
- MaterialX materials bound to prims, including UDIM textures and EXR, HDR, TIFF and KTX2 images.
- USD
overopinions on referenced MaterialX nodes are applied to the material before generation. - UsdLux distant, sphere, disk, rect and cylinder lights, with shadows.
- Authored cameras: open on or switch to any camera in the stage.
- Meshes with a subdivision scheme are subdivided at a selectable level, within a triangle budget.
- PointInstancer geometry.
- Transparency with refraction through thick glass and colored light transmission.
- Ambient occlusion, sky visibility, HDR presentation with highlight glow, display transforms (Neutral, ACES, sRGB) and camera exposure in EV.
- Double click an object to open its material in a floating preview and node graph panel.
- Screenshots and GIF recording.
- An Experimental badge next to the title lists the current known issues.
Rendering, in every tool
- KTX2 compressed textures, plus a script that converts a folder of textures to KTX2 siblings.
- Specular environment lighting now uses a GGX prefiltered environment, as the MaterialX viewer does, so smooth surfaces no longer sparkle under high contrast HDRIs.
- Shadows from directional, point and spot lights authored in the document.
- Materials with many textures no longer fail to compile on shader ball previews.
- UDIM materials show their first tile on shader ball previews.
Node Graph Editor
- Saving keeps the loaded file's formatting: node order, XML comments (including those before and after the
materialxroot), indentation and wrapped attributes are preserved, and only edited elements change. - Load and save round trips are stable, byte for byte.
- The attribution comment in exported documents is now optional, with a remembered checkbox in the Export dialog.
Embeds
- Embeds load in Safari again.
VS Code extension
- Fixed the Node Graph Editor failing to open with "Failed to load script: embed/mtlx-viewer.js".
- The packaged extension is now tested on every change in a simulated VS Code webview.
Site
- The roadmap is updated with everything that shipped.
v2026.9.2
- Render gallery tiles once per release as an artifact, capture them by page clip and fill in the desktop package metadata
- Let a manual release run pick the gallery, package and desktop jobs and fall back to the live site's tiles without the gallery job
- Give the gallery capture a screenshot budget that covers the heaviest shader compiles on a GPU-less runner
Update: This version of the .vsix package is broken and has been removed, please download v2026.9.3 instead.
v2026.9.1
Desktop app (new, experimental)
- MaterialX Playground now also ships as a desktop app for Windows, macOS and Linux, built from every release.
- Native File menu with Open, Save, Save As and recent files; documents you open from the file system stay linked to their file and reload when it changes on disk.
- Drop a .mtlx file onto the window to open it. Windows users also get "Open with MaterialX Playground" and a taskbar jump list with recent documents.
- Works fully offline: the standard MaterialX libraries, the shader ball and all default assets ship with the app.
- Themed title bar and menus that follow macOS and Windows conventions, remembered window size and position, an About dialog, and a settings dialog for desktop preferences.
- Crash recovery dialogs and a software-rendering safe mode for machines without a working GPU.
Material gallery (new)
- A Gallery page that browses the MaterialX example materials and our showcase materials with search, family and tag filters and pagination.
- Click a card for a live preview with a graph view, a permalink and a link to the source repository; textured materials download as a zip with their textures.
- A unified preset picker in the Viewer, Compare and Graph Editor, backed by the same gallery.
Graph editor
- Node definitions: node definitions and their implementation graphs now show up as cards, can be opened and previewed, and can be edited in a new Definition panel (name, inputs, outputs, defaults, UI metadata, enums). Create a definition from scratch or convert an existing nodegraph into one.
- Explore library nodes: right-click or double-click a node such as standard_surface to view its implementation graph read-only, with the values of the node you came from.
- A node list sidebar on the left with search, type filter and sorting, grouped into inputs, nodes and outputs inside a nodegraph.
- Reorder inputs and outputs with arrows or by dragging, in definitions and on nodegraph interfaces.
- Previews for BSDF, EDF and VDF nodes inside nodegraphs now work, and large closure networks preview many times faster.
- Experimental "Compound compile" setting in the preview settings: compiles big root-level material networks several times faster, with parameter edits staying live.
- Autosave with crash recovery and a session browser that shows a graph and render preview of each saved session.
- Interface inputs can carry UI metadata (name, folder, ranges, advanced) and colorspace, kept through grouping and ungrouping.
- Screenshot files are named after the rendered geometry; various fixes to typing in numeric fields, node signature tables and dialog stacking.
Rendering and files
- A View Transform control (sRGB default, matching MaterialXView) beside exposure in the Viewer, Compare and previews.
- Draco-compressed and KTX2-textured glTF models load correctly.
- TIFF textures are decoded, and zip exports can convert every texture to PNG, JPEG or EXR.
- Force Transparency mode has been improved: single-sided refraction tint and Fresnel falloff on glass.
CI
- Gate pushes, pull requests and releases on npm audit for both lockfiles.
v2026.8.11
Custom geometry, animated materials, a studio backdrop, and a new introduction page.
New: Custom Geometry
- Preview materials on your own models: import
.obj,.glb, or.gltfwith sibling.binbuffers (multi-select them together). Texture references are ignored by design; Draco and KTX2 assets are rejected with instructive errors. - Import once, use everywhere: the model is shared by the Viewer, Compare, Node Specs and Graph Editor for the rest of the session.
- The geometry selection itself is now global: pick a geometry in any tool and every tool follows, with the choice persisting across reloads. The docs and graph "Auto (by node type)" modes stay per-tool.
- New Custom Model tile in the Viewer and Compare scene cards, and an integrated picker inside the geometry dropdowns (filename, replace, clear).
- Embeds take a
geometryUrlparameter (andgeometryurlelement attribute), fetched by the iframe under the same rules as the document; a.gltfresolves its.binrelative to the model URL.
New: Animated Materials
- MaterialX
timeandframenodes now animate, driven by a shared engine clock with MaterialXView semantics, in the viewer, compare, graph and docs previews, embeds and the home hero. - New curated "Animated noise" example in every tool's preset list and the home hero rotation.
- Compare keeps its GPU diff and statistics live while either pane is animated, rendering both panes from the same clock tick.
New: What is MaterialX? page
- An introduction page at
#!what-is-materialx: what the standard is, why it exists, a history timeline, with library counts derived from the build itself. - Includes an interactive read-only node graph preview with drill-in navigation, a type legend and an optional render panel.
- The home page leads its Learn cards with the new page and cycles a featured band with an auto-advance countdown.
Material Viewer & Compare
- Procedural studio backdrop with a soft contact shadow behind every free-floating geometry, with light direction derived from the environment and a Studio (Dark) variant; the old background toggle became a four-way backdrop picker across all viewers.
- Viewer and Compare chrome converged: the viewer gains Scene and Environment sidebar cards with geometry tiles, environment import and EV exposure controls.
- New Compare example pair: the carpaint Standard Surface material next to the same values run through the official OpenPBR translation graph, loadable in one click; each compare slot also gets its own curated preset picker.
- Compare statistics are now an always-visible panel with a help popover.
- The
imagenode honors its default color instead of showing a UV checker, matching MaterialXView.
Node Specs
- Restyled onto the site's new design language: soft cards, legend-colored port types, and parameter editing on par with the node graph.
- Signature dropdowns are readable for heavily overloaded nodes: sorted by output type then input types, without the arbitrary numbering, in the same order as the Graph Editor's signature picker.
Node Graph Editor
- File menu split into Open and Import, with the preview retargeting on document switches.
- Editor polish:
uinamesupport, a leave-nodegraph pill, shared pickers and a single geometry control in the preview strip.
Embedding & Builder
- New embed parameters:
backdrop(withbackgroundkept as an alias),forcetransparencyandgeometryUrl, all documented in EMBEDDING.md. - The builder's Scene card gains a custom model URL field; geometry tiles clear it in one click, and every URL field has a clear button.
UI & Design Language
- Shared pill tokens, type palette and file-picker fields extracted into the shared modules and applied across pages.
- Long geometry tile labels break onto two lines instead of wrapping arbitrarily.
Reliability
- Views recover from browser WebGL context loss by rebuilding when the context is restored, and hidden tools defer their rebuilds until revisited, reducing context pressure in long sessions.
- Release version and extension download link are baked into deploys.
- Assorted fixes: a phantom horizontal scrollbar on the home hero, the studio black-material state, evicted home hero embeds reviving on return, and graph preview id collisions.
v2026.8.10
A large interface pass across every tool, as a follow up from #21, #20 and #19.
Embed Builder
- Starter templates
- A live preview that stays put while you scroll the settings
- Shareable config links
- Exposure in EV stops
- A Reload preview button
- Clearer warnings when conflicting settings are chosen
Graph Editor
- A proper menu bar with File and Edit menus
- A docked resizable side panel
- Right-click context menus on nodes, selections and the canvas
- Rename a node in place on the card by right-clicking or double-clicking its name
- The preview now offers every geometry, orbits, and has reset camera and fullscreen on the render
Viewer & Compare
- Docked sidebars
- Settings grouped into cards
- A tidier viewport HUD
- MaterialX version picker in the viewer
Node Specs
- Documentation links now work for translation nodes
- Node Doc popups in the Node Graph editor now open on the same signature and version you were looking at
General UI Changes
- (Nearly) every dropdown on the site is now the same component, with keyboard navigation and proper placement, support for an icon for the dropdown itself as well as per-entry
Fixes
- The home page preview no longer flashes white when you navigate
- The header now shows the current release instead of a stale one
- The Embed Builder no longer flickers at some window sizes
- Exported
.mtlxfiles carry a Playground attribution - Send to Viewer keeps the geometry you were using.
v2026.8.9
The VS Code extension gets its own page on the site.
VS Code extension page
- New page at
#!vscode, linked from the home card and the Integrate menu. - One-click download of the latest
.vsix, with install, update and uninstall steps, features, settings and known limitations. A Marketplace button is there too, grayed out until we are listed.
Extension docs
- The extension README now matches the current behavior: graph edits sync into the
.mtlxbuffer as you make them (Ctrl+S saves the file) and Ctrl+Z / Ctrl+Y use VS Code's own document undo.
v2026.8.8
A redesigned landing page and a header that has room to grow.
Home page
- New split hero with a live 3D preview: a random material from the curated presets renders in a transparent embed, auto-rotating, with hover pills to open that same material in the Material Viewer or the Node Graph Editor.
- Featured band under the hero to spotlight a new or updated tool (currently the Embed Builder).
- Tools are grouped into Tools, Learn and Integrate sections with a filter, one-sentence descriptions, and placeholder cards for what is coming next (Tutorials, and the VS Code extension with a link to its early builds on the releases page).
- Subtle grid background behind the hero that fades into the page as you scroll.
Header
- Shorter tabs (
Node Specs,Viewer,Compare,Graph Editor) plusLearnandIntegratemenus; the Home tab is gone (the logo links home). Menus open on hover or click and are fully keyboard accessible. - The right-side pills now shrink in two stages before the header collapses to the hamburger, so the full navigation stays visible on more laptop widths.
Embed
- New
wheel=noneoption for<materialx-viewer>and the iframe embed: disables zooming (wheel, Ctrl+wheel and pinch) while keeping drag-to-orbit; a plain wheel still scrolls the host page. - Fixed a browser focus ring that showed as a black border around transparent embeds after clicking them.
v2026.8.7
Follow-ups to the embeddable viewer released in v2026.8.6.
Embedding
- Configuration advisories are quieter. Switching an embed to the default
shaderball-scenegeometry (or loading withcontrols=all) no longer reports "no effect" errors for the rotate and background controls; they are simply hidden while inapplicable and return when the geometry changes.mtlx-erroris now reserved for things that are actually wrong. - No more GitHub dependency at boot. The default OpenPBR material now ships with the site (
materials/open_pbr_default.mtlx) and is served locally, with the GitHub fetch kept only as a fallback. This removes the "Couldn't reach GitHub for the default material" failure for viewers and embeds opened without a document. - README gained an "Embedding (experimental)" overview pointing at the full reference in
docs/EMBEDDING.md.
Testing and CI
- The embed test suite is split into two tiers: a one-boot smoke test that runs in CI (about a minute end to end, inside Playwright's container image so no browser provisioning happens on the runner), and the full behavioural suite (
npm run test:embed) for local runs and on-demandworkflow_dispatch. - CI runs only when embed-relevant files change, once per PR.
- The full suite's protocol checks share a single booted viewer.
v2026.8.6
Embed a single MaterialX material in any web page
This feature should be considered experimental and may have some rough edges. Feedback is welcome as always!
Currently the embed is only available for the Material Viewer, but implementation for other tools is being considered.
embed/viewer.html: minimal chromeless page, configured by query params:src(document plus its same-origin textures/includes),geometry,material,camera,envmap,env,exposure,controls,wheel,version,background,
transparent, theming,origin. Bad values fall back safely and report throughmtlx-error.<materialx-viewer>: one script tag; attributes mirror the params and live-update or reload as appropriate. Lazy activation with a page-wide cap on how many viewers run at once (the least recently seen one is released first),poster/eager, and methods: promise-returningload()(hand the embed a document as text, for files it can't fetch itself),snapshot(),getCamera()/setCamera().- Sane embed defaults: Ctrl/Cmd+wheel zoom (plain scroll reaches the host page), reset returns to the host-provided camera/env values, reduced motion pauses autorotate, snippets ship
border:0sotransparenttruly works. - Embed Builder: live-preview configurator that emits both snippet types, with presets, camera capture, and an in-page rendered copy of
docs/EMBEDDING.md, the full reference. - Build/CI: precompiled embed bundles and generated help HTML with staleness gates; 16 deterministic Playwright tests (
npm run test:embed, ~1.6 min) plus a workflow running them on push/PR; release zip ships the embed, the vsix excludes it.
Main app unaffected: every new viewer prop is optional and defaults to prior behavior. Test with npx serve . (Node 22.7+ for npm run build).