• SSE4.2 optimizations: We have raised our minimum CPU requirements from CPUs needing to support the SSSE3 instruction set to SSE4.2. This allows us to start taking advantage of the additional SSE4 instructions to further optimize Arnold. Already we are seeing a slight speedup in several areas. For instance, the Hosek Sky shader is now 5% faster. (#2625, #5051, #5053, #5056)
  • Faster OpenVDB motion blur: Rendering of motion blur on CPUs with many threads is now faster. The speedups depend on the specific scene and the CPU, but we have often seen 2x faster, and even 10x faster in some cases. Additionally, rendering of OpenVDB files with separate velocity grids for the XYZ components is now also up to 2x faster, so that merging the grids into a single vector velocity grid is no longer required for good performance. Merging the grids in advance still helps to make the file loading a little faster. (#5103)
  • Faster gobo shader: The number of shader evaluations in the gobo light filter has been greatly reduced. We are seeing 20% faster renders in simple scenes with a light and a gobo. (#5070)
  • Faster textures: AiTextureAccess() is now much closer (though still not equal) in performance to AiTextureHandleAccess(). We have also made AiTextureHandleAccess() faster in certain situations. (#3192, #3699, #5069, #5068)
  • Default texture cache size increased to 2GB: The default setting for options.texture_max_memory_MB has been increased from 1GB to 2GB. This can help improve performance on texture heavy scenes. (#5101)
  • Quad and disk light spread: Quad and disk lights can now emit light focused in the direction along the normal. The default spread value of 1 gives diffuse emission, while lower values focus the light more, until it becomes a laser like beam at value 0. Low spread values can be noisier than the default high spread, so be careful when using them. (#5119)
  • Photometric light radius: Photometric lights now include a radius parameter with which softer shadows may be obtained in a manner similar to point lights or spot lights. Defaults to 0, which matches this light's original behavior. Note that IES files only store far-field photometric values, so it's meaningless to use them with area lights, and abusing the new radius parameter can make things look strange. The intent of adding this radius is to achieve slightly soft shadows rather than razor sharp shadows in a manner that is acceptable for VFX use. (#5121)
  • More shader parameter conversions allowed: It is now possible to link a shader that outputs a float to a shader that takes in an integer type and vice versa. Likewise, several other useful types of conversions are also now allowed. (#5058, #5095)
  • Deep EXR driver support for append / checkpointing: driver_deepexr now supports append on to skip rendering buckets that were saved in a previous interrupted render. Currently this only works for tiled mode, not scanline. Note that since Nuke only works with scanline deep files, if your output deep files are tiled you will have to convert them with oiiotool input_tiled_deep.exr --scanline output_scanline_deep.exr (#4863)
  • Improved deep EXR driver support for volumes: Deep volumes are now written with higher precision using less samples, which results in much more accurate and smaller deep EXR files, with size savings of 50 to 75%. (#5102, #5113, #5114, #5120, #5135)
  • Fewer warnings: A number of pedantic warnings have been removed in order to declutter log files: nonexisting shader paths, camera matrix overriding handedness, deprecated RGB AOV, empty polymesh node, UV array compression, ignoring mesh with all faces invisible, user normals on subdivs, too many messages of given type. (#5042)
  • Watermarks for shaderballs: Shaderball previews in our plugins (e.g. MtoA) no longer show the "arnold" watermark. (#5074)
  • Updated to RLM 12.0BL2: We have upgraded the license server and the external library controlling the licensing subsystem from version 11.3BL1 to 12.0BL2, a more stable release fixing various crashes, bugs, hangs and memory leaks. (#5014)

API additions

  • AiNodeGetParent(): Return the AtNode* procedural (i.e. the parent node) that created the input node. (#5004)
  • AiParamTypeConvertible(): Added API function to determine if a parameter src_type can be converted into the dst_type parameter. (#5097)
  • AiMsgGetLogFileFlags(): Added AiMsgGetConsoleFlags() and AiMsgGetLogFileFlags() API functions to get the currently set logging flags. These now match the corresponding AiMsgSetLogFileFlags() and AiMsgSetLogConsoleFlags() API functions (#5109)
  • UVs in quad light filters: Light filter shaders on quad lights can now use sg->u and sg->v to retrieve the UV coordinates on the surface of the quad light. (#5122)

Incompatible changes

  • Require SSE4.2 CPU: We now require CPUs that support (at least) SSE4.2 instructions. On older computers that do not support these instructions, Arnold will inmediately abort on startup. (#2625, #5053)
  • Internal reflections in standard shader: The enable_internal_reflections parameter previously did not ignore all internal reflections, and incorrectly ignored some other reflections, which is now fixed. (#5136)
  • Specular roughness: When using very low or zero roughness in the standard shader or microfacet API functions, reflections will be sharper than before, where previously they were too blurry. (#5067)

Bug fixes



#2654Implement a more robust ray-cone intersector
#3699Filtered texture result cache slows down evaluation in corner cases
#5027AOVs of type AI_TYPE_NODE do not work
#5028shader AOV does not work
#5033Deep EXR light AOVs crash
#5034Bump should work regardless of UV quality
#5035Deep EXR light AOVs not composed correctly
#5039Problems when first element in the list of disp_map shaders is NULL
#5041Incorrect deep EXR render with matte surfaces behind volumes
#5046Light AOV name change to use '_' instead of '.' as separator
#5054Crash when comparing compressed arrays
#5064Incorrect subdivision for soft creases on boundaries
#5067Standard shader with specular roughness zero is not perfectly sharp
#5071textures with empty filenames should be an error
#5078Misleading warnings when loading invalid volume and procedural DSOs
#5083UDIMs with linked UVs or custom uv set are using wrong UDIM column
#5086Wrong transparency in front of opaque matte surfaces
#5091NaNs in Ward-Duer and stretched Phong BSDF sampling weights due to division by zero
#5092cached indirect diffuse values are incorrect
#5096rectangular quad light check is overly aggressive
#5099Improve sample merging for deep volumes
#5102Deep volume output accuracy should not worsen with more AA samples
#5108Procedurals create duplicate objects
#5129Gobo light filters connected to a float slidemap result in red colors
#5132crash when rendering large un-tiled EXR images
#5134Bad texture derivatives in rare cases from sphere objects
#5136Standard shader enable_internal_reflections not working for specular
#5057missing ai_shaderglobals.h include
  • No labels