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)
- Check the system requirements before using Arnold GPU. If you don't have a supported card or the required drivers, GPU rendering will not work.
- Review the list of supported features and known limitations before you start using Arnold GPU.
- If you have any technical problems, questions, or feedback on Arnold GPU, use the beta forum on Arnold Answers
Installation
- Get the install files on Solid Angle Downloads.
- Follow these installation instructions.
Compatibility
This release uses Arnold 5.3.0.0 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.
Enhancements
- 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_light
,disk_light
,cylinder_light
andpoint_light
now have acamera
and atransmission
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 optionenable_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
andcoat_rotation
, in thestandard_surface
shader for finer artistic control of the coat layer. (#7935) - Support for negative
transmission_extra_roughness
instandard_surface
: The parametertransmission_extra_roughness
in thestandard_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
: Thetransmission_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
bump2d
,bump3d
andnormal_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 theopaque
flag on the object to render correctly. For instance, it's no longer necessary to manually disable theopaque
flag to get transparent shadows for a glass shader. Notable exceptions arecurves
andpoints
whenmin_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 forstandard_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 tofalse
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: Theinclude_graph
operator allows importing operator graphs from an .ass file, where thetarget
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 animplicit_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: Theramp
andramp_rgb
shaders now have an additionaltime
mode that computes the input based on the currentsg->time
and the camera's start and end shutter interval. (#7925) - New
uv_projection
shader: This shader allows to doplanar
,spherical
,cylindrical
,ball
,cubic
andshrink_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 incamera_projection
: You can now choose to do camera projections in world or object space, or by usingPref
user data, or linking any shader to the input positionP
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 asimage
,checkerboard
orramp
. (#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
andshidxs
arrays in thecurves
node are no longer duplicated for every instance of acurves
node, significantly reducing the memory footprint of instanced curves. (#7742) - Maketx monochrome map detection:
maketx
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 theoptions.reference_time
-- use this with motion vectors instead of setting shutter intervals to zero. The new global optionoptions.ignore_motion
will take over the pre-existingignore_motion_blur
functionality of ignoring all motion keys. (#7962) - New OCIO role:
arnold_srgb_equivalent
has been added as a synonym for the oldersrgb_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
: Thespecular_IOR
parameter changed from 1.52 to 1.5 so that it matches thecoat_IOR
andthin_film_IOR
. Thespecular_roughness
changed from 0.1 to 0.2. Thesubsurface_type
default changed fromdiffusion
torandomwalk
. (#7627, #8133) - MaterialX shader reference type name changed: The attribute used to define the shader reference type in MaterialX documents (e.g.
surfaceshader
,displacementshader
) has been renamedcontext
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)
Fixes
- 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 5.2.2.0 (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 5.3.0.0 release notes for the full list of core enhancements and fixes.