Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.



MultiExcerptName6.1 Enhancements
  • Imagers: An initial set of new post-processing nodes have been added to enable chaining of pixel effects before reaching the output driver. The new nodes are imager_exposureimager_color_correctimager_lens_effects, imager_white_balance and imager_tonemap. Imagers can be adjusted in IPR while the render is ongoing. Currently, adding a new imager requires the render to be restarted, so it's a good idea to add the ones you will need to adjust at the beginning of an IPR session. (#8368, #9716, #9723, #9724, #9867, #9868, #9869, #9938).



    Color Correct



    Lens Effects (vignetting)

  • Nested dielectrics: Physically correct reflection and refraction of rays in scenes with adjacent dielectrics, such as liquids in glass vessels, has been implemented by resolving overlapping, i.e. "nested", dielectrics via a priority system. This allows for more realistic renders of scenes such as glass containers with liquid contents and bubbles, correctly accounting for the change in the index of refraction as rays refract through the transparent media. The effect is enabled via the global toggle dielectric_priorities (which is enabled by default – disabling it reverts to the legacy mode which does not correctly compute the refractions). A new standard_surface parameter assigns a priority to the internal dielectric medium of the closed transparent object the shader is assigned to. These priorities specify that in an area of overlap of two transparent objects, only the highest priority dielectric medium exists (see the schematic glass of water below for the basic intuition). The priority is simply a signed integer (default 0), which can be increased or decreased as needed to define the dielectric medium in the overlap areas. If priorities are made equal, then media are effectively blended in the overlap. (#6023)

Standard setup of a glass of water with an ice cube, using the priority system




Image rollover

dielectric_priority: glass: 3, ice & bubbles: 2, liquid: 1.

Rollover image to view the result with the global dielectric_priority: disabled (not physically correct).

  • Improved performance on windows: You can now expect Arnold to run on average 7-8% faster on Windows. (#5481, #9876, #9975)
  • Better IPR interactivity: IPR interactivity on both CPU and GPU, especially when moving the camera in a scene with many nodes (thousands to millions of meshes, ginstances, lights, shaders, etc.), is improved. For instance, a scene with 24,433 ginstances and simple shading went from 8-fps to 14-fps on the CPU and about 3-fps to 20-fps on the GPU. (#8662, #9918, #10027, #10029)
  • Improved progressive and adaptive sampling: Better sampling results in faster noise convergence, especially with adaptive sampling enabled. (#9941)




    Both images rendered using the same settings: adaptive_threshold = 0.015 (default)

  • Toon AOV prefix : The toon shader has a new optional aov_prefix that will be prepended to the toon AOVs' names. For instance, if aov_prefix is "toon_", the toon diffuse AOV will be written out to "toon_diffuse". This can be used when you need to access both the toon AOVs and the core's LPE AOVs. (#9823)
  • Improved performance in Toon on Windows: The contour_filter used for toon rendering should now be faster and scale better especially on Windows (#7844)
 8 threads16 threads32 threads64 threads
  • AA seed now included in EXR metadata: The AA seed of a render is now also included in EXR metadata. (#9895)
  • Improved soft creases in adaptive subdivision: Normals for soft creases follow the geometry closer for low iterations. (#9971)

All cube edges have sharpness 3 creases. The diagram shows the new (top) and old (bottom) normals for 1, 2, 3, and 4 iterations.

GPU Enhancements

MultiExcerptName6.1 GPU Enhancements
  • Improved on-demand loading of textures: The GPU renderer can now partially load textures which results in important GPU memory savings. In a typical scene, the amount of memory needed for textures could be reduced to be up to 5x smaller. A recent driver is needed for this feature (#9984).

  • Initial support for light linking: Initial support has been added for light linking. Currently, there is a limitation that light linking is not supported on volumes. (#9890)
  • Support light AOV groups: Adding light AOV groups in LPEs is now supported on the GPU. (#9882)
  • Improved OSL JIT compilation performance: OSL JIT compilation performance has been improved, meaning faster time to first pixel and improved interactivity when using OSL shaders. (#10004)
  • Improved support for min pixel width and thin-walled sampling: We have improved compatibility with the CPU renderer for min pixel width on the GPU and thin-walled sampling on zero roughness surfaces. (#9291)
  • Partial GPU IPR output: Like on the CPU, when the FPS goes below a certain threshold (5fps by default), instead of not displaying anything, the GPU will at least display the pixels that have finished rendering. Since GPU currently renders pixels in a top to bottom ordering, this will result in the top part of the image being updated while the lower part becomes stale. (#10027)

USD Enhancements

MultiExcerptName6.1 USD Enhancements
  • Light Shaping: The procedural now supports the UsdLuxShapingAPI, allowing the use of spot and IES lights . (usd#344).
  • UsdTransform2d: The render delegate now supports the UsdTransform2d preview shader . (usd#516).
  • Per-face material assignments: The render delegate now supports per-face material assignments . (usd#29).
  • Render Stats: The Render Delegate now returns render stats via GetRenderStats. For now, this is used to show render progress in Solaris . (usd#537).
  • Schema for custom procedurals: The schemas now include ArnoldCustomProcedural for describing custom procedurals . (usd#487).
  • Schema updates: Schemas now support cameras, render settings, and new output types . (usd#500).
  • Parent Scope: There is a new flag to specify a custom root for all exported prims . (usd#292).
  • ST for Texture Coordinates: Texture coordinates are now written as primvars:st to match the USD convention . (usd#542).

API Additions

MultiExcerptName6.1 API Additions
  • AtParamValueMap: New AtParamValueMapClone function, along with support for array values using the new API AiParamValueMapSetArray and AiParamValueMapGetArray. (#9978).
  • Query total progress: Using the API, it is now possible to query the current progress for the frame using the total_progress render hint. The render hint returned will contain the percentage of work done for rendering across all the render passes . (#9976).
    float progress = 0;
    AiRenderGetHintFlt(AtString("total_progress"), progress);
  • Transforms in AiProceduralViewport : It is now possible to pass an optional matrix parameter to AiProceduralViewport this parameter will be recursively passed to procedurals and will ensure an object in the returned universe have the expected concatenated transform . (#9978).

Incompatible Changes

MultiExcerptName6.1 Incompatible Changes
  • mix_shader add for transparency: Previously, the add mode of the mix_shader also added the transparency closures, which means that effects such as min pixel width would be double-counted, leading to objects disappearing. Now, we will add only non-transparency closures, while we pass through the max of the transparency closures. The old behavior can still be obtained by setting add_transparency to true (#9952).
  • OptiX cache location change: The Optix cache directory used to be of the form: arnold-<ARNOLD_VERSION>_driver-<DRIVER_VERSION>. Now it is simply arnold. This means the same cache will be used across driver and Arnold versions. Upgrading to a new version will still likely cause a lengthy JIT/cache pre-population, but it will reduce disk usage as old versions will not stay around-consuming disk space. (#9239).
  • Skipped node updates: In order to improve IPR interactivity, we skip the per-frame node update if we believe that node has not changed. If our internal heuristics for detecting node changes is wrong and node_update was supposed to be called, you can set the force_update metadata on your node:
        AiMetaDataSetBool(nentry, nullptr, "force_update", true); // depends on camera node 
    so that Arnold will always run node_update on every render pass. At the moment, this should only be needed for nodes that access in their node_update. If you do not have access to your shader's source code, you can globally disable this optimization by setting the options.enable_fast_ipr to false (#8662).

Bug Fixes