Milestone 3.3.8


  • Multilayer support for driver_exr: The OpenEXR driver (driver_exr) now supports multiple AOVs. The resulting file channels are named based on the AOV names with the channel names appended, which is compatible with Nuke. Note that writing more than one AOV containing an alpha channel (e.g. "RGBA RGBA" or "A FLOAT") to driver_exr may cause a conflict in the resulting file, and it is not well-defined which AOV's alpha channel will be used for the file's "A" channel. It is recommended that each driver has at most one AOV containing an alpha channel. (trac#1963)
  • Speedups for sss_faceset: Meshes using the sss_faceset feature to eliminate SSS sample computation on selected faces will now perform even more efficiently by skipping inactive faces completely during the sample generation phase. (trac#2297)
  • Increased bump mapping precision far from the origin: The bump mapping code has been modified to increase precision which results in less banding/moire artifacts in surfaces that are very far away from the origin. (trac#1381)
  • New ignore_bump render option: Just like we have ignore_displacement, there is now an ignore_bump option which will deactivate bump mapping effects in bump2d, bump3d and autobump. (trac#2300)
  • dPdu and dPdv differentials for displacement: Displacement shaders now receive an estimate of dPdu and dPdv. This can be useful for tangent-space displacement maps, for example. Previously these values were always zero. (trac#2304)
  • Reject unmipped textures: A new option texture_accept_unmipped was added to complement texture_accept_untiled. If enabled, this option causes a fatal error if an unmipped texture is sampled. This is useful for applications and workflows which enforce using only mipmapped images, as unmipped and untiled textures cause major performance penalties. Texture tiling and mipmapping can be done in a preprocessing step with the bundled maketx tool. (trac#2299)
  • Upgraded OpenImageIO to 0.10: The bundled OpenImageIO version was upgraded from 0.8.8 to 0.10. This increases the accuracy and quality of texture sampling, as well as increasing the number of image formats supported. All OpenImageIO format plugins are bundled except cineon,field3d, and jasper. Note that 0.10 has more conformant handling for unassociated ("unpremultiplied") alpha. (trac#2285)
  • Static linking on Linux: On Linux, OpenImageIO and all of its dependencies are statically linked into libai.so. This binds OpenImageIO and its dependencies like Boost and OpenEXR to Arnold at compile time. All non-API symbols (including RLM symbols) are hidden in the Arnold library. Arnold won't load outside versions of dependent libraries, nor will applications be able to load Arnold's versions of those libraries. Please note that this change makes it impossible to link to Arnold's bundled OpenImageIO. (trac#2296)
  • Static linking on OS X: On OS X, OpenImageIO's dependencies are statically linked into libOpenImageIO.dylib, which is loaded by libai.dylib. This binds OpenImageIO to its dependencies like Boost and OpenEXR at compile time. This limits library conflicts to only OpenImageIO, alleviating some possible issues with dynamic versions of its dependencies. (trac#2296)
  • Static linking on Windows: On Windows, the Intel Math Library is now statically linked into libai.dll. This may help prevent conflicts with applications using other versions of the Intel C++ compiler. (trac#2296)
  • Retries when requesting licenses: Arnold can now be configured to request a license several times until it succesfully acquires one. This can help in situations where the server is saturated by many simultaneous license requests. Users can set/get the number of attempts and the delay (in milliseconds) between failed attempts by either using the C API (see next section below) or by using the environment variables ARNOLD_LICENSE_ATTEMPTS and ARNOLD_LICENSE_ATTEMPT_DELAY. If set via the API functions, those values are used. If not, the environment variables are used. Otherwise, Arnold defaults to just one (1) attempt and no delay. (trac#2236)

API additions

  • License request attempts: As mentioned above, the number and delay of license request attempts can now be configured via the following functions:
    AI_API AtVoid    AiLicenseSetAttempts(int n);
    AI_API AtUInt    AiLicenseGetAttempts();
    AI_API AtVoid    AiLicenseSetAttemptDelay(int msecs);
    AI_API AtUInt    AiLicenseGetAttemptDelay();

Incompatible changes

  • libopenimageio.so moved inside libai.so in Linux: As mentioned above, this change makes it impossible to link to Arnold's bundled OpenImageIO. We no longer distribute libopenimageio.so with the Arnold package. A very small number of customers relied on this libopenimageio.so file as a way for their OIIO-enabled custom shaders/apps to stay in sync with our OIIO version and thus avoid versioning conflicts at link time (that could lead to crashes). Because the OIIO library used by Arnold is now safely hidden behind the walls of libai.so, there are no more link conflicts; users are free to use whatever version of OIIO as they wish. (trac#2296)
  • Handling of unassociated alpha: OpenImageIO 0.10 has more conformant handling for unassociated ("unpremultiplied") alpha, which is the default for PNG (as per spec), and conditionally for TIFF (based on the ExtraSamples tag). This may cause unexpected results for tools which consider alpha and color channels to be independent. (trac#2285)

Bug fixes



#2287Crash releasing resources when instancing procedurals with unresolved referencesarnoldoscarmajor3.311 days
#2298Camera rays are not normalizedarnoldmarcosmajor3.37 days
  • No labels