Versions Compared


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

Milestone 3.3.6


  • Adaptive specular roughness clamping: Clamping all specular reflections with the same minimum roughness after the first bounce greatly reduces the amount of fireflies in the final image due to reflective caustics, but can cause what should be mirror-like glossy reflections to become visibly blurred. A new adaptive technique has been implemented that will keep these reflections sharp when seen through other glossy reflections. (trac#2201)
  • Glossy refraction in the standard shader: A new parameter called refraction_roughness has been added to the standard shader allowing it to simulate microfacet-based glossy refraction effects. This parameter ties in to the IOR parameter to control the effect, causing refraction through rough surfaces with high IOR to appear blurrier than smooth surfaces with low IOR. The number of samples is controlled by the new GI_refraction_samples render option. (trac#2016)
  • RPATH points to $ORIGIN in Linux: On Linux systems, the RPATH binary header in libai is now hardcoded to $ORIGIN. This makes libai to always link first with libraries residing in the directory where libai itself is located, avoiding loading libraries with mismatched versions that may be reached through the LD_LIBRARY_PATH environment variable. It is now ensured that libai will be linking with the libraries deployed in the official Arnold package as both libai and its dependencies are located in the package directory tree. Therefore we encourage users not to relocate the Arnold binaries outside the <arnold_root_dir>/bin directory. (trac#2135)
  • OIIO headers and libraries: We now distribute the OpenImageIO headers and Windows .lib file for the same exact version of OpenImageIO that Arnold is linking with. For shader writers and developers who need to link to OIIO in their own code, this makes it easier to always be in sync with Arnold and avoid versioning conflicts. (trac#2089)
  • License diagnostic mode in kick: A new option, -licensecheck [<port>@<host>], has been added to kick. This allows you to check the status of the license server and to retrieve the number of "total" and "in-use" licenses. Below is a usage example. (trac#2144)
    $ kick -licensecheck
    Connecting to license server on 5053@localhost ... OK
    product:           arnold
    version:           303
    expires:           permanent
    total licenses:    1
    inuse:             0
    timeout:           240
    minimum timeout:   120

API additions

  • AiNodeDestroy(): This new API function allows you to destroy a node, releasing all of its associated memory allocations, which can be used to remove a node from the scene (as long as a render is not in progress). (trac#2202)
  • AiMicrofacetBTDFIntegrate(): This new API function implements the glossy refraction effects now available in the standard shader. Please note that, although anisotropic refraction is not yet implemented, we decided to "future proof" this API and request UV tangent vectors and two separate roughness values; for now, just pass NULL as the tangent vectors and pass the same value for both roughness values. (trac#2016)
    AI_API AtColor AiMicrofacetBTDFIntegrate(const AtVector *N, AtShaderGlobals *sg, const AtVector *u, const AtVector *v, AtFloat rx, AtFloat ry, AtFloat eta_i, AtFloat eta_o, AtColor transmittance);
  • Python binding for AiNodeClone(): When this API function was introduced, it missed the corresponding Python binding. (trac#2204)
  • Set/Get license server: New API functions have been added in order to programmatically set and get the port and hostname where the license server is located. The hostname and port set by AiLicenseSetServer() overrides the use of the values configured in the environment variablesARNOLD_LICENSE_HOST and ARNOLD_LICENSE_PORT. (trac#2103)
    AI_API AtBoolean AiLicenseSetServer(const char* host, unsigned int port);
    AI_API AtBoolean AiLicenseGetServer(char* host, unsigned int& port);
  • License status query: A new API function has been added to check the connection to the license server, check the RLM service (and the existence of available licenses in the server), and get information about all the installed/inuse licenses in the server. (trac#2200)
    AI_API AtInt AiLicenseGetInfo(const char* host, unsigned int port, std::vector<AtLicenseInfo>& licenses);

Incompatible changes

  • Renamed focal_distance to focus_distance: We have decided that it makes more sense to call this camera control focus_distance since that more accurately describes its functionality. "Focal distance" was sort of a mix between "focal length" (which has a well defined meaning in optics) and "focus distance". Note that the old name is still supported, at the cost of a "deprecated synonym" warning, so strictly speaking this is not an incompatible change yet. (trac#2220)
  • Hidden internal symbols in linux: We were previously exposing internal Arnold symbols in Linux, which could cause symbol collisions with other applications (e.g. Katana). We now only export symbols which are explicitly and properly marked in the public Arnold header files with theAI_API prefix. (trac#1966)

Bug fixes



#2199specular roughness clamp is brokenarnoldalancritical3.34 weeks
#2194specify which shader global vectors are unnormalizedarnoldalanmajor3.34 weeks
#2196Crash on OSX 10.5 with 'kick -info'arnoldoscarmajor3.34 weeks
#2203Arnold Python bindings broken on MacOSXarnoldoscarmajor3.32 weeks
#2205Missing AiColorCorrupted for AtRGBA typearnoldangelmajor3.32 weeks
#2207crash when switching off/on `skip_license_check`arnoldoscarmajor3.32 weeks
#2218failed bucket writes should abort the renderarnoldmarcosmajor3.39 days
#2219displacement padding should not be ignored for deformation motion keysarnoldmarcosmajor3.39 days
#2225Procedurals don't recognize .ASS and .OBJ uppercase file extensionsarnoldoscarmajor3.36 days
#2233quad_light importance map memory is not reported correctlyarnoldmarcosmajor3.34 days