Milestone 3.3.10


  • Improved sampling of the skydome_light with diffuse shading: The MIS technique will now also be applied to the diffuse component of the standard shader when lit by skydome lights. This can result in a great reduction in noise in some cases, particularly for scenes lit by skydome lights that have low contrast maps applied. Note that this change also applies to all shaders that use the Oren-Nayar MIS API. (trac#2338)
  • Optimized skydome_light and textured quad_light importance sampling: Shader color values for precomputing importance sampling are now stored alongside the importance table in a table of equal size. Using this table for lighting gives a dramatic speedup over re-evaluating the shader, particularly if the attached shader is expensive to evaluate. 2x and even 4x speedups are not uncommon. In most cases, the quality difference of this re-sampling is unnoticeable, and diminishes as skydome_light.resolution and quad_light.resolution increases. This feature can be disabled by setting enable_fast_importance_tables to off. (trac#2342)

API additions

  • Metadata flag for non-linkable parameters: Node parameters can be explicitly flagged as non-linkable by setting the following boolean metadata to false:
       AiMetaDataSetBool(mds, "parameter_name", "linkable", FALSE);
    Attempts to use AiNodeLink() on a parameter that has been flagged as non-linkable will produce a warning but otherwise have no effect. (trac#2341)
  • Application defined string: Client applications, such as the Maya and Softimage plugins, are now allowed to pass a descriptive string to Arnold using the following API function:
    AI_API AtVoid AiSetAppString(const char *appstr);
    The app string will be printed in the output log and in the header of exported .ass files, which can greatly help developers when debugging customer scenes. We have also provided a corresponding Python binding. (trac#2337)

Incompatible changes

  • Renamed GI_direct_lighting to ignore_direct_lighting: The ignore_direct_lighting option makes more sense alongside the other ignore_* options because it is mainly used for troubleshooting. Note that this flips the meaning of the option, so it is an incompatible change, not a simple rename. Along with the renaming, the -dd option in kick and pykick has also been changed to -idirect. (trac#2335)

Bug fixes



#1268default auto-naming of nodes is not thread-safearnoldxomajor2.332 years
#2344Race condition in importance table initializationarnoldxomajor3.36 weeks
#2345AiNode (node creation) function is not thread-safearnoldxomajor3.36 weeks
#2346Data race in string pool addarnoldxomajor3.36 weeks




#2355SSS pointcloud build crashes on disjoint meshes3.3.10.1arnoldxomajor3.3.11
#2359Livelock in SSS pointcloud building3.3.10.1arnoldxomajor3.3.11




#2361SSS pointcloud building causes render to hang3.3.10.2arnoldoscarmajor3.3.11
#2375Aborting when constructing SSS pointclouds causes render to crash/hang3.3.10.2arnoldoscarmajor3.3.11
  • No labels