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.


<iframe width="560" height="315" src="https://www.youtube.com/embed/F-ssICG_j6M" title="Seamless collaboration and asset transfers with MaterialX and enhanced USD support" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


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


Supported Nodes



Category

MtlX Shader Name

Node Name

USD id

Support

Adjustment

MtlX Adjust as HSV

mtlxhsvadjust

ND_hsvadjust

(tick)

MtlX Color Correct

mtlxcolorcorrect

ND_colorcorrect

(tick)

MtlX Contrast

mtlxcontrast

ND_contrast

(tick)

MtlX Curveadjust

mtlxcurveadjust

ND_curveadjust

(error)

MtlX HSV to RGB

mtlxhsvtorgb

ND_hsvtorgb

(tick)

MtlX Luminance

mtlxluminance

ND_luminance

(tick)

MtlX Range

mtlxrange

ND_range

(tick)

MtlX Remap

mtlxremap

ND_remap

(tick)

MtlX RGB to HSV

mtlxrgbtohsv

ND_rgbtohsv

(tick)

MtlX Saturate

mtlxsaturate

ND_saturate

(tick)

MtlX Smoothstep

mtlxsmoothstep

ND_smoothstep

(tick)


Application

MtlX Frame

mtlxframe

ND_frame_float

(tick)

MtlX Time

mtlxtime

ND_time_float

(tick)


Channel

MtlX Combine2

mtlxcombine2

ND_combine2

(tick)

MtlX Combine3

mtlxcombine3

ND_combine3

(tick)

MtlX Combine4

mtlxcombine4

ND_combine4

(tick)

MtlX Convert

mtlxconvert

ND_convert

(tick)

MtlX Extract

mtlxextract

ND_extract

(tick)

MtlX Separate2

mtlxseparate2

ND_separate2

(tick)

MtlX Separate Color 3

mtlxseparate3c

ND_separate3

(tick)

MtlX Separate Vector 3

mtlxseparate3v

ND_separate3

(tick)

MtlX Separate Color 4

mtlxseparate4c

ND_separate4

(tick)

MtlX Separate Vector 4

mtlxseparate4v

ND_separate4

(tick)

MtlX Swizzle

mtlxswizzle

ND_swizzle

(tick)


Compositing

MtlX Burn

mtlxburn

ND_burn

(tick)

MtlX Difference

mtlxdifference

ND_difference

(tick)

MtlX Disjoint Over

mtlxdisjointover

ND_disjointover

(tick)

MtlX Dodge

mtlxdodge

ND_dodge

(tick)

MtlX In

mtlxin

ND_in

(tick)

MtlX Inside

mtlxinside

ND_inside

(tick)

MtlX Mask

mtlxmask

ND_mask

(tick)

MtlX Matte

mtlxmatte

ND_matte

(tick)

MtlX Minus

mtlxminus

ND_minus

(tick)

MtlX Mix

mtlxmix

ND_mix

(tick)

MtlX Out

mtlxout

ND_out

(tick)

MtlX Outside

mtlxoutside

ND_outside

(tick)

MtlX Over

mtlxover

ND_over

(tick)

MtlX Overlay

mtlxoverlay

ND_overlay

(tick)

MtlX Plus

mtlxplus

ND_plus

(tick)

MtlX Premult

mtlxpremult

ND_premult

(error)

MtlX Screen

mtlxscreen

ND_screen

(tick)

MtlX Un-Premult

mtlxunpremult

ND_unpremult

(tick)


Conditional

MtlX If Equal

mtlxifequal

ND_ifequal

(tick)

MtlX If Greater

mtlxifgreater

ND_ifgreater

(tick)

MtlX If Greater or Equal

mtlxifgreatereq

ND_ifgreatereq

(tick)

MtlX Switch

mtlxswitch

ND_switch

(tick)


Convolution2D

MtlX Blur

mtlxblur


(tick)

MtlX Height to Normal

mtlxheighttonormal

ND_heighttonormal

(tick)


Geometric

MtlX Bitangent

mtlxbitangent

ND_bitangent

(error)

MtlX Geometry Color

mtlxgeomcolor

ND_geomcolor

(tick)

MtlX Geometry Property Value

mtlxgeompropvalue

ND_geompropvalue

(tick)

MtlX Normal

mtlxnormal

ND_normal_vector3

(tick)

MtlX Position

mtlxposition

ND_position_vector3

(tick)

MtlX Tangent

mtlxtangent

ND_tangent_vector3

(tick)

MtlX Texcoord

mtlxtexcoord

ND_texcoord_vector3

(tick)


Global

MtlX Ambient Occlusion

mtlxambientocclusion

ND_ambientocclusion_float

(error)


Houdini

MtlX Bias

hmtlxbias

ND_hmtlxbias_float

(error)

MtlX Facing Ratio

hmtlxfacingratio

ND_hmtlxfacingratio_float

(error)

MtlX Gain

hmtlxgain

ND_hmtlxgain_float

(error)

MtlX Hcatmullrom

hmtlxhcatmullrom

ND_hcatmullrom

(error)

MtlX Hinvlinear

hmtlxhinvlinear

ND_hinvlinear_float

(tick)

MtlX Huniformcubic

hmtlxhuniformcubic

ND_huniformcubic

(tick)

MtlX Huniformramp

hmtlxhuniformramp

ND_huniformramp

(tick)


Light

MtlX Directional Light

mtlxdirectional_light


(error)

MtlX Point Light

mtlxpoint_light


(error)

MtlX Spot Light

mtlxspot_light


(error)


Material

MtlX Surface Material

mtlxsurfacematerial


(error)

MtlX Volume Material

mtlxvolumematerial


(error)


Procedural

MtlX Color Cubic Ramp

hmtlxcubicrampc


(error)

MtlX Color Ramp

hmtlxrampc


(error)

MtlX Constant

mtlxconstant

ND_constant

(tick)

MtlX Float Cubic Ramp

hmtlxcubicrampf


(error)

MtlX Float Ramp

hmtlxrampf


(error)


Procedural2D

MtlX Cell Noise 2D

mtlxcellnoise2d

ND_cellnoise2d_float

(error)

MtlX Noise2D

mtlxnoise2d

ND_noise2d

(tick)

MtlX Ramp4

mtlxramp4

ND_ramp4

(tick)

MtlX Ramplr

mtlxramplr

ND_ramplr

(tick)

MtlX Ramptb

mtlxramptb

ND_ramptb

(tick)

MtlX Splitlr

mtlxsplitlr

ND_splitlr

(tick)

MtlX Splittb

mtlxsplittb

ND_splittb

(tick)

MtlX Worley Noise 2D

mtlxworleynoise2d

ND_worleynoise2d

(tick)


Procedural3D

MtlX Cell Noise 3D

mtlxcellnoise3d

ND_cellnoise3d_float

(error)

MtlX Fractal3D

mtlxfractal3d

ND_fractal3d

(tick)

MtlX Noise3D

mtlxnoise3d

ND_noise3d

(tick)

MtlX Random Color

mtlxrandomcolor

ND_randomcolor

(tick)

MtlX Worley Noise 3D

mtlxworleynoise3d

ND_worleynoise3d

(tick)


Texture2D

MtlX Image

mtlximage

ND_image

(tick)

MtlX Tiled Image

mtlxtiledimage

ND_tiledimage

(tick)


Texture3D

MtlX Triplanar Projection

mtlxtriplanarprojection

ND_triplanarprojection

(tick)


Math

MtlX Absval

mtlxabsval

ND_absval

(tick)

MtlX Acos

mtlxacos

ND_acos

(tick)

MtlX Add

mtlxadd

ND_add

(tick)

MtlX Array Append

mtlxarrayappend

ND_arrayappend

(error)

MtlX Asin

mtlxasin

ND_asin_float

(tick)

MtlX Atan2

mtlxatan2

ND_atan2_float

(tick)

MtlX Ceil

mtlxceil

ND_ceil_float

(tick)

MtlX Clamp

mtlxclamp

ND_clamp

(tick)

MtlX Cos

mtlxcos

ND_cos

(tick)

MtlX Cross Product

mtlxcrossproduct

ND_crossproduct_vector3

(tick)

MtlX Determinant

mtlxdeterminant

ND_determinant

(tick)

MtlX Divide

mtlxdivide

ND_divide

(tick)

MtlX Dot Product

mtlxdotproduct

ND_dotproduct_vector3

(tick)

MtlX Exp

mtlxexp

ND_exp

(tick)

MtlX Floor

mtlxfloor

ND_floor

(tick)

MtlX Invert

mtlxinvert

ND_invert

(tick)

MtlX Invert Matrix

mtlxinvertmatrix


(tick)

MtlX Ln

mtlxln

ND_ln

(tick)

MtlX Magnitude

mtlxmagnitude

ND_magnitude

(tick)

MtlX Max

mtlxmax

ND_max

(tick)

MtlX Min

mtlxmin

ND_min

(tick)

MtlX Modulo

mtlxmodulo

ND_modulo

(tick)

MtlX Multiply

mtlxmultiply

ND_multiply

(tick)

MtlX Normalize

mtlxnormalize

ND_normalize

(tick)

MtlX Normalmap

mtlxnormalmap

ND_normalmap

(tick)

MtlX Place2D

mtlxplace2d

ND_place2d_vector2

(tick)

MtlX Power

mtlxpower

ND_power

(tick)

MtlX Rotate2D

mtlxrotate2d

ND_rotate2d_vector2

(tick)

MtlX Rotate3D

mtlxrotate3d

ND_rotate3d_vector3

(tick)

MtlX Sign

mtlxsign

ND_sign

(tick)

MtlX Sin

mtlxsin

ND_sin

(tick)

MtlX Sqrt

mtlxsqrt

ND_sqrt

(tick)

MtlX Subtract

mtlxsubtract

ND_subtract

(tick)

MtlX Tan

mtlxtan

ND_tan

(tick)

MtlX Transform Matrix

mtlxtransformmatrix

ND_transformmatrix

(tick)

MtlX Transform Normal

mtlxtransformnormal

ND_transformnormal_vector3

(error)

MtlX Transform Point

mtlxtransformpoint

ND_transformpoint_vector3

(error)

MtlX Transform Vector

mtlxtransformvector

ND_transformvector_vector3

(error)

MtlX Transpose

mtlxtranspose

ND_transpose

(tick)


Pbr

MtlX Blackbody

mtlxblackbody

ND_blackbody

(error)

The following functions are supported in Solaris:

  • sin
  • cos
  • tan
  • sqrt
  • log
  • floor
  • exp
  • ceil
  • asin
  • acos



Reference