20 March 2019

This is a major feature release, bringing GPU rendering (BETA), the inline OSL editor, MaterialX export, the new include operator, packed primitive and Alembic auto-instancing with the Copy SOP, translation optimisations, and UDIM support for texture baking.

Important information about Arnold GPU (beta)


  1. Get the install files on Solid Angle Downloads.
  2. Follow these installation instructions.


This release uses Arnold and OpenVDB 4.0.0.

Binaries available for the following Houdini, Houdini FX, Houdini Indie and Houdini Education production builds:

  • 16.5.634
  • 17.0.506
  • 17.5.173

and for the following platforms:

  • Linux x86_64 (H16: gcc4.8 and H17: gcc6.3)
  • Windows 7 x64 (H16: vc14 and H17: vc14.1)
  • Mac OS X 10.8+ (clang7.3)

Please note that Houdini Apprentice does not support third-party renderers and thus cannot run HtoA.


  • GPU rendering (BETA): You can now switch between CPU and GPU render devices interactively and expect visually similar results. NVIDIA® GPUs from Turing™ to Maxwell™ architectures are supported, and Arnold will take advantage of multiple GPUs, NVLink™ and NVIDIA® RTX™ hardware accelerated raytracing if available. Note that due to beta status of GPU rendering, a number of features are missing, performance is not final, and use in production is not advised. We plan to gradually improve this in subsequent releases and would appreciate your feedback. For a complete description of requirements, features and caveats, see  https://docs.arnoldrenderer.com/x/iwnfB.
  • Improved adaptive sampling: Adaptive sampling now uses a more effective criterion. With the new metric, pixels are being dropped gradually in a smoother and much more predictable manner, resulting much lower render times for identical noise levels. In addition, the adaptive sampling criterion windowing that was previously available only in progressive rendering mode is now also available in non-progressive mode, resulting in higher quality sampling, with fewer sampling "holes". (#7972, #7950)
  • Improved skydome sampling: Arnold now takes into account the normal of the shading point when importance sampling the skydome. Therefore bright areas in the skydome are less likely to "steal" samples when they are below the normal. Even for more uniformly colored skydomes, the improved sampler will waste fewer samples in directions that are below the hemisphere, allowing for lower skydome light sample rates to be used which should give a noticeable speedup. For the same number of shadow rays cast, the new sampler has just a small ~2% performance overhead. Note that skydome samples need to be lowered to 70% or less from their original value (3 instead of 4) to roughly keep the number of shadow rays and associated cost the same. (#6669)
  • Visible lights: The quad_lightdisk_lightcylinder_light and point_light now have a camera and a transmission attribute, allowing these lights to become visible to camera and transmission rays. These attributes are left to 0 by default, thus not changing the default behaviour of the non-visible lights. (#2269)
  • Microfacet multiple scattering: The GGX microfacet BSDF used in the standard_surface shader has been improved to account for multiple scattering between the microfacets, which is more physically correct and reduces energy loss on reflection, especially at higher roughness settings. The reflection from rough metals in particular will be significantly brighter and more saturated as a result. Unfortunately there is a slight increase in noise on account of the more difficult sampling when including the multiple scattering component. Disabling the global option enable_microfacet_multiscatter will restore the previous look. (#7207)
  • Improved random-walk SSS: A new randomwalk_v2 SSS mode has been added that scatters more accurately and deeply through highly-transparent/optically-thin objects, which produces SSS with more saturated colors around fine surface detail and heavily backlit regions of an object. Note that renders will be more costly and noisier than with the original method, since random walks will be on average longer and more random. (#7550)
  • Anisotropy controls for coat in standard_surface: We have added two new parameters, coat_anisotropy and coat_rotation, in the standard_surface shader for finer artistic control of the coat layer. (#7935)
  • Support for negative transmission_extra_roughness in standard_surface: The parameter transmission_extra_roughness in the standard_surface shader now accepts negative values, allowing separate control of the specular and transmission roughnesses for artistic purposes. (#7936)
  • Linkable transmission depth in standard_surface: The transmission_depth parameter is now linkable. (#8039)
  • Improved coat layer in diffuse reflections: When caustics are disabled on the reflected object, the coat layer on the standard_surface shader is now correctly taken into account. (#8016)
  • Improved bump and normal mapping: Built-in shaders such as bump2dbump3d and normal_map now correct for non-physical shading normals while preserving detail. This should be more noticeable when rendering normal-mapped ocean surfaces or using extreme normal maps. (#7639)
  • Smart opaque: Built-in shaders now set the object.opaque flag automatically based on whether or not the shader settings would require disabling the opaque flag on the object to render correctly. For instance, it's no longer necessary to manually disable the opaque flag to get transparent shadows for a glass shader. Notable exceptions are curves and points when min_pixel_width is in use and OSL shaders. Custom shaders can take advantage of this setup tagging shader attributes with metadata. As an example, the metadata for standard_surface follows:

    // - `opacity_term` tags a parameter that is opaque when equal to 1 or (1,1,1)
    // - `transparency_term` tags a parameter that is opaque when equal to 0 or (0,0,0)
    // The additional integer brackets together terms with the same number.
    // This metadata setup from standard_surface:
    AiMetaDataSetInt(node, "opacity", "opacity_term", 0);
    AiMetaDataSetInt(node, "transmission", "transparency_term", 1);
    AiMetaDataSetInt(node, "transmission_color", "transparency_term", 1);
    AiMetaDataSetInt(node, "metalness", "opacity_term", 1);
    // is equivalent to setting:
    // opaque = (opacity == AI_WHITE) && (transmission == 0 || transmission_color == AI_BLACK || metalness == 1);

    Note that setups with transparency but with the opaque flag set to false will now be considered transparent. To preserve the previous look you can make your shader opaque or use a ray switch to make it opaque only to shadows. (#5966)

  • Operator connection on procedurals: Operator graphs can now be connected to procedurals through the operator parameter. Only nodes in the procedural or nested procedurals are evaluated by the graph, where everything is performed relative to the procedural's name scope such as selection expressions. Furthermore, nodes created by the operators are put in the procedural's name scope. (#7747)
  • New include_graph operator: The include_graph operator allows importing operator graphs from an .ass file, where the target parameter specifies the target operator in the included sub-graph. The operator can also load shaders if they exist in the .ass file, where they are put in appropriate name scope depending on what the operator is connected to. (#7294)
  • Scoped child operators: Child operators are now placed in the name scope of their parent operator, where a set of child operators can be connected to enforce a particular evaluation order. (#8075)
  • MaterialX operator improvements: Updated the MaterialX library and operator (#7825). Swizzles can now be used to define the channel connections between shader nodes. Float array handling has been expanded to handle other array types such as color3array in order to support the ramp shader (#7970). The search path for the Arnold node definitions is now set automatically (#8028). The operator matches assignments in accordance with the current name scope, i.e. procedural or global namespace (#7968).
  • Subdivision creases support in Alembic procedural: The Alembic procedural will now detect and translate crease data for subdivision surfaces. (#7655)
  • Improved ramp_rgb shader: Several new interpolation modes were added, as well as an implicit_uvs parameter, which allows to use barycentric implicit UVs to drive the ramp, instead of regular UVs. This last option can be particularly useful with hair. (#7987)
  • New time mode in ramp shaders: The ramp and ramp_rgb shaders now have an additional time mode that computes the input based on the current sg->time and the camera's start and end shutter interval. (#7925)
  • New uv_projection shader: This shader allows to do planarsphericalcylindricalballcubic and shrink_wrap projections. (#7280)
  • New matrix_interpolate shader: This shader allows to produce motion blurred matrix parameters, by interpolating between matrix values. (#7948)
  • New coord_space control in camera_projection: You can now choose to do camera projections in world or object space, or by using Pref user data, or linking any shader to the input position P parameter. (#7798)
  • UV coordinates for background: During background shading, UV coordinates are now generated from the screen coordinates for camera rays. Thus it's now possible to directly link a UV-based shader to options.background such as imagecheckerboard or ramp. (#8007)
  • Denoising albedo: A built-in AOV with an albedo optimized for denoising has been added as denoise_albedo. Both the Arnold (noice) and OptiX™ denoisers will use the new AOV if present. (#6955, #8168, #8069)
  • OptiX™ denoiser improvements: Updated to Optix™ 6 which brings denoising improvements in quality, memory consumption and performance on Turing™ hardware. (#7965)
  • Faster sample generation: Rendering with high camera AA samples combined with large numbers of lights or other secondary samples could sometimes result in very slow startup times. For instance, a scene with AA=18 and point_light.samples=18 was taking 11 minutes to start; it now takes a fraction of a second. (#7933)
  • Faster .ass file writing: Writing to .ass files, especially over some Windows networks, can be dramatically faster. One customer saw a 51x speedup. (#7801)
  • Faster OSL UDIM texture reads: Reading UDIM textures in OSL is now much faster, with up to 10x reported speedups. (#7920)
  • Reduced memory usage for instances of curves: The uvs and shidxs arrays in the curves node are no longer duplicated for every instance of a curves node, significantly reducing the memory footprint of instanced curves. (#7742)
  • Maketx monochrome map detectionmaketx now by default detects the frequent case of an RGB image that can be stored as single channel. This can result in smaller .tx files and render time memory savings. (#6671)
  • Motion vectors AOV uses the camera shutter: In order to facilitate using motion vectors, the global option options.ignore_motion_blur now keeps motion keys and only sets the camera ray times to be equal to the options.reference_time -- use this with motion vectors instead of setting shutter intervals to zero. The new global option options.ignore_motion will take over the pre-existing ignore_motion_blur functionality of ignoring all motion keys. (#7962)
  • New OCIO rolearnold_srgb_equivalent has been added as a synonym for the older srgb_equivalent to make it clear this is an Arnold role. (#8092)
  • Updated to OIIO 2.1.0: Updated to the latest OpenImageIO library in order to bring in several texture related bug fixes. (#7929)


HtoA Enhancements

  • Inline OSL shader (htoa#887)
  • CopyToPoints creates ginstance nodes for alembic primitives (htoa#1166)
  • Alembic Instancing with CopyAndTransform SOP (htoa#1093)
  • Expand top level userdata on packed primitives (htoa#1149)
  • Refactor and optimise translation classes - 2.4x speedup (htoa#1165)
  • MaterialX Export (htoa#1194)
  • Texture baking UDIM support (htoa#1099)
  • Export operator graphs connected to a procedural (htoa#1180)
  • Add an option to write out relative texture and procedural paths (htoa#1183)
  • Add gpu_max_texture_resolution to GPU options (htoa#1176)
  • Add menu to fill gpu cache on Arnold ROP (htoa#1188)
  • Use options.ignore_motion_blur to generate motion vectors AOV (htoa#1210)

Incompatible changes

  • Removed SSS on curves: SSS on curves was deprecated as it did not properly work and has now been removed. (#4254)
  • Removed support for NVIDIA® Kepler™ GPUs: the Optix™ denoiser only supports GPUs with CUDA™ Compute Capability 5.0 and above. (#7964)
  • Defaults changed for standard_surface: The specular_IOR parameter changed from 1.52 to 1.5 so that it matches the coat_IOR and thin_film_IOR. The specular_roughness changed from 0.1 to 0.2. The subsurface_type default changed from diffusion to randomwalk. (#7627, #8133)
  • MaterialX shader reference type name changed: The attribute used to define the shader reference type in MaterialX documents (e.g. surfaceshaderdisplacementshader) has been renamed context because of changed behaviour in the MaterialX library. (#7825)
  • Operator merge order reversed: The last operator wins if multiple operator inputs are merged and override the same node parameter. (#7903)
  • Specular AOV: The sheen component has been removed from the specular_* AOVs. (#7522)


  • Packing packed alembics creates shader assignment discrepancy (htoa#1062)
  • Houdini 17 test failures (htoa#1140)
  • Fix LPE for spec AOVs (htoa#1167)
  • Packed primitives gives different ass files when exporting locally vs on the farm (htoa#1168)
  • Multiple GPUs listed incorrectly (htoa#1186)
  • MPlay IPR not working (htoa#1195)
  • Add time to ramp pattern menu (htoa#1197)
  • Remove obsolete shaders (htoa#1198)
  • Displaying the last AOV when denoising the beauty in GPU mode (htoa#1209)
  • Error on baking one object for different uv sets (htoa#1185)
  • Bake all the polymeshes generated by the selected object (htoa#1191)

  • Crash writing materialx file (htoa#1213)

  • Triplanar: object coord space not working during displacement (core#7401)
  • Triplanar: pref not working during displacement (core#8139)
  • Dxy screen differentials in displacement context are zero (core#6267)
  • parallel AiMakeTx can consume too much memory (core#6376)
  • OpenEXR: standard chromaticities metadata was missing in output files (core#7408)
  • Arnold crashes when you try to write out render stats (core#7741)
  • connected normal_map and bump2d breaks transmission (core#7750)
  • Space transform screen space issue (core#7760)
  • Crash when using polygon holes (core#7781)
  • Operator nodes are not allowed within procedurals (core#7784)
  • No diagnostic showing license server used for successful checkout (RLM parity) (core#7790)
  • running multiple AiMakeTx hangs and crashes in (core#7794)
  • maketx was not automatically doing --opaque-detect (core#7808)
  • transmission toon artifacts around triangle edges (core#7812)
  • color shifts in randomwalk sss when far from origin (core#7905)
  • Add missing camera projection features (core#7939)
  • add triggers for filename, objectpath and fps changes for alembic procedural (core#7952)
  • Log reason why custom procedural fails to load (core#7982)
  • Add missing attributes in ramp_rgb (core#7987)
  • Deep driver: append does not work with half data channels (core#8019)
  • Luminance conversions should take into account working color space (core#8026)
  • Add wrap_mode "none" for uv_transform (core#8097)
  • Ramp in interpolation "constant" not including key positions (core#8142)
  • allow smaller SSS radius (core#8170)
  • Reset shader assignment using set_parameter (core#8009)

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

  • No labels
Privacy settings / Do not sell my personal information / Privacy/Cookies