Milestone 4.0.6


  • Improved thread scaling in texture lookups: Fixed a major slowdown that occurred when performing many texture lookups per sample. This was most evident on multi-socket systems. On a dual hexa-core system (24 threads) this resulted in a 16x speedup for a scene with more than a thousand texture lookups per pixel. We have seen 2x and 4x speedups in other scenes. The actual speedup will depend on various things like the hardware, the number of texture lookups per shader network, and on the size of the texture cache, which is 512 MB by default. (#2887)
  • Subdivision optimizations: Subdivision now uses substantially less memory and takes slightly less time to compute. In addition, the size of the AtNode structure has been reduced by 8 bytes, which will help save some memory in scenes with millions of instances. (#2835, #2888)
  • Improved ray triangle intersection precision: The numerical robustness of the ray/triangle test has been improved, fixing some long-standing issues with rays slipping through edges. While some errors are still theoretically possible, the probability is dramatically reduced. Render times should also improve; we've seen up to 7% improvements, but in practice it is likely to just be a couple percent. The global render option enable_hit_refinement and the per-object option double_precision_intersector have both been removed. Hit refinement is now hardcoded for camera rays. (#2839, #2862)
  • Camera exposure control: An exposure parameter has been added to all cameras, even user-written ones, which scales the pixel samples by 2exposure . Increasing the exposure by 1.0, or one "stop", produces an image twice as bright, while reducing the exposure by one stop produces an image half as bright. The default value is 0 for backwards compatibility. This can also be controled in kick with the new -e <f> option. (#2884)
  • PLY support: PLY files in both ASCII and binary variants can be loaded as procedurals, similar to OBJ files. In addition to basic polygon data, per-vertex normals are also supported. (#1866)
  • New id color mode in utility shader: The id mode can be used to visualize a different color for each object. Unlike the obj mode, which is based on a hash of the object's name string, the id mode is based on a hash of the object's id integer attribute and is therefore more stable in animation in cases where the object name changes per frame (because of e.g. a frame number suffix). (#2086)
  • OS details in logs: Details about the running operating system are now printed at the top of the log file, such as the name, version, codename, kernel, etc (depending on the OS type). (#2734)
    00:00:00     5MB         | running on mos
    00:00:00     5MB         |  1 x Intel(R) Core(TM) i7-2860QM CPU @ 2.50GHz (4 cores, 8 logical) with 16384MB
    00:00:00     5MB         |  Mac OS X 10.7.3 "Lion" (build 11D50b), darwin kernel 11.3.0
  • Log file specification for kick: kick now takes an optional -logfile parameter on the command line to write out the log to a specific location, rather than the default. This supercedes the existing -log option which does not take a parameter. (#2878)
      -logfile <s>    Enable log file and write to the specified file path

API additions

  • AiNodeSetAttributes(): Multiple attributes of an AtNode can now be set in one go by using a string which follows the same format rules for setting node parameters as used in .ass files. This can be useful in the Maya/Softimage/Katana plugins to pass new options to the renderer before they are made visible in the UI of the host application. (#2531)
    AI_API void AiNodeSetAttributes(AtNode* node, const char* attributes);

Incompatible changes


Bug fixes



#2887Thread contention with many texture lookups per sample on multi-socket machinesarnoldmikeblocker3.310 days
#2096Fix gamma correction dependency on node creation orderarnoldangelmajor3.317 months
#2838popping artifacts in multi-threaded displacementarnoldoscarmajor3.36 weeks
#2844Wrong gamma correction on binary encoded arraysarnoldangelmajor3.35 weeks
#2846Orientations ignored for curves when not in oriented modearnoldmikemajor3.35 weeks
#2850Cannot switch to/from oriented curves mode in IPRarnoldmikemajor3.35 weeks
#2854UV-based displacement combined with deformation motion blur brokenarnoldmikemajor3.34 weeks
#2856Random slowness with curves intersectionsarnoldmikemajor3.34 weeks
#2857Auto setting of options->camera not working after deleting previous cameraarnoldangelmajor3.34 weeks
#2865Shader gamma is not applied to params with the default valuearnoldangelmajor3.33 weeks
#2870stack overflow when parsing .ass files (arrays of arrays)arnoldangelmajor3.33 weeks
#2872AiLightsGetShadowMatte() always black after a light looparnoldalanmajor3.32 weeks
#2877temporary memory leak in AiTraceProbe()arnoldthiagomajor3.32 weeks
#2883image shader creates texture handles even if cache_texture_handles is offarnoldangelmajor3.32 weeks
#2894Ray Differentials not set when a ray only hits backgroundarnoldramonmajor3.32 days
#2895AiMappingLatLongDerivs returns wrong derivativesarnoldramonmajor3.331 hours
#2896Shadow rays cast with AiTrace do not skip shaders on opaque hitsarnoldmikemajor3.323 hours
#2897shader calls stats missing evaluations inside shader networksarnoldmarcosmajor3.319 hours
#2867fix documentation for AiShaderGlobalsEvaluateBump()arnoldmikeminor3.33 weeks
  • No labels