Milestone 4.0.8


  • Reduced texture I/O: Ray differentials, used to calculate texture sampling footprints, have been improved resulting in generally larger filter sizes matching the requested visible detail. Texture sampling will now choose less detailed MIP levels when possible and will generally load less data from disk and do less work. In particular, ray differentials have been improved for mirror reflection rays (of type AI_RAY_REFLECTED), refraction rays (in the standard shader only), ray-traced SSS rays, and finally for camera rays during the first rough passes of progressive rendering at negative AA settings, where textures will be blurred to match the size of the blocks of pixels and help decrease startup time. We have seen dramatic speedups in scenes with large numbers of high-resolution texture maps because of the significantly reduced disk I/O. (#2979, #3017, #3022, #3028)
  • Faster bump mapping: Autobump and bump mapping are now cheaper to compute than before due to there being 25% less shader evaluations per call. (#2909)
  • Faster ray accel build: It now takes about 25% less time to build the ray acceleration structures. Memory usage and ray tracing speed are unaffected. (#3008)
  • Thread affinity: Threads can now be pinned to cores on Linux. This can improve scalability in modern machines with 16 or 24+ threads and, in the case of ray acceleration structure builds, it can occasionally result in as much as a 3x speedup when all the cores are being used (which is the default in Arnold, options.threads = 0 or -t 0 in kick). The default setting is auto where thread pinning is only enabled if more than half the logical cores are being used. This can also be manually set to always on or off by setting the new global option options.pin_threads to on,off, or auto. Note that, if client code, for instance a custom shader, spawns their own threads manually (with pthread_create or similar), these threads will inherit the same thread affinity, which totally breaks the point of spawning threads; in these situations they can either setoptions.pin_threads to off or they can create their threads with the Arnold API AiThreadCreate() which will un-pin the created thread. (#2733)
  • Auto-instancing of .ass procedurals: Thanks to a new built-in cache, procedural nodes whose dso parameter points to an .ass file can be automatically cached for future reuse; subsequent procedurals trying to load the same .ass file will instance the previously loaded geometry, potentially saving tons of both memory and disk I/O. Because of the experimental nature of this feature, we have opted for disabling it by default and let those users that need it manually enable it with the global option enable_procedural_cache. (#2937)
  • AiOrenNayarIntegrate() caching for shader networks: Just like we already do with AiIndirectDiffuse(), multiple calls to AiOrenNayarIntegrate() with the same arguments within a shader network will now be optimized so that the result is only calculated once and then reused. (#3004)
  • bumpdiff mode in the utility shader: The utility shader has a new value available for the color_mode parameter: bumpdiff. This will show how far the bump and autobump normals vary from the base smooth-shaded normals as a heatmap (blue is the same, going through green to red as varying up to 90 degrees away). This is useful for debugging the balance between subdivision iterations with displacement vs autobump making up for the rest. (#3002)
  • Log file improvements and cleanups: A number of minor annoyances in .log files have been fixed, and a number of messages have been made more helpful. For example: the "ray counts" section now mention the number of rays fired from SSS pointclouds which were previously not reported; the "render time" section now reports the time it takes to build the importance sampling tables for the skydome_light and quad_light nodes; the "subdivision done" message now more clearly reports the initial number of polygons and the final number of subdivided quads; the "displacement done" message now reports the number of vertices that were displaced; and the "loading metadata file" message now only appears with debug verbosity. (#3029)
  • Updated pykick: The Python version of kick has been updated so that it now has all the recent command-line options that were added in the C version of kick. (#2984)
  • Static RLM linking in Windows: To make things more consistent with Linux and OSX, we now statically link the RLM library in Windows too; we don't distribute the files rlm*.dll anymore. (#2982)

API additions

  • AiUDataGetNode(): User-data queries of type NODE are now supported. Recall that the NODE type is very similar to the POINTER type, with the only difference that an element of NODE type is guaranteed to point to an Arnold AtNode object rather than being a pointer to an arbitrary memory location. (#2771)

Incompatible changes

  • Changed AiLicenseGetInfo(): The AiLicenseGetInfo API has been changed so that it doesn't use std::vector, which is known to cause problems across compilers and compiler settings. The new safer API is: (#2826)
    AI_API int AiLicenseGetInfo(AtLicenseInfo*& licenses, unsigned int& n) 
  • Removed ARNOLD_DISPLACEMENT_DERIVS_HACK: This undocumented legacy environment variable is no longer necessary. (#2586)

Bug fixes



#2953shading artifacts in procedural networks with instances of proceduralsarnoldoscarcritical4.06 weeks
#2842Arnold crashing on unexpected camera shaderarnoldoscarmajor4.04 months
#2979Compute ray direction differentials for reflectionarnoldmikemajor4.04 weeks
#2983faceted artifacts in raytraced SSSarnoldalanmajor4.04 weeks
#2985Crash in AiEnd when using AiRender after an AiASSWritearnoldoscarmajor4.04 weeks
#2987Crash when aborting on license failarnoldoscarmajor4.04 weeks
#2989AiSampler() crashes when sample count is 0arnoldalanmajor4.04 weeks
#2993Tile boundaries incorrect for udim tagarnoldramonmajor4.03 weeks
#2994OS X compiled shaders do not loadarnoldramonmajor4.03 weeks
#2997Distant lights do not cast shadow rays in volumesarnoldramonmajor4.03 weeks
#2998random corruption of raysarnoldalanmajor4.03 weeks
#3000Improve numerical robustness of texture derivativesarnoldthiagomajor4.03 weeks
#3014missing Doxygen docs for AiASSWrite/AiASSLoadarnoldmarcosmajor4.02 weeks
#3016broken normal smoothing for NURBS primitivesarnoldoscarmajor4.02 weeks
#3017Compute ray direction differentials for refraction in standard shaderarnoldmikemajor4.013 days
#3021correlation artifact in indirectly sampled area lightsarnoldalanmajor4.09 days
#3027"ray counts" stats are missing SSS raysarnoldmikemajor4.05 days
#2977Memory leak in kick when setting the outputskickoscarminor4.04 weeks
#2996Texture Errors Should Report Filenamearnoldramonminor4.03 weeks
  • No labels