Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.



  • EXR overscan support: Overscan is now supported by extending the render region beyond the regular image coordinates. E.g. a ten-pixel overscan for a 640x480 image in all directions can be achieved with options region_min_x,region_min_y,region_max_x,region_max_y of -10,-10,649,489. The old render region defaults of -1,-1,-1,-1 will continue to render the whole image, but new defaults (INT_MIN) are available going forward indicating the render region is not used. EXR output will fully respect the overscan region with differing data and display windows, but the other image formats will simply enlarge the final image resolution to incorporate overscan since they cannot accomodate data outside the display area of the image. (#3102)
  • Improved Cook-Torrance specular and refraction sampling: Many scenes will now render with significantly reduced noise for glossy reflection and rough refraction with the microfacet-based Cook-Torrance BSDF. In particular, BSDFs viewed at grazing angles or involved in multiple glossy or refraction bounces are improved. (#4064, #4196, #4209)
  • Improved sampling of textured quad lights: Quad lights now use a new sampling strategy that adaptively chooses the best sample distribution for each shading point. The noise reduction is most noticeable with textured lights, both on surfaces and in volumes. (#3567)
  • Automatic texture_max_open_files: The options.texture_max_open_files is now set by default to 0, which means that the maximum number of texture files that can be simultaneously opened is automatically computed by Arnold using a new heuristic. This now works for Windows, Linux, and OS X. We expect that the majority of users will be able to leave this at 0 and get the best performance. If Arnold runs out of file handles, Arnold is now more likely to be able to recover without crashing. If the automatic texture_max_open_files that is set is deemed too low, then texture_max_open_files can still be set manually. However, a better solution (and often the only solution) on Linux and OS X is to increase, in the OS, the open file handle hard limit. (#4139, #4140, #4141)
  • Improved performance for shadow ray texture lookups: For shades done to shadow rays (transparency), texture lookups now use less texture I/O. (#4167)
  • Improved performance for rough glossy texture lookups: This improvement was supposed to have been in 4.0.12, but due to a bug, it was never actually enabled in the AiBRDFIntegrate() function used by the standard shader. Shaders that were manually calling the older APIAiCookTorranceIntegrate() were never affected by this bug and have been able to use this improvement since 4.0.12. Now both AiBRDFIntegrate()and AiCookTorranceIntegrate() make use of this feature. Now that the standard shader finally has this feature, users should find that glossy reflections will pull the correct texture mipmap level across all distances while maintaining an optimal amount of texture sharpness. This can result in dramatic reductions in texture I/O and lessens the need for using the texture_glossy_blur option, which we now recommend setting to zero. Unfortunately, third party shaders that do their own integration and manual ray tracing (such as alSurface and Kettle) will not be helped by these fixes, something that we hope to address in a future version. (#4164, #4176)
  • Faster IPR when rendering with many textures: Time between IPR progressive frames has been decreased when there are many textures being used. This is especially evident when the textures reside on a high latency file server. (#4152)
  • Low-level optimizations: Several optimizations were made to improve performance. Some of these are most noticeable on linux and/or when rendering empty or low-complexity regions. (#4193, #4212, #4228, #4149, #1231)
  • Upgraded OIIO to 1.4: This new version comes with many little improvements and bug fixes. For instance, processing a 54k-resolution TIFF file withmaketx on Linux is now 4.5x faster compared to the previous version. However, we now requires a manual texture flush in order for changes made to texture files be reflected inside of arnold. (#3593, #3646, #3826, #4154)

API additions

  • Python 3 support: The Arnold Python API and pykick are now fully compatible with Python 3, workarounds for module importing and unicode strings are no longer needed. (#4239)

Incompatible changes

  • Difference in microfacet BTDFs: Rough refraction viewed at grazing angles or using Phong-smoothed normals renders slightly darker now, especially for high roughness values. This affects the standard shader and AiMicrofacetBTDFIntegrate(), and fixes a bug in the previous BTDF sampling. (#4196, #4231)
  • Handling of unassociated alpha for TGA and PSD: OpenImageIO 1.4 has more conformant handling of unassociated ("unpremultiplied") alpha in TGA and PSD files. This results in improved texture filtering for typical files, but may also cause TGA files that are missing the appropriate metadata to render darker.

Bug fixes



#3998Writing an .ass with open procedurals will not preserve overridesarnoldangelcritical4.16 months
#4158Indirect from volumes in SSS is extremely noisyarnoldalancritical4.13 months
#3183OIIO cache refuses to close texture filesarnoldthiagomajor4.022 months
#3355Overridden opaque attribute on procedural not written outarnoldmarcosmajor4.018 months
#3605extreme anisotropy in Cook-Torrance BRDF produces blackarnoldalanmajor4.012 months
#3624Calling AiUniverseCacheFlush(AI_CACHE_TEXTURE) outside AiBegin / AiEnd crashesarnoldramonmajor4.012 months
#3674OIIO locking texture files between renders on windowsarnoldthiagomajor4.011 months
#3823deepexr driver crashes in tiled modeoiioramonmajor4.19 months
#3867OIIO does not check validity of image SHAoiioramonmajor4.18 months
#3893light_gamma is not applied to skydome_light colorarnoldangelmajor4.17 months
#4068utility shader unconditionally overwrites opacity when opaque flag is offarnoldmikemajor4.15 months
#4119faceting in Cook-Torrance and Ward-Duer specularsarnoldalanmajor4.13 months
#4123NaNs in bump mapping when Ns and N differ very slightlyarnoldthiagomajor4.13 months
#4126make backtrace handler more resilient to errorsarnoldthiagomajor4.13 months
#4130zero-length or NaN tangents causing artifacts in Cook-Torrance and Ward-Duer MIS functionsarnoldalanmajor4.13 months
#4131Zero roughness crashes AiCookTorranceIntegratearnoldangelmajor4.13 months
#4134crash with non-existent procedural path and AI_RENDER_MODE_FREEarnoldangelmajor4.13 months
#4137null tangent vectors potentially causing crashes in Cook-Torrance and Ward-Duerarnoldalanmajor4.13 months
#4142Don't crash if OIIO runs out of file handlesarnoldthiagomajor4.13 months
#4144Crash after cloning shader with linked array parameterarnoldangelmajor4.13 months
#4147Support user data for mesh light texturearnoldramonmajor4.13 months
#4159AiShaderGlobalsGet*() hang if called during displacementarnoldramonmajor4.13 months
#4160Volume node should adjust rays to local spacearnoldmikemajor4.13 months
#4161Wrong AtPoint2 constructor in Python bindingsarnoldangelmajor4.13 months
#4163robustness fixes in OBJ procedural loaderarnoldmikemajor4.13 months
#4164excessive texture I/O in cook-torrance blurry reflections in standard shaderarnoldthiagomajor4.13 months
#4171Sampling position offset should be object space in density shaderarnoldmikemajor4.12 months
#4181Interactive creation of an object in an empty scene does not workarnoldangelmajor4.12 months
#4183Spherical quad sampling converges a different result than area sampling in quad_lightarnoldiliyanmajor4.12 months
#4184Enable tiled Deep EXR outputarnoldramonmajor4.12 months
#4186driver quantization API functions overflow with large float valuesarnoldalanmajor4.18 weeks
#4187skydome_light crash in IPR and corruption with per-component linked colorarnoldangelmajor4.18 weeks
#4190Wrong shadow when using utility shader to modulate opacity of an objectarnoldangelmajor4.18 weeks
#4194crash when reporting error before the options node was initializedarnoldangelmajor4.18 weeks
#4198Sky image texture returns NaN when looking at polesarnoldbrechtmajor4.18 weeks
#4205Degenerate linear or curved motion transforms can cause crashesarnoldbrechtmajor4.27 weeks
#4211Removing a node with unsolved references causes a crasharnoldangelmajor4.27 weeks
#4213bump2d shifts with highly scaled UV coordinatesarnoldramonmajor4.26 weeks
#4214AiNodeGetArray/Matrix returns wrong matrices on instancesarnoldangelmajor4.26 weeks
#4215Deep EXR driver crash when reused in the same sessionarnoldramonmajor4.26 weeks
#4222Shadow precision artifacts with lights with visible geometriesarnoldthiagomajor4.26 weeks
#4231Microfacet refraction has sharp total internal reflectionarnoldbrechtmajor4.25 weeks
#4240SSS invalid or crashes on non-polymesh objectsarnoldmikemajor4.24 weeks
#4244Camera exposure affecting AOV alpha channelsarnoldbrechtmajor4.23 weeks
#4251Skydome interactive enable/disable not workingarnoldangelmajor4.27 days
#4252Don't write 'options' node default values to .ass filearnoldangelmajor4.26 days
#4157Need to warn when passing empty filename as texture namearnoldthiagominor4.13 months
#4192Cannot set metadata for "node" parameter on an .mtd filearnoldangelminor4.18 weeks