This page provides information on MaterialX (mtlx) support.
Overview
MaterialX is an open-source standard for representing shading networks. MaterialX shading networks can be used across different applications and renderers.
See the MaterialX and V-Ray blog post for more information.
Usage
V-Ray's implementation of MaterialX allows you to render MaterialX nodes encoded in USD with VRayScene-USD. The implementation is a mix of direct translation to V-Ray through a mapping file and custom code. Custom V-Ray plugins share the code and make graphs more efficient. The MaterialX graphs are rendered within Hydra.
Utilize the MaterialX nodes within the standard mtlx workflow in Solaris.
Workflow
Create MaterialX
Mtlx materials are created just like any other material in Solaris – inside a Material Library LOP.
Once the LOP is added, dive inside it and create a USD MaterialX Builder node. Inside the builder node, V-Ray supports most of the mtlx nodes (see the MaterialX Support table below for a full list of the supported nodes).
Then you just need to add an Assign Material LOP and specify a geometry for the mtlx materials. For more information on how to do it, see the Working with Solaris Materials page or watch the video in the Overview section.
Import MaterialX
To use premade mtlx files, use a Sublayer LOP to import them.
In the Sublayer LOP parameters, use the Add button to add as many sublayer files as there are mtlx files you want to import.
Then in the File paths of these sublayers, add the mtlx files.
The steps above only help you import the mtlx files in the scene. To assign the materials to geometry, add an Assign Material LOP and specify a geometry (path) for each mtlx material.
Reference MaterialX
Instead of adding sublayers of mtlx materials, you can reference them with a Reference LOP.
Set the Reference file to the file path of the mtlx file on disk, and select the specific material to load in through the Reference primitive submenu.
Then use an Assign Material LOP to assign the referenced mtlx material to a USD prim.
For more information about alternative workflows for referencing and creating mtlx materials, as well as information about the different types of mtlx nodes, refer to the Solaris documentation.
One of the many ways for referencing shaders in Solaris is used here.
Supported Nodes
Category | MtlX Shader Name | Node Name | USD id | CPU Support | GPU Support |
---|---|---|---|---|---|
Adjustment | MtlX Adjust as HSV | mtlxhsvadjust | ND_hsvadjust | ||
MtlX Color Correct | mtlxcolorcorrect | ND_colorcorrect | |||
MtlX Contrast | mtlxcontrast | ND_contrast | |||
MtlX Curveadjust | mtlxcurveadjust | ND_curveadjust | |||
MtlX HSV to RGB | mtlxhsvtorgb | ND_hsvtorgb | |||
MtlX Luminance | mtlxluminance | ND_luminance | |||
MtlX Range | mtlxrange | ND_range | |||
MtlX Remap | mtlxremap | ND_remap | |||
MtlX RGB to HSV | mtlxrgbtohsv | ND_rgbtohsv | |||
MtlX Saturate | mtlxsaturate | ND_saturate | |||
MtlX Smoothstep | mtlxsmoothstep | ND_smoothstep | – | ||
Application | MtlX Frame | mtlxframe | ND_frame_float | ||
MtlX Time | mtlxtime | ND_time_float | |||
Channel | MtlX Combine2 | mtlxcombine2 | ND_combine2 | ||
MtlX Combine3 | mtlxcombine3 | ND_combine3 | |||
MtlX Combine4 | mtlxcombine4 | ND_combine4 | |||
MtlX Convert | mtlxconvert | ND_convert | |||
MtlX Extract | mtlxextract | ND_extract | |||
MtlX Separate2 | mtlxseparate2 | ND_separate2 | |||
MtlX Separate Color 3 | mtlxseparate3c | ND_separate3 | |||
MtlX Separate Vector 3 | mtlxseparate3v | ND_separate3 | |||
MtlX Separate Color 4 | mtlxseparate4c | ND_separate4 | |||
MtlX Separate Vector 4 | mtlxseparate4v | ND_separate4 | |||
MtlX Swizzle | mtlxswizzle | ND_swizzle | |||
Compositing | MtlX Burn | mtlxburn | ND_burn | ||
MtlX Difference | mtlxdifference | ND_difference | |||
MtlX Disjoint Over | mtlxdisjointover | ND_disjointover | |||
MtlX Dodge | mtlxdodge | ND_dodge | |||
MtlX In | mtlxin | ND_in | |||
MtlX Inside | mtlxinside | ND_inside | |||
MtlX Mask | mtlxmask | ND_mask | |||
MtlX Matte | mtlxmatte | ND_matte | |||
MtlX Minus | mtlxminus | ND_minus | |||
MtlX Mix | mtlxmix | ND_mix | |||
MtlX Out | mtlxout | ND_out | |||
MtlX Outside | mtlxoutside | ND_outside | |||
MtlX Over | mtlxover | ND_over | |||
MtlX Overlay | mtlxoverlay | ND_overlay | |||
MtlX Plus | mtlxplus | ND_plus | |||
MtlX Premult | mtlxpremult | ND_premult | |||
MtlX Screen | mtlxscreen | ND_screen | |||
MtlX Un-Premult | mtlxunpremult | ND_unpremult | |||
Conditional | MtlX If Equal | mtlxifequal | ND_ifequal | ||
MtlX If Greater | mtlxifgreater | ND_ifgreater | |||
MtlX If Greater or Equal | mtlxifgreatereq | ND_ifgreatereq | |||
MtlX Switch | mtlxswitch | ND_switch | |||
Convolution2D | MtlX Blur | mtlxblur | |||
MtlX Height to Normal | mtlxheighttonormal | ND_heighttonormal | |||
Geometric | MtlX Bitangent | mtlxbitangent | ND_bitangent | ||
MtlX Geometry Color | mtlxgeomcolor | ND_geomcolor | |||
MtlX Geometry Property Value | mtlxgeompropvalue | ND_geompropvalue | |||
MtlX Normal | mtlxnormal | ND_normal_vector3 | |||
MtlX Position | mtlxposition | ND_position_vector3 | |||
MtlX Tangent | mtlxtangent | ND_tangent_vector3 | |||
MtlX Texcoord | mtlxtexcoord | ND_texcoord_vector3 | |||
Global | MtlX Ambient Occlusion | mtlxambientocclusion | ND_ambientocclusion_float | ||
Houdini | MtlX Bias | hmtlxbias | ND_hmtlxbias_float | ||
MtlX Facing Ratio | hmtlxfacingratio | ND_hmtlxfacingratio_float | |||
MtlX Gain | hmtlxgain | ND_hmtlxgain_float | |||
MtlX Hcatmullrom | hmtlxhcatmullrom | ND_hcatmullrom | |||
MtlX Hinvlinear | hmtlxhinvlinear | ND_hinvlinear_float | |||
MtlX Huniformcubic | hmtlxhuniformcubic | ND_huniformcubic | |||
MtlX Huniformramp | hmtlxhuniformramp | ND_huniformramp | |||
Light | MtlX Directional Light | mtlxdirectional_light | |||
MtlX Point Light | mtlxpoint_light | ||||
MtlX Spot Light | mtlxspot_light | ||||
Material | MtlX Surface Material | mtlxsurfacematerial | |||
MtlX Volume Material | mtlxvolumematerial | ||||
Procedural | MtlX Color Cubic Ramp | hmtlxcubicrampc | |||
MtlX Color Ramp | hmtlxrampc | ||||
MtlX Constant | mtlxconstant | ND_constant | |||
MtlX Float Cubic Ramp | hmtlxcubicrampf | ||||
MtlX Float Ramp | hmtlxrampf | ||||
MtlX Random Float | mtlxrandomfloat | Partial | |||
Procedural2D | MtlX Cell Noise 2D | mtlxcellnoise2d | ND_cellnoise2d_float | ||
MtlX Checkerboard | mtlxcheckerboard | Partial | |||
MtlX Circle | mtlxcircle | Partial | |||
MtlX Circles2D | hmtlxcircles2d | ||||
MtlX Cloverleaf | mtlxcloverleaf | Partial | |||
MtlX Crosshatch | mtlxcrosshatch | ||||
MtlX Grid | mtlxgrid | Partial | |||
MtlX Hexagon | mtlxhexagon | Partial | |||
MtlX Line | mtlxline | Partial | |||
MtlX Noise2D | mtlxnoise2d | ND_noise2d | |||
MtlX Ramp4 | mtlxramp4 | ND_ramp4 | |||
MtlX Ramplr | mtlxramplr | ND_ramplr | |||
MtlX Ramptb | mtlxramptb | ND_ramptb | |||
MtlX Splitlr | mtlxsplitlr | ND_splitlr | |||
MtlX Splittb | mtlxsplittb | ND_splittb | |||
MtlX Tiled Circles | mtlxtiledcircles | Partial | |||
MtlX Tiled Cloverleafs | mtlxtiledcloverleafs | Partial | |||
MtlX Tiled Hexagons | mtlxtiledhexagons | Partial | |||
MtlX Unified Noise 2D | mtlxunifiednoise2d | Partial | |||
MtlX Worley Noise 2D | mtlxworleynoise2d | ND_worleynoise2d | |||
Procedural3D | MtlX Cell Noise 3D | mtlxcellnoise3d | ND_cellnoise3d_float | ||
MtlX Fractal3D | mtlxfractal3d | ND_fractal3d | Partial | ||
MtlX Noise3D | mtlxnoise3d | ND_noise3d | |||
MtlX Random Color | mtlxrandomcolor | ND_randomcolor | |||
MtlX Unified Noise 3D | mtlxunifiednoise3D | Partial | |||
MtlX Worley Noise 3D | mtlxworleynoise3d | ND_worleynoise3d | |||
Texture2D | MtlX Image | mtlximage | ND_image | Partial | |
MtlX Tiled Image | mtlxtiledimage | ND_tiledimage | Partial | ||
Texture3D | MtlX Triplanar Projection | mtlxtriplanarprojection | ND_triplanarprojection | ||
Math | MtlX Absval | mtlxabsval | ND_absval | ||
MtlX Add | mtlxadd | ND_add | |||
MtlX Array Append | mtlxarrayappend | ND_arrayappend | |||
MtlX Asin | mtlxasin | ND_asin_float | |||
MtlX Atan2 | mtlxatan2 | ND_atan2_float | |||
MtlX Ceil | mtlxceil | ND_ceil_float | |||
MtlX Clamp | mtlxclamp | ND_clamp | |||
MtlX Cos | mtlxcos | ND_cos | |||
MtlX Cross Product | mtlxcrossproduct | ND_crossproduct_vector3 | |||
MtlX Distance | mtlxdistance | Partial | |||
MtlX Divide | mtlxdivide | ND_divide | |||
MtlX Dot Product | mtlxdotproduct | ND_dotproduct_vector3 | |||
MtlX Exp | mtlxexp | ND_exp | |||
MtlX Floor | mtlxfloor | ND_floor | |||
MtlX Invert | mtlxinvert | ND_invert | |||
MtlX Ln | mtlxln | ND_ln | |||
MtlX Magnitude | mtlxmagnitude | ND_magnitude | |||
MtlX Max | mtlxmax | ND_max | |||
MtlX Min | mtlxmin | ND_min | |||
MtlX Modulo | mtlxmodulo | ND_modulo | |||
MtlX Multiply | mtlxmultiply | ND_multiply | |||
MtlX Normalize | mtlxnormalize | ND_normalize | |||
MtlX Power | mtlxpower | ND_power | |||
MtlX Sign | mtlxsign | ND_sign | |||
MtlX Sin | mtlxsin | ND_sin | |||
MtlX Sqrt | mtlxsqrt | ND_sqrt | |||
MtlX Subtract | mtlxsubtract | ND_subtract | |||
MtlX Tan | mtlxtan | ND_tan | |||
MtlX Transform Matrix | mtlxtransformmatrix | ND_transformmatrix | |||
MtlX Transform Normal | mtlxtransformnormal | ND_transformnormal_vector3 | |||
MtlX Transform Point | mtlxtransformpoint | ND_transformpoint_vector3 | |||
MtlX Transform Vector | mtlxtransformvector | ND_transformvector_vector3 | |||
Pbr | MtlX Standard Surface | mtlxstandard_surface | |||
Shader | MtlX Convert | mtlxconvert | |||
MtlX Surface Unlit | mtlxsurface_unlit | Partial |
The following functions are supported in Solaris:
- sin
- cos
- tan
- sqrt
- log
- floor
- exp
- ceil
- asin
- acos
Reference
- MaterialX website: https://materialx.org/
- Doug Smythe (Industrial Light & Magic) and Jonathan Stone (Lucasfilm Advanced Development Group), MaterialX: An Open Standard for Network-Based CG Object Looks (Version 1.38), March 1, 2021: https://materialx.org/assets/MaterialX.v1.38.Spec.pdf
- Niklas Harrysson (Autodesk), Doug Smythe (Industrial Light & Magic), Jonathan Stone (Lucasfilm Advanced Development Group), MaterialX Physically Based Shading Nodes (Version 1.38), February 2, 2021: https://materialx.org/assets/MaterialX.v1.38.PBRSpec.pdf
- Doug Smythe (Industrial Light & Magic), Jonathan Stone (Lucasfilm Advanced Development Group), MaterialX: Supplemental Notes (Version 1.38) , February 2, 2021: https://materialx.org/assets/MaterialX.v1.38.Supplement.pdf
- Solaris documentation: https://www.sidefx.com/docs/houdini/solaris/materialx.html