New Subsurface Scattering

A new, more accurate way of calculating SSS has been added. Unlike the current empirical BSSRDF method based on diffusion theory, this new method actually traces below the surface with a real random walk and makes no assumptions about the geometry being locally flat. This means it can take into account anisotropic scattering like brute-force volume rendering and produces much better results around concavities and small details. It can also be substantially faster for large scattering radius (i.e. large mean free path) compared to the old method. On the other hand, the new method can be slower in dense media (i.e. small mfp), does not support sss_setname for blending two surfaces together, may require redialing materials to achieve a similar look, and is more sensitive to non-closed meshes, "mouth bags", eyeballs, and internal geometry potentially casting shadows. This new algorithm is exposed in the aiStandardSurface shader via the new parameters subsurface_type (with enum values diffusion and randomwalk) and subsurface_anisotropy (Henyey-Greenstein's eccentricity parameter 'g' from -1.0 to +1.0). The default is to use the old empirical diffusion method in order not to break the look of existing scenes.

Car Paint shader

We are now shipping a dedicated shader for car paint, which can be thought of as the combination of a simplified version of the aiStandardSurface and aiFlakes shaders. This shader can create a wide range of car paint looks without having to connect several nodes. For example, a pearlescent effect can be easily added to both the specular and flakes layers by simply tweaking a few parameters such as specular_flip_flop and flake_flip_flop. An arbitrary number of layers of flakes can be used (flake_layers). The flakes at a deep layer are covered by the ones closest to the surface and more tinted by pigments (specified by the transmission_color parameter).

Shadow Matte improvements

Many improvements were added to the shadow matte shader in Arnold 5.0.2 based on user feedback, and MtoA now exposes these improvements:

Self-reflections are no longer rendered.

New parameter background can either be set to scene_background (default) or background_color, which allows connecting a specific texture in the shadow matte's parameter background_color.

Parameter alpha_mask was added to control whether the alpha must be opaque or if it has to contain the shadow mask.

Indirect Specular now has Fresnel enabled, controlled by specular_ior.

A video showing the improvements in the Shadow Matte shader can be found here.

Namespace controls in StandIns

Since Arnold 5, each standin is automatically namespaced to avoid name collisions, but this prevented from exporting shapes and shaders as separate standins. In Arnold 5.0.2.0 an optional namespace attribute was added to StandIns. By setting the same namespace on different standins, their nodes will be able to "connect" with each other. This will allow exporting shapes and shaders separately, as in Arnold 4. The parameter "Force Translate Shading Engines" (that is necessary for this workflow) has been renamed "Force Shader Assignments" in the export options UI, and only appears when "Export Shaders" is turned off.

A video showing the new features in StandIns and procedurals can be found here.

Procedurals

When a mesh is rendered with "Translator" set to "procedural" in order to behave like a standin, it now has the same full set of features than the standin (overrides shaders / visibility / animated standins, etc..).

Since Arnold 5, StandIns can only reference .ass files. Loading custom procedurals (.dll, .so, .dylib) has now to be done through specific nodes, which can be complicated to handle for procedurals that aren't part of a MtoA extension. This was improved in MtoA 2.1.0 , where custom procedurals having the metadata "maya.procedural" enabled will automatically appear in the Arnold menu "Custom Shapes". The Attribute editor will display the procedural's attributes, as well as the common shape parameters, so that all the StandIn features (override shaders/visibility, etc.) can now be used in custom procedurals as well. See documentation here.

Subdivision Frustum Culling

Subdivision patches outside the view or dicing camera frustum will not be subdivided. This is useful for any extended surface that is only partially visible as only the directly visible part will be subdivided, potentially saving memory and subdivision time. Similarly, no subdivision work will happen if a mesh is not directly visible. This can be turned on globally by enabling the Render Settings parameter Subdivision Frustum Culling and can be turned off for specific meshes with aiSubdivFrustumIgnore (perhaps to avoid artifacts in hard cast shadows, reflections, etc). The option aiSubdivFrustumPadding adds a world space padding to the frustum that can be increased as needed to minimize artifacts from objects that straddle the frustum boundaries. Note that motion blur is not yet taken into account and moving objects might require some additional padding.

A video showing the new Subdivision Frustum Culling can be found here.

Maya Shading Engine removal

MtoA always used to export a Maya-specific MayaShadingEngine at the root of all shading trees. This is no longer the case in MtoA 2.1.0. Apart from decreasing the number of shader nodes in an Arnold scene, which increases efficiency, this also makes it easier to render .ass files exported from Maya in other DCC plugins. Previously saved .ass files are still compatible. However, previously exported XGen archives might not render properly. As a workaround for eventual pipeline specific regressions, a temporary parameter Export Shading Engines (Legacy) was added in the Render Settings (in Tab "System").

Other improvements

asstoc files are no longer exported. The bounds information is now stored in metadata in the .ass file itself.

Post-Translation callbacks are added in the Render Settings, in order to edit the scene between export and render.

"Transmit AOVs and Alpha" was added to aiStandardSurface. It allows passing of AOVs through transmissive shaders.

MtoA debug translation logs are now rendered separately, to avoid confusion with Arnold debug logs, which were getting too big and cluttered. They are now enabled by parameter "MtoA Translation Info" and now appear in Maya logs (instead of Arnold logs).

Added support for light groups in volume rendering.

Improved flakes shader makes it easier to control the amount and size of flakes.

Cellular option in triplanar shader: The triplanar shader now supports projection through Voronoi cells using the new cell parameter. The rotation angle of the projected texture for each cell can be controlled with the cellRotate parameter. Cells can be smoothly blended using the cellBlend parameter.

Support for more OSL attributes: OSL shaders now support getattribute() lookups of standard camera attributes (e.g. camera:fov, camera:resolution, etc) as well as the geometry attributes geom:type, geom:name, geom:bounds, and geom:objbounds on objects.

BugFixes

Duplicating a node was resetting its aiTranslator parameter. For example, duplicating an area light was always resetting it to "quad light".

LookDevKit shaders could fail in batch rendering.

XGen archives were randomly missing shaders in interactive renders.

In Maya 2018, opening the Render Settings was triggering an IPR refresh.

Scenes containing a large number of AOVs are now much faster to load in Maya.

Set Overrides can now be applied to the whole Maya hierarchy, which allows overriding multiple nodes simultaneously.

Fixed race condition that could cause some shapes to be randomly missing from the render.

Motion Vector AOV was empty when the shutter was set to "End on Frame".

StandIns were sometimes displayed as a simple line in the viewport.

Incompatible changes

The removal of MayaShadingEngine shader could introduce regressions in any pipeline expecting it to be present at the root of all shading trees. Previously XGen archives could also fail to load in some cases. As a workaround, a temporary parameter Export Shading Engines (Legacy) was added in the Render Settings (in Tab "System").

aiShadowMatte changes: The shader AOVs indirect_diffuse and indirect_specular were removed since the shader now fills the corresponding built-in AOVs. Parameters offscreenColor and backgroundType were removed. Specular reflection is now affected by Fresnel. To roll back to the previous specular behavior, set specularIOR to a high value like 100, which effectively disables the Fresnel effect.

The flakes shader has been changed, to simplify the control of the number and density of flakes.

motionvector AOV: The motion vector scaling factor in the built-in motionvector AOV has changed. This was required to fix a bug that caused zero motion vectors for certain shutter positions. The output from the aiMotionVector shader is unchanged: it can be used as a workaround in your old scenes if you require the previous scaling.