Versions Compared

Key

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

Milestone 3.1.1

Enhancements

  • Indirect irradiance caching for shader networks: Multiple calls to AiIndirectDiffuse() within a shader network will now be optimized so that the result is only calculated once and then reused. (trac#1307)
  • Smaller .ass files: Vertex lists and other arrays of floats are now written to .ass with 8 decimal digits instead of 16. The size of a typical .ass file is almost cut in half, with no loss of precision. (trac#1684)
  • Generic display driver: A new node called driver_display is provided for the convenience of client applications. This driver has a callback mechanism that can be used to implement visualization of Arnold rendering for any target platform (Maya, XSI, OpenGL, etc). Because this driver encapsulates a lot of the "boiler plate" code needed for visualization drivers, it is generally much easier to use this rather than writing a custom display driver from scratch every time. It is also much cleaner to use this driver when the host application is written in a language other than C/C++ (such as Python). (trac#1702)

API additions

  • Python bindings: Python bindings are now provided for the majority of the Arnold API. They provide a one-to-one mapping from Python to the Arnold C API, keeping the same names for types and functions. The kick tool has been rewritten in Python using these bindings (trac#1671), and is included in the Arnold distribution as an example on how to use them. See the README.python file for more information on how to use these bindings. Here is the minimal application to render an .ass file: (trac#1655)
    from arnold import *
    
    AiBegin()
    AiASSLoad("test.ass")
    AiRender(AI_RENDER_MODE_CAMERA)
    AiEnd()
    
  • Scene node iterator: These new functions allow iterating over all or a subset of the scene nodes. (trac#1703) Here is a usage example:
    AtNodeIterator *iter = AiUniverseGetNodeIterator(AI_NODE_ALL);
    while (!AiNodeIteratorFinished(iter))
    {
       AtNode *node = AiNodeIteratorGetNext(iter);
       // do something with the node here ...
    }
    AiNodeIteratorDestroy(iter);
    
  • AiMsgUtilGetUsedMemory(), AiMsgUtilGetElapsedTime(): These functions provide access to elapsed frame time and used memory, so that custom log callbacks can have the same memory and timestamp information as the default log output. (trac#1698)

Bug fixes

  
1656potential crash in BVH traversal
1669AiMsgError is incorrectly limited by max warnings setting
1695remove 'faces' stats in triangle tesselation
1707TIR rays should be tagged as AI_RAY_REFRACTED
1700arnold scene rebuilding can crash with very simple hierarchies
1685spatial correlation in SSS pointcloud sampler
1684float vertices written to .ass with too many digits
1679user-data of type 'byte' doesn't work
1672Arnold reports the wrong memory size for systems with more than 4GB in Windows