Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

Overview:

MaterialX is an open standard for representing rich material and look-development content in computer graphics, enabling its platform-independent description and exchange across applications and renderers. MaterialX content can be encoded in other containers such as Usd, gltf and other formats. Similar to how a file can be transported in a zip package and ensure it’s integrity, it is essential that when MaterialX data flows in and out of these containers it's integrity is maintained.

The current MaterialX import in Hydra is handled by the UsdMtlx plugin.  MaterialX document can be imported into Usd/Hydra by:

(see MaterialX in Hydra slides  https://www.materialx.org/assets/ASWF_OSD2021_MaterialX_slides_final.pdf)

There is no support for exporting Shader networks to MaterialX.

1. MaterialX as UsdShade
(transport, composition, file format plugin, interop, shader definition)

The import workflow of MaterialX to UsdShade is done by the UsdMtlx plugin. The UsdMtlx plugin translates MaterialX data to UsdShade. 

The UsdMtlx documentation outlines many of the unsupported features. These limitations cause data loss and prevent use of MaterialX with Usd/Hydra for Production use. Adding support for some of these features will require more in-depth discussion with the Usd Team and more engagement from the community. However, some low hanging items can be addressed as Pull requests to Usd by the community. 

Goal: Implement missing features in UsdMtlx Plugin, such that MaterialX content is maintained when imported into Usd.

These includes improvements to:

  • Shader Definition:  Treat MaterialX nodedef attributes (units, color space, fallbacks value, limits) as Shader data attributes instead of metadata. 
  • Shader Discovery:  Standardize on nodedef/nodegraph name mapping for better discovery of node variants. Improve versioning and nodedef namespace.
  • User Shader libraries:  Simplify transport of Custom nodedef (for modeling and viewport workflow)
  • Interop Integrity: For lossless synchronization, ensure validation mechanism / tests for Mtlx → UsdShade → Mtlx

For HdStorm, a MaterialX document is reconstructed from UsdShade Network to create glslfx via CodeGen. The missing features in the UsdMtlx plugin makes HdStorm hard to use and extend for other Viewport work-flows. 

2. MaterialX in Hydra
(visualization, viewport, runtime, rendering)

To leverage MaterialX CodeGen (or ShaderGen) functionality in Hydra a delegate is required to reconstruct a MaterialX document from UsdShade or natively handle UsdShade graphs. 

Therefore an application is required to maintain MaterialX for rich material authoring workflows and translate to UsdShade networks for rich runtime visualization workflows.Often, an application might need to revert back to MaterialX for rich transport of material assets.
This dual mode operation requires unnecessary Shader Code regen such as during:

  • MaterialX topology updates require complete UsdShade regen.
  • MaterialX input updates require complete UsdShade regen.


We want to continue to use USDShade as the native runtime in Hydra but we want MaterialX as the ground truth and not have static snapshots in Usd form as they are duplicates that can get out of sync.

Goal: Improve MaterialX - UsdShade updates (both topology and inputs)

This includes improving performance issues due to shader recompilation, handling updates to materials, material topology changes. We may also need to introduce Hydra and/or MaterialX APIs to report material input and network updates.

Miscellaneous items (for further discussion)

  • For multi-backend support for Vulkan, MDL, Metal, etc applications need to maintain multiple Shader Gen paths that can easily get out of sync and are hard to maintain.
  • MaterialX nodes as ground truth definitions of UsdPreviewSurface. 
  • UsdLux v.s MaterialX Light nodes
  • Customize shaders for selection, highlighting. 
  • For Hardware renderers customize shader stages, render state management 

3. Knowledge Sharing

Goal: To facilitate sharing of knowledge / examples around consumption and rendering use cases.
This includes

  • ensuring that the documentation is up-to-date with a given version of USD and MaterialX.
  • a robust set of examples of types / configurations of shaders / materials, (in USD format, in MTLX format).
  • examples of custom shader generation integration for different renderers.   


Areas for Review

 Properties List
PropertyDescriptionUSD levelUSD/MTLX levelMTLX levelStatusProposal(s)
namespaceHelpful to qualify definitions with a given scope to avoid name clashes.
e.g. there may be a Adobe vs ILM namespace.



Issue 1614 logged
  • Encode namespace as part of definition identifier (no consensus) (PR 1631)
colorspaceColor management tagging for inputs as well as color management system specification.Y

  • Agreement to support as formal property. Needs scoping and definition.
  • Issue 1532 logged for MTLX export. Internal issue: USD-6703 (old - pre-agreement)
  • "Follow what is going on with MaterialX". (vague)
ui value propertiesHints for UI. e.g. ui min, max, step etc.Y

Separate proposal for this.
unit / dimension supportSupport for a real world unit or dimension for an given shader input. The type of the unit may be dynamic / data driven.


Issue 1632 logged. Internal issue: USD-6928.
tokensImport and resolving of token names used for geometric and file identifiers. Can include consistency of token delimiters
Y


fileprefx



Issue 974 logged. Admin: not closed
  • Resolved in PR 977.
versionDefinition versioning


tbd







 Definition Handling
PropertyDescriptionUSD levelUSD/MTLX levelMTLX levelStatusProposal(s)
Support nodes with multiple outputs



issue 1581 logged. Internal issue: USD-6820







definition information associationImport does not capture the correct association between a definition and a nodegraph sometimes.


Issue 1629 logged
  • Specific code fix proposed for conversion to MaterialX
definition variationsDefinitions may be specified in a variety of different ways. Not all appear to be consumable properly. Some deal with definition discovery.


issue 1636 logged
  • Refactor import discovery logic. (PR 1641)
definition search pathRelated to definition discovery (definition not found in path) 


Issue 1586 logged. Internal issue USD-6941
  • consider USD search path env variable on read for mtlx (partial, no concensus) (PR 1628)
load / reload Robustness / repeatability of loading documents


  • Issue 1504 logged. Internal issue: USD-6670 (data loss)
  • Issue 1502 logged. Internal issue: USD-6669 (node missing)









Information Sharing

Issues Filtering

The "Areas for Review" is currently hand-culled from the current list of all issues with the keyword MaterialX. Not all are applicable. 
Q: Iis there a better way to manage this such as by adding labels to allow for quick filtering of relevant issues. 

https://github.com/PixarAnimationStudios/USD/issues?q=is%3Aissue+is%3Aopen+Materialx


Documentation for Unsupported Features

Unsupported features documentation. There is already the intent to update this. (Current notes appear to be valid for MaterialX version 1.37)
https://graphics.pixar.com/usd/docs/api/usd_mtlx_page_front.html#usdMtlx_unsupported


Content Examples 

  • WIP : Leaving a call out for USD example contributions. 

Renderer integration

- WIP: To decide what to add here. Leaving a call out for USD example contributions. 

  • want to include role of shaders and backends
  • help to aid those that want to figure out how their renderer fits in
  • custom shader generator integration examples would be useful here. 







  • No labels