June 12, 2017

This version uses Arnold

See the Arnold,  Arnold release notes for the full list of core enhancements and fixes.


  • Standard Surface: a new standard_surface shader was added, with intuitive and energy conserving parameters, a secondary specular coat with separate normal, metallic Fresnel, thin surface support and more. The standard shader is still available but considered deprecated.
  • Standard Hair: a new physically based standard_hair shader was added, with much more accurate specular and transmissive scattering, better diffuse scattering for dirty hair, melanin randomization, and simple and intuitive parameters. The older hair shader is still available but considered deprecated.
  • Standard Volume: a new standard_volume shader was added, usable for rendering a wide variety of volumes. The shader provides independent control of density, scattering color and transparency, in a way that is energy conserving by default. Fire can be rendered using blackbody emission driven by temperature. Displacement can be used to add more detail to volumes. This supersedes the density volume shader, which has been removed.
  • Shader mixing: surface, hair and volume shaders now output closures rather than colors. This makes it possible to mix shaders efficiently, using the new mix_shader node to blend or add two shaders including all their light AOVs. Adopted from the common shaders, there is also a vanilla color mixing shader mix_rgba. The ray switch shader has been split up into two ray_switch_shader and ray_switch_rgba nodes, for switching between shaders and one for switching between texture colors respectively.
  • Bump shaders: bump2d and bump3d now output a normal vector that can be linked to new normal parameters in ambocc, lambert, standard_surface and utility shaders. These bump shaders no longer function as passthrough shaders. The bump port of the Softimage material is not used anymore.
  • Noise shader: The noise.coord_space parameter now has a uv enum value for texturing using the object’s local UV coordinates. Note that this calls the faster 2D noise API, not the 3D noise like all other coordinate spaces. In addition, an arbitrary coordinate space can be specified manually by linking another shader into the new P parameter. The shader can now output colors, in scalar mode by blending between color1 and color2, and in vector mode with a separate noise signal per color channel. A new time parameter can be used to smoothly vary noise over time.
  • Utility shader: the utility shader has been enhanced with a new metal shading mode, and a roughness control has been added that affects plastic and metal modes.
  • Env vars in image filename: the image node filename field will now expand environment variables of the form [var], in addition to it already expanding them when they are in the texture searchpath.
  • New tags in image filename: the image node filename field now accepts <utile> and <vtile> tags. They take an optional integer offset <utile:2> that adds to the tile number; e.g. an offset of 2 from a U coordinate of 1.4 will output tile number 3.
  • Renamed image missing tile parameters: on the image texturing node, ignore_missing_tiles has been renamed to ignore_missing_textures, and missing_tile_color has been renamed to missing_texture_color. The handling of missing textures has been extended to non-tagged textures. It is still recommended to not ignore missing textures and fix them (the render will emit an error to the log and abort if options.abort_on_error is left on). However in some cases missing UDIM or other tiled textures may be a deliberate choice. These options allow control, per image node, what happens in those cases.
  • Built-in utility common shaders: the common utility shaders that shipped at least in part with the plugins have been integrated into the core.
  • Color Jittering shader: a new color_jitter shader can be used to generate random colors within a specified gain, hue and saturation range. Colors may be randomized per face, object, procedural instance or user data, or a combination.
  • Triplanar Shader: a new triplanar shader can be used to quickly map image textures without needing UV coordinates. The texture is projected onto the object from the 6 sides, and smoothly blended together at the seams.
  • Dedicated normal and vector map shaders: The common shader space_transform had extra functionality for dealing with tangent-space normal or vector maps, and that has been removed. Instead, there are now two new shaders, normal_map and vector_map that take typical normal map and vector displacement map data, respectively, and prep them for their typical use later in a shading network, similar to how the bump shaders would be used.
  • Skydome light camera visibility: New camera and transmission parameters set the amount of light contributed to camera and specular transmission rays, so that it is no longer required to use a separate background shader for such purposes. A new shader parameter may be used to link closure shaders to control color and transparency. Skydome lights are now preferred over background shaders, as they provide the same functionality with better sampling.
  • volume_scattering renamed to atmosphere_volume.
  • Dithered sampling: most samplers (e.g. soft shadows, indirect illumination, depth of field) will now take advantage of dithered sampling, which improves the visual distribution of noise especially at low sample rates.
  • Quad lights: sampling has been improved, reducing noise for surface lighting. For comparisons with the previous sampler, options.enable_new_quad_light_sampler can be disabled.
  • Cylinder lights: sampling has been improved, significantly reducing noise for cylinder lights in volumes or where cylinder lights are located near other surfaces.
  • Disk lights: a novel sampling algorithm has been implemented for disk lights which can greatly improve their rendering quality when shading points near the disk's surface, particularly in volumes.
  • Russian roulette: on average better performance for hair, transmission and volume scattering.
  • Motion blur time samples: rendering motion blur is now faster when using non-default deform_time_samples or transform_time_samples.
  • Caustic noise reduction: a new method was added to reduce noise from caustics. Noise from GGX microfacet speculars in particular is reduced. options.indirect_specular_blur controls the trade-off between more accurate noisy renders at 0.0, and more blurry biased renders with reduced noise at higher values.
  • Faster opacity mapping: opacity-mapped transparent surfaces, such as tree leaves, are now sampled more efficiently and can render up to 20% faster, specially in machines with many threads.
  • New VR camera: a new VR camera is provided.
OSL, Closures and AOVs
  • Open Shading Language: shaders can now be written in Open Shading Language, an advanced shading language for production GI renderers. OSL shaders placed in the shader search path are automatically registered as Arnold shader nodes, with their parameters converted to Arnold parameters. Once loaded, they can be inspected, instantiated and linked in exactly the same way as C++ shaders.
  • Closures: a new closure parameter type has been added, which shaders can output instead of final colors. There are BSDF, BSSRDF, emission, matte, transparency and volume closures. See the API documentation and examples for more details on how to use these. Linking a color to a closure parameter will automatically create an emission closure with that color. A closure parameter however can't be linked or converted to a color, as the integrator only computes lighting after shader evaluation. In Softimage, the closure type shows in purple. To connect closures to the material's surface slot, a passthrough closure node is provided.
  • Light group AOVs: surface shaders now natively support light group AOVs, previously this feature was only available for volume shading. (#4305)
  • Light path expressions: light path expressions are used to write lighting components into separate AOVs. No longer should individual shaders define AOVs for direct/indirect light and various layers, rather a regular expression syntax is used to define the subset of all scattering and emission events in the scene that should be written to each AOV. Built-in AOVs are available for the common cases.  This is not exposed by SItoA at the moment.

Other Enhancements

  • OpenVDB: rendering of .vdb files is now supported in the Arnold core, using OpenVDB 4.0. The volume node now has a filename parameter that accepts .vdb files. The parameters for both nodes are the same as in the previous OpenVDB plugin, except for the velocity shutter start and end which has been replaced by motion_start and motion_end parameters shared with other shapes. Velocity grids named v, vel or velocity are automatically detected and used if motion blur is enabled in the scene. options.texture_searchpath is used to resolve relative filepaths.
  • Improved OpenVDB startup time: On Linux when rendering with many threads, large OpenVDB datasets could cause significant slowdowns at the start of rendering. Startup times are noticeably improved, resulting in buckets rendering faster especially for low AA samples such as during IPR.
  • Faster curves: The curves geometric primitive now renders about 5 to 15% faster. In addition, when rendering dense hair clumps, min_pixel_width is now up to 2x faster and results in more accurate shadowing, at the expense of a slight increase in sampling noise.
  • Quad and spot light roundness: Quad and spot lights now have a roundness parameter, going from a square shape at 0, to rounded corners, to a disk shape at 1. Quad lights also have a new soft_edge parameter to soften the edges, similar to the penumbra_angle for spot lights.
  • RGB camera filter maps: The data type of camera filter maps has changed from float to AtRGB so that colored effects are possible.
  • Hair UVs: curves.uvs is a new parameter to set sg->u and sg->v default texture coordinates, similar to polymeshes. UVs may be specified per curve or per point, with an array that has the same length as uniform and varying user data respectively. sg->bu and sg->bv still contain the UV coordinates along the width and length of the curve respectively. The hair parameters uparam and vparam have been removed, as they can now be set through curves.uvs.
  • ARNOLD_PLUGIN_PATH: This environment variable is now used automatically to load plugins, and to find procedural and volume DSOs.
  • Updated to RLM 12.2BL2: We have upgraded the license server and the external library controlling the licensing subsystem from version 12.0BL2 to 12.2BL2, a more stable release fixing various crashes, bugs, hangs and memory leaks. (#5754)
  • Updated to OIIO 1.7.12: We have upgraded from OIIO 1.7.7 to OIIO 1.7.12. (#5672, #5826)

Incompatible changes

  • Renamed options.shader_searchpath to options.plugin_searchpath, all types of node plugins are loaded from this path.
  • Removed options.light_gamma and options.shader_gamma. All shader and light attributes are now assumed linear.
  • Removed rarely used bottom, right and woven modes from the options.bucket_scanning enum.
  • Lights with normalize off and radius zero now no longer emit any light, for consistency with lights with very small radii.
  • Light sampling now uses options.GI_diffuse_samples and options.GI_specular_samples for multiple importance sampling.
  • Removed constant light decay, and the decay_type parameter, so that all lights now have quadratic decay.
  • Removed support for negative lights (negative color, intensity, or shadow_color). Negative values will now be clamped to zero.
  • Removed affect_diffuse, affect_specular and affect_volumetrics parameters. Instead diffuse, specular, sss and volume multipliers can be set to zero.
  • Renamed gobo parameters scale_s, scale_t, wrap_s, wrap_t to sscale, tscale, swrap and twrap.
  • Several old Softimage shaders (Phong, Lambert, etc.) have been discontinued.
Ray Types
  • The ray types used for ray visibility, the ray switch shader, GI depth and samples have changed. There are now 5 scattering ray types: diffuse reflection, diffuse transmission (includes SSS), specular reflection, specular transmission and volume scattering. In the options node there is now a GI depth and number of samples for diffuse, specular and transmission rays. kick now has arguments to set the diffuse, specular and transmission depth and samples.
Motion Blur
  • Arnold and its DCC plugins used to encourage the use of "canonical" 0..1 time for all data in .ass files and in Arnold. For example, if motion blur samples went from frame-relative time of -0.25 to 0.25, in Arnold-land the -0.25 time sample would become 0.0 and the 0.25 time sample would become 1.0. This simplified the data in .ass files, etc but made it difficult or impossible to share .ass standins among vendors or even shots that differed in their time ranges, and to know why the motion blur was mismatched. Now, the transform_time_samples and deform_time_samples arrays, along with time_samples arrays on lights and cameras have all been removed in favor of the simpler motion_start and motion_end float parameters on each object. These should always be frame-relative values, e.g. -0.25 and 0.25 respectively in the example above. NOTE that this means non-uniform motion time samples are no longer possible; if an object has N motion keys, the time interval will always be divided up into N-1 equally-space time intervals. Also, this means that transform motion blur and deformation motion blur will always use the same time range.
  • Volume motion blur is also controlled by motion_start and motion_end parameters. The velocity_fps should be set to the framerate, so that the velocity can be scaled to the length of the frame. With the frame relative convention, motion start and end should typically default to -0.5 and 0.5 respectively, indicating the velocity was sampled at the center of the frame.

Other Changes

  • Visual Studio 2015 redistributable: In Windows, we now require the VS 2015 redistributable to be installed in order to run Arnold. We expect most of our users to have it already, but if not the installer can be downloaded from the following link: https://www.microsoft.com/en-us/download/details.aspx?id=48145 (#4445)
  • Custom cameras: Custom cameras can now implement camera_reverse_ray to convert from camera space to raster space. This makes it possible for any custom camera to work as a dicing camera, support min_pixel_width, support accurate raster-space wireframe width, etc. (#4477)
  • procedural node: The procedural node now only supports loading .ass, .obj, .ply files. The dso parameter has been renamed to filename. options.procedural_searchpath is now only used for this node.
  • Deferred procedurals: Removed support for deferred procedurals. All procedurals are now loaded during scene initialization (right before rendering). Also, load_at_init, min and max parameters have been removed.
  • Gamma options removed:
    • Output drivers now take a color_space string attribute to specify which color space to use for rendered images. Built-in values are linear, sRGB and Rec709. The default value auto will use sRGB for 8 bit formats and linear otherwise. All driver_*.gamma have been removed.
    • image nodes now have an color_space attribute to specify which color space the texture is assumed to be in. Built-in values are linear, sRGB and Rec709. The default value auto will use sRGB for integer (8 or 16 bit) formats and linear otherwise. The attribute options.texture_gamma has been removed.
    • Legacy gamma related options in kick (-g/tg/sg/lg) have been removed. You can now set the output color space for a render with kick -ocs <string>.
  • Removed legacy pixel filters: The following pixel filters, which were rarely used, have been removed: catrom2d_filter, cook_filter, cone_filter, cubic_filter, disk_filter, video_filter.
  • Always use auto-bounds for volumes and implicits: Volume and implicit plugins already notify Arnold of the bounds around the data they provide. Users could previously override this with min and max parameters, but those have been removed for volume nodes and are unused for implicit plugins. All volume plugins will automatically have a bounds_slack parameter available to expand the natural bounding box around the data for purposes of adding positional noise in shaders, etc. Volume plugins are responsible for increasing their reported bounds by the bounds_slack amount. Also, the load_at_init parameter has been removed from both volume and implicit type nodes, as it had no effect in practice.

SItoA tickets


  • #1773 Per Light AOV's
  • #1876 Upgrade to AtString
  • #1935 Change 'Volume Scattering' to 'Atmosphere Volume'
  • #1940 Change naming of 'Stand-ins' to 'Procedurals'
  • #1950 Migrate repo to git
  • #1952 Update to Arnold 5.0
  • #1959 Remove the texture cache enabling flag
  • #1960 Remove obsolete or duplicated shaders
  • #1961 Closure parameter and output for shaders
  • #1962 Expose all the core shaders
  • #1963 Update lights to Arnold 5
  • #1964 Update procedural to Arnold 5
  • #1965 Update volume to Arnold 5
  • #1966 Update the visibility and sidedness properties to Arnold 5
  • #1967 New Arnold 5 motion blur bounds
  • #1968 Update the rendering options to Arnold 5
  • #1969 Update AOVs to Arnold 5
  • #1970 Discontinue the Mask mode of the Matte property
  • #1971 Export the main hair UV set to the new curves uvs array
  • #1972 Fix the testsuite for SItoA 4
  • #1973 Match the image clip color profiles
  • #1974 Vector displacement handle
  • #1975 Limit the verbosity level for the rendering pre-passes
  • #1976 VR camera
  • #1977 Rename sta_passthrough_filter to passthrough_filter


  • No labels