Rendering Deep Images with mental ray in Maya 2016

Deep OpenEXR files allow to store a variable number of samples per pixel at different depth locations to aid advanced depth compositing workflows.

To render a Deep OpenEXR file with mental ray, open the Render Settings dialog and make sure that the image output format is set to “exr” in the Common tab:


In the Scene tab, enable the “Use Deep Image format” checkbox:


The  Deep OpenEXR file is written in multi-part, which means that files can contain a number of separate but related images. Each render pass gets its own part (i. e. direct_diffuse, indirect_diffuse).

In order to save memory during rendering, mental ray creates tiled Deep OpenEXR files. These files need to be converted to scanline for use in compositing applications like Nuke. This conversion can be performed using imf_copy, a command line tool that is part of your mental ray for Maya installation. It can be found in the bin directory. Call

imf_copy -s tiled-exr-file.exr scanline-exr-file.exr

to perform the conversion. Click on the image below to see a screenshot of the tool executed on a Windows system:


Please note that currently only z front is supported. This means that rendering deep volumes is not possible yet. Deep and flat data cannot be mixed in the same OpenEXR file.



mental ray for Maya 2016 SP2

mental ray for Maya 2016 SP2 is now available for download here or it is automatically installed by the Autodesk Application Manager.
It ships with mental ray which contains improvements for the BSP2 acceleration structure in certain cases, bug fixes for multi-host rendering and for some framebuffer handling issues. The release notes provide more details.

Several bugs were fixed in the mental ray for Maya translator, notably concerning undo when modifying simple mila_material parameters, satellite rendering issues, and a workflow improvement with regard to the new Create->Lights menu and Environment lights.

mental ray for Maya 2016 SP1

mental ray for Maya 2016 SP1 is now available for download here.
It ships with mental ray Both the mental ray core and the integration provide important fixes that we will list in this post.

MDL rendering: latest MDL fixes are incorporated into SP1.

The new version of the MILA layering shaders fixes various issues:

  • alpha channel computation for specular and glossy transmission
  • possible texturing artifacts if mila_light light shader was used
  • halo effect on specular highlight when using mila in IPR
  • possible black pixel artifacts / NaN warnings in custom curve layer weights
  • unknown tag access fatal if mila_specular_transmission was used in combination with irradiance particles or with the GI Next prototype
  • missing subsurface scattering effects behind refractions
  • possible issues with semi-transparent objects in segmented/sorted shadow modes
  • possible tile artifacts in particular with glossy reflection mix
  • VP2 display for mila is now also working for scenes created with Maya 2015

UV-tiling: There was a severe bug around uv-tiled textures and conversion to .map textures: the conversion to .map would sometimes be automatically triggered. This is fixed now. The conversion will only occur if ‘Use optimized textures (auto-conversion)’ is checked in the rendering preferences. (There is a known issue in this context: the button ‘Update optimized cache textures now’ only converts the first uv-tile of a uv-tile sequence. The others will be converted during the first rendering.)

Also, when you created two file texture nodes both referencing the same uv-tile sequence, this could lead to a crash with the previous version. This is now resolved.

There are also various performance improvements in the SP1 version:

  • Since Maya2016, the new shadow mode default is “shadow segments”. This mode supports all ray tracing effects including subsurface and volume scattering in contrast to the approximate, thus potentially faster “simple” shadows. With the latest mental ray, we have improved the performance of “shadow segments” on scenes with extremely high depth complexity.
  • Light Importance Sampling is now faster for scenes with a mixture of large and small are lights.
  • Mental ray render times with procedural shaders/textures (ocean, fractal, and so forth) are also improved.

Adjusting Quality in Maya 2016

In this second post in a series on mental ray for Maya 2016 Render Settings, we assume you are familiar with the concepts presented in the introductory post.

Adjusting Overall Quality

Overall quality is the primary control for adjusting quality vs. speed. When there is noise in the scene, typically increase this quality.

In our example scene below, we set Overall Quality to an extremely low 0.01. Please note the edge aliasing on the tops of the spiral cone object. The back wall also has a bump texture which has noise at this quality setting.

Overall Quality 0.01

In the following images we increase the overall quality from 0.2 to 1.0 by 0.4. Note the better anti-aliasing at the edges of these objects, in particular.

Overall Quality 0.2
Overall Quality 0.6
Overall Quality 0.6
Overall Quality 1.0
Overall Quality 1.0

To visualize how eye ray samples were placed in the rendered image, from the Diagnostic tab check Diagnose Samples before rendering. With this checked, each render creates special informational passes for diagnostics including samples, error, and time per pixel. To view it, from the Render View File menu in Load Render Pass, choose the Diagnose samples pass.

render_pass_diagnose_samplesThis will bring up an imf_disp window with the samples pass already tone-mapped to see the sample density in gray scale clearly.


Note the green arrow above pointing out useful information in the bottom bar. Wherever you locate the cursor on the image, in this bar you will see the pixel location, [202 48], and the number of samples, 15 in this case.

Here are a set of samples diagnostics to match the increasing quality from our scene above from 0.2 to 1.0. Whiter areas have more samples.

Overall Quality 0.2 Samples Diagnostic


Overall  Quality 0.6 Samples Diagnostic



Balancing Quality Adjustment

Although Overall Quality can be used to handle most quality vs. speed adjustment, we can provide understanding how to get to desired results more efficiently. Understanding is important to prevent artists from quick fixes that turn out to take longer than originally planned.

With that said, it is possible to balance the local vs. the global quality settings for faster renders. This balance will evolve as machine resources change and rendering technology adapts.  For example, a brute force render running on GPU might rely solely on a global quality control, since pure path tracers do not split eye rays by design. However, current mental ray provides flexibility in how much you want to tip this balance one way or the other. It can evolve at your pace, and fit your CPU and GPU resources as they evolve.

Use the local quality controls when there is an unbalanced amount of noise from lighting or from materials. For example, if the direct lighting appears to create more noise than other aspects of the scene, increase the lighting quality for optimum speed vs. quality tradeoff. Once adjusted, the overall quality can be used as the main control again.

Consider lighting quality adjustment when the lighting has a large variation. For example, when using a large (> 40) number of lights, or several large area lights. Or when using a high resolution, highly varying HDR image for your light texture. For example, below we have one rectangular area light showing its HDR texture clearly as not uniform. Its range reaches up to values of 70 in a thin horizontal line in the middle of the thick one you see at this exposure. It required less light intensity as well as high lighting quality.

Consider indirect diffuse or material quality adjustment when noise appears on indirectly lit diffuse or glossy surfaces. Or on surfaces with a lot of geometric detail. If you ever had to work with an ambient occlusion (AO) pass that needed more samples, you have a rough idea of the kind of look difference due to geometric variation. The surface details can come out a bit more clearly, with less noise.

Adjusting Lighting Quality

The Lighting Quality controls the number of direct light samples used, when a ray hits an object. It takes into account the number of lights, both point and area, and other factors to determine how many light samples to use.

The scene used for our example has 14 area lights with sphere shapes. Note the quality of the direct lighting on the floor as we increase lighting quality. In this series, we keep Overall Quality at 0.25 and increase Lighting Quality from 0.2 to 1.0 by 0.4 steps.

Lighting Quality 0.2
Lighting Quality 0.6
Lighting Quality 1.0
Lighting Quality 1.0

When using Lighting Quality in the new UI, mental ray overrides the explicit area light samples set in each area light with a global samples-per-light setting. (Currently, it does not gray out the samples settings in the area light AE UI). The total number of light samples are re-allocated based on importance. For example, more samples may be taken from closer, or higher intensity, lights.

Tip: If you are having difficulty isolating the visual noise for adjusting direct lighting quality, use MILA light passes to help you see it. In the Scene tab, enable the direct diffuse pass and adjust to minimize noise in that pass, compared to other passes or the beauty itself.

For example, the following images show the direct diffuse pass from the above renders, as Lighting Quality increases from 0.2 to 1.0 by 0.4 steps.

direct_diffuse_lighting_quality_0.2 direct_diffuse_lighting_quality_0.6 direct_diffuse_lighting_quality_1.0

We will show more detail about light passes in our upcoming post on light passes.

Environment Lighting Quality

Controls the number of environment light samples to use. Also using importance, it is separate from lighting quality and enabled when environment lighting is enabled. We will give examples of this in a later post in this series about environment lights.

Adjusting Indirect Diffuse (GI) Quality

We encourage the selection of On (GI Prototype) mode, over Finalgathering and other legacy modes, for its reduced controls and higher quality. When On, mental ray uses a new technique to characterize arbitrary material shaders, while also providing non-interpolated brute force sampling paths for ease-of-use.

The Indirect Diffuse Quality controls the number of samples split out for a diffuse interaction at a material. For the basic default Global Illumination (GI) mode of On, this controls the number of GI rays. In Finalgather (FG) mode, it controls the number of FG rays, as well as the FG point density and other FG controls.

Below as Indirect Diffuse Quality is increased, note the noise on the floor where the light has to reach from reflections off the walls, ceiling and objects.

Indirect Quality 0.2
Indirect Quality 0.6
Indirect Quality 1.0
Indirect Quality 1.0

To see it isolated as we did above with the direct diffuse pass, enable the indirect diffuse pass.

indirect_quality_0.2_indirect_diffuse indirect_quality_0.6_indirect_diffuse indirect_quality_1.0_indirect_diffuse

Diffuse Trace Depth

The Trace Depth controls affect how deep an individual eye sample path can go. The Indirect Diffuse trace depth has moved into the general Trace Depth section. When an eye sample originates from the eye, each interaction along a given path increases the ray traced depth count. The interaction type can identify different types of counts. For example, a Diffuse reflection or transmission counts toward the Diffuse depth, while glossy or specular reflection counts toward Reflection, and glossy or specular transmission counts toward Refraction.

Indirect Diffuse (GI) Mode Off
Indirect Diffuse Depth 0
Indirect Diffuse Depth 2
Indirect Diffuse Depth 2
Indirect Diffuse Depth 4
Indirect Diffuse Depth 4

Note: Currently, a Diffuse value of 0 means that the first indirect diffuse samples are taken, but then no others, when an indirect diffuse mode is enabled. In other words, the act of using an indirect diffuse mode automatically creates the first level in trace depth. However, this diffuse count starts after the first diffuse interaction, not at the eye. Compared to the rest of the depths, this means this number is one less in relative depth to the other interactions for a given eye sample. This matches legacy FG diffuse depth control. But this will be changed in the future to better match the other trace depth controls.

Material Quality is discussed in more detail in the next post on recommended modern materials and lights.

Using MDL with mental ray for Maya 2016

In Maya 2016 we are introducing basic support for loading and rendering MDL materials with mental ray. In this post we want to take a closer look at how these materials can be used in Maya. For a general introduction to MDL in mental ray, check out this post.


Before starting to use MDL materials in Maya, we recommend to update the library that is used by mental ray to process MDL. Please download this archive, extract it to a temporary directory, choose the file suitable for your platform and replace the libmdl.dll ( on Linux, libmdl.dylib on Mac) in the bin directory of your mentalrayForMaya2016 installation with the new version. On a Windows system, this is typically in C:\Program Files\Autodesk\mentalrayForMaya2016\bin (see image below), on a Unix system it is /usr/autodesk/mentalrayForMaya2016/bin and on MacOS /Applications/Autodesk/mentalrayForMaya2016/bin.

mental ray bin location on Windows

The MDL Node

In Maya, MDL materials are represented by a new surface shader node called mdl_material, which is located in the mental ray surface material section of the “Create Material” window or “Hypershade”.

Create MDL material node

When you assign an mdl_material to an object, you will see that it contains two drop down lists: One for choosing an MDL module and another one for choosing an MDL material:


An MDL module is a file which can contain one or more MDL materials and has a “.mdl” extension. By default, mental ray for Maya 2016 ships only one module, that contains the default_material, a light grey diffuse. Because of that, both drop down lists contain just one entry.

To populate the lists you will need more materials. In the next section, we will see how to get some.

Adding MDL materials

As already announced in the MDL introduction post, example materials can be downloaded here.

1) Unzip the archive to a temporary directory.

By default, mental ray for Maya uses one root directory for placing MDL modules, the directory shaders/mdl within your mentalrayForMaya2016 installation.

2) Copy the folder mdl_examples_for_maya_3dsmax into the MDL root directory as shown below:


If you do not have write permissions in the Program Files directory or would generally prefer another location, you can define additional MDL root directories by specifying the MI_MDL_PATH. To do so, open the Maya.env file, which can be found in the Maya 2016 user directory:


Add the line

MI_MDL_PATH=<Path to MDL files>

If you, for example, make an MDL root directory called “mdl” in your Maya/2016 user directory, as shown in the screenshot above, your MI_MDL_PATH path needs to look like


More than one path can be specified, separated by a “;”.

A note on packages

In most cases, MDL modules are organized into packages, just like our example package. On disk, a package corresponds to a directory. The name of the package is the name of the directory. Packages can be nested to organize complex libraries. Within a package, modules can reference each other and contained resources (like textures) relative to each other or the package root directory. Because of this, it is important to always retain the package structure. Never just copy single mdl files or subdirectories out of a package into your MDL root directory, always use the full package, including the root folder.

Rendering MDL materials with mental ray for Maya

Now that our example package has been put into place, start Maya. Create an object and assign a mdl_material to it. The MDL Module drop down list should look like this:

Example PackageWhen you choose a module, the material drop down list will be populated with the materials contained in the selected module, and the first material will automatically be selected. The “MDL Material Parameters” section shows the parameters of that material, which you can modify to your liking.


Other MDL materials, focused on requirements from the automotive industry are available for download in the Advanced Rendering Forum.


MDL materials are closed entities. They cannot be used in a shading network. Even though Maya allows connections to traditional shader and utility nodes, mental ray will ignore these  connections. However, MDL materials can be used alongside with traditional materials and shaders.

In its initial state, the mdl_material node does not come with a swatch render, has no viewport representation and is also not supposed to work with IPR. These limitations will be removed in future releases.

Using MDL with mental ray in 3ds Max 2016

Following the introduction, we will now go through the steps to render MDL materials in 3ds Max 2016. In the instructions below, [3dsMax2016] referes to the folder where 3ds Max 2016 is installed (typically C:\Program Files\Autodesk\3ds Max 2016).


1. Unzip the attached package NVIDIA_MDL_3dsMax into a temporary folder.

The package contains the following files:

  • – Archive with mdl examples
  • libmdl.dll  –  Latest version ( of the MDL mental ray dll
  • mdl_max.mi  –  GUI file to display pretty MDL names
  • MDLScene.max  –  Sample 3ds Max scene with MDL materials

2. Unzip into a newly created folder  [3dsMax2016]\NVIDIA\shaders_3rdparty\mdl\

You should end up with the following files:ExplorerViewOnMaxMdlExamples

3. Install the file mdl_max.mi in the folder [3dsMax2016]\NVIDIA\shaders_autoload\mentalray\include\

4. Copy the new version of libmdl.dll into the folder: [3dsMax2016]\


Rendering in 3ds Max 2016

Start 3ds Max 2016, chose mr production renderer and open material editor. You should see a new set of materials:


You might want to load the scene MDLScene.max, it has some MDL materials already set.
Here is mental ray rendering with few MDL materials assigned:


And iray rendering:


NVIDIA Material Definition Language (MDL) with mental ray

NVIDIA Material Definition Language, in short MDL, is an NVIDIA initiative to standardize physically based material designs in a common format, see MDL materials can be shared across renderers which are able to handle physical material properties like BSDFs in their core. mental ray 3.13 offers support for rendering pre-packaged MDL materials. In this post, we provide links to resources for MDL and give some background. In the following posts, we give instructions on how to use the materials in 3ds Max and Maya and provide example MDL materials.

The Material Definition Language Handbook gives an in-depth introduction to MDL and is aimed at the technically interested reader to learn more about the concepts of MDL and the ideas behind it. It’s work in progress and you will see it evolving over time. In the MDL developer section, you will find the MDL Technical Introduction and the MDL 1.1 Specification among other information.MDL materials rendered with mental ray

In this first version of MDL in mental ray, the user should expect some restrictions that we will remove going forward. Editing MDL materials is currently only possible on a parameter level after loading external MDL code through the mechanism that we describe below. Both MDL materials and traditional shaders can be utilized side by side within the same scene and will render smoothly. However, MDL materials are closed entities for mental ray upon loading. Parameter connections to other shaders or other MDL materials are currently not supported. Measured materials and the emissive properties of MDL are not yet handled by mental ray 3.13.

We are providing some MDL material examples in the subsequent posts that showcase the power of MDL for rendering complex shading and lighting effects. Please follow closely the instructions on how to install the examples for rendering within your application.