from the mental ray team!
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.
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.
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”.
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:
When 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.
Troubleshooting mental ray renders of Maya XGen
Got a nice XGen groom? Everything looks decent in VP2, but in your mental ray renders parts of the hair are missing or, even worse, the hair is not rendered at all?
Don’t panic, these issues can be addressed.
Hair geometry shader setup
In mental ray, XGen hair and other procedurals like cards or randomly instanced archives are handled by a geometry shader. This geometry shader needs to be set up correctly. Usually, this is done automatically by Maya when a new XGen description is being created. In some cases it can happen though, that the geometry shader gets lost or has not been applied. As a result, the XGen primitives are not rendered. To reapply the shader, open the preview/output tab of the XGen window and click the “Setup” button to the right of “Setup Geo Shaders” in the output settings section:
After that, your XGen description should render.
Adjusting render output settings
In case your hair looks clipped or thinned-out in a rendering, pay attention to the render output settings. One important setting that usually needs to be adjusted manually is the area, that is supposed to contain all generated XGen primitives. By default, this area is computed from the the bounding box of the XGen base mesh, plus a padding value of 1 for the XGen primitives. This padding value is suitable for fitting a default XGen description with hair of length 1. Real-world grooms rarely meet this condition, that’s why renders come out with clipped hair.
To change the padding, open the preview/output tab of the XGen window and click the “Auto Set” button beneath “Primitive Bound” in the output settings section to compute a proper padding-value:
This ensures that all hair (or whatever primitives you are working with) is being rendered correctly.
As you groom along, the padding value might need to be re-adjusted, again.
In case the hair appears less dense in the rendering than in the viewport, make sure the “Percent” slider has been set to 100:
A lower value will cause the number of generated primitives to be reduced accordingly. This slider can be a nice tool to get fast preview renders with fewer primitives.
Batch rendering XGen primitives
For batch rendering, one additional step is necessary. The XGen collections used in your scene need to be exported to disk to ensure that mental ray can find them. To do so, click on File -> Export Patches for Batch Render in the XGen window:
Happy hair rendering,
XGen Hair and custom shaders
Today we want to talk about how to use a custom hair shader to render XGen hair in mental ray for Maya. We will see how such a shader can be assigned, how various helper nodes can be used to alter the appearance of the hair and finally, we will make use of Disney’s expression language SeExpr() to create some interesting effects. For this purpose we use this little doll with a simple XGen hair cut:
By default, XGen uses the xgen_hair_phen shader. This shader mimics the appearance of hair by using a classical Phong model with 2 specular lobes. The shader’s diffuse color parameter can be fed by the custom XGen shader parameters root_color and tip_color. Those need to be defined in the “XGen Window” and allow us to make use of SeExpr(). We won’t go into details on xgen_hair_phen here but simply link to a good overview of all its parameters and an interesting tutorial on how to use it instead.
We start by assigning a different hair shader. For this, we select the XGen hair collection node in the “Outliner”, then choose “Assign New Material” under the “Lighting/Shading” menu and finally apply mib_illum_hair_x:
After some parameter tweaking, we end up with the following rendering:
Let’s add some root-to-tip color variation. In “Hypershade”, we create an xgen_root_tip_color_blend node and feed it into both the diffuse and the secondary color slots of the mib_illum_hair_x shader. The shader provides two color inputs which are blended together over the length of the hair. We choose the root color to be the same we had in mib_illum_hair_x before and orange for the tip:
To get some color variation not only along the length of the hair but also across the head, we now apply a texture to the root_color by connecting an xgen_ptex_lookup. We load the XGen region map for want of a better texture. Here is the result:
So far so good. But still no expressions involved.
In the “Output/Preview” section of the “XGen Window”, we add a new parameter of type color and name it custom_color (any name will do here):
The custom_color parameter appears in the UI but it does not look like a color yet. The little icon next to the new parameter will bring up the “Expression Editor”. We open it and type in the expression seen below to make it a color (red, for now):
Now let’s connect this newly created variable to our shading network. We create a xgen_seexpr node and connect it to the tip_color input of the xgen_root_tip_color_blend shader:
To make use of our custom_color parameter in the xgen_seexpr shader, we then type its name in the shader’s Customs attribute and type the expression
$custom_color; into the Expression field:
The rendering shows that the custom_color parameter has been picked up correctly:
Finally, lets replace this simple color by a more complex expression. XGen provides quite a long list of expression samples which can be accessed as shown in the image below. From the “Color” subset we choose “NoiseC”.
A bunch of new parameters will be added below our custom_shader parameters, Those parameters define the noise function we just selected. Instead of modifying them directly in the XGen window, let’s open the expression editor for immediate visual feedback. After some value tuning we get a quite colorful map:
And here the rendering we get out of this:
We could alter the expression to change the look even further, we could create more custom parameters and combine them in the xgen_seexpr shader, the possibilities are endless, so we simply leave further experiments to you and your imagination!