Milestone 4.0.1


  • Added enable_threaded_procedurals: This global option allows users to enable or disable the parallel loading of procedural nodes. This is normally enabled by default, but it can be disabled as a convenience to avoid crashes with procedural code that is not yet thread-safe (e.g. Katana). Rather than disabling this option, we urge developers to make their code thread-safe to take full advantage of the capabilities of modern hardware. (#2637)
  • Reduced peak memory usage for deformation motion blurred ray accels: The peak memory usage while building the ray accel data structure for deformation motion blurred objects has been significantly reduced, often by half. This can help when rendering large deformation motion blurred objects such as multi-million polygon/hair objects. Note that this memory peak is usually not reported by the Arnold statistics, but the effect of this optimization can still be noticed by faster build times when previous versions ran out of physical memory. (#2631)
  • Faster deformation motion blurred ray accels: Objects with extreme deformation motion blur should now render faster. In one particular production scene with exploding, very fast moving particles, this resulted in a 200x speedup. Scenes with average deformation won't see much or any speedup. This does however result in about a 25% slower build time. (#2635)
  • Faster ray accels: Fixed a bug in ray accel creation that was generating inefficient (but still valid and correct) ray accels. Render time should be several percent faster; we've seen 7% in our tests for architectural scenes. (#1526)
  • Faster auto-transparency AOV blending: The AOV composition code has been optimized, greatly reducing the overhead incurred when the enable_aov_composition render option is set. Scenes with shaders that export many different AOVs yet only actually write a few to disk will see the most benefit. (#2634,#2639)
  • Faster gamma correction in handle-based texture lookups: The inverse-gamma correction for handle-based lookups of LDR texture maps has been optimized resulting in up to 1.2x speedups in simple scenes. The older filename-based texture lookups are unaffected by this change, as are scenes that have no inverse-gamma correction, i.e. HDR maps or LDR maps with options->texture_gamma == 1.0. (#2628)
  • Faster approximate expf(): The internal expf() function has been approximated and optimized, resulting in ~3% speedups in simple scenes which heavily use that function (gaussian filters, fog shaders, etc). (#2629)

API additions

  • Arithmetic operators for AtPoint2: AtPoint2 was missing the overloaded operators (+,-,*,=, etc...) present in AtPoint. (#2621)
    AtPoint2 a, b;
    AtPoint2 c = a + b; 
  • rgb() accessor in AtRGBA: It is now possible to get and set the RGB part in an AtRGBA with the rgb() accessor, and use it for common AtRGB operations. This can be useful in code that needs to mix RGB and RGBA colors: (#2633)
    AtRGBA rgba1, rgba2;
    AtColor c = rgba1.rgb() + rgba2.rgb();
    rgba2.rgb() = rgba1.rgb();

Incompatible changes

  • Deprecated legacy utility functions: The following scalar utility functions from ai_types.h have been deprecated: MAP01(), MAP01F(), INVERSE(), ACOSF(), AiBerpScalar(). As far as we can tell, they are unused, or in the case of ACOSF() superseded by a templated version that works on both floats and doubles. (#2622)
  • Templatized BILERP() and BIHERP(): Following all the other utilities in ai_types.h, these two scalar utilities have been templatized so that they can work on both floats and doubles. In addition, they now return a value instead of void. The old non-returning versions have been kept but deprecated. (#2622)

Bug fixes



#1526SAH equation in BVH builder is wrongarnoldthiagomajor3.02 years
#2620kick -licensecheck has stopped giving license detailskickoscarmajor3.34 weeks
#2622ai_types.h is not exposed in the Doxygen htmlarnoldmarcosmajor3.33 weeks
#2632Symbols are not correctly stripped in libai.dylibarnoldoscarmajor3.32 weeks
#2642wrong self-hit treatment in cone/cylinderarnoldoscarmajor3.37 days
#2644'box' count is not reported in the initial log messagesarnoldoscartrivial3.37 days




#2656always_linear metadata doesn't work when writing to .ass4.0.1.1arnoldangelcritical4.0.2
#2646intersection precision problems in cone primitive4.0.1.1arnoldoscarmajor4.0.2
#2652Handle ABS(int)
#2655Linking to a component in an array element not working4.0.1.1arnoldangelmajor4.0.2
  • No labels