Share

4.2.1.0 - Arnold User Guide

Milestone 4.2.1

September 8, 2014

Enhancements

  • EXR overscan support : Overscan is now supported by extending the render region beyond the regular image coordinates. E.g. a ten-pixel overscan for a 640x480 image in all directions can be achieved with options region_min_x,region_min_y,region_max_x,region_max_y of -10,-10,649,489. The old render region defaults of -1,-1,-1,-1 will continue to render the whole image, but new defaults (INT_MIN) are available going forward indicating the render region is not used. EXR output will fully respect the overscan region with differing data and display windows, but the other image formats will simply enlarge the final image resolution to incorporate overscan since they cannot accomodate data outside the display area of the image. (#3102)
  • Improved Cook-Torrance specular and refraction sampling : Many scenes will now render with significantly reduced noise for glossy reflection and rough refraction with the microfacet-based Cook-Torrance BSDF. In particular, BSDFs viewed at grazing angles or involved in multiple glossy or refraction bounces are improved. (#4064, #4196, #4209)
  • Improved sampling of textured quad lights : Quad lights now use a new sampling strategy that adaptively chooses the best sample distribution for each shading point. The noise reduction is most noticeable with textured lights, both on surfaces and in volumes. (#3567)
  • Automatic texture_max_open_files : The options.texture_max_open_files is now set by default to 0, which means that the maximum number of texture files that can be simultaneously opened is automatically computed by Arnold using a new heuristic. This now works for Windows, Linux, and OS X. We expect that the majority of users will be able to leave this at 0 and get the best performance. If Arnold runs out of file handles, Arnold is now more likely to be able to recover without crashing. If the automatic texture_max_open_files that is set is deemed too low, then texture_max_open_files can still be set manually. However, a better solution (and often the only solution) on Linux and OS X is to increase, in the OS, the open file handle hard limit. (#4139, #4140, #4141)
  • Improved performance for shadow ray texture lookups : For shades done to shadow rays (transparency), texture lookups now use less texture I/O. (#4167)
  • Improved performance for rough glossy texture lookups : This improvement was supposed to have been in 4.0.12, but due to a bug, it was never actually enabled in the AiBRDFIntegrate() function used by the standard shader. Shaders that were manually calling the older APIAiCookTorranceIntegrate() were never affected by this bug and have been able to use this improvement since 4.0.12. Now both AiBRDFIntegrate()and AiCookTorranceIntegrate() make use of this feature. Now that the standard shader finally has this feature, users should find that glossy reflections will pull the correct texture mipmap level across all distances while maintaining an optimal amount of texture sharpness. This can result in dramatic reductions in texture I/O and lessens the need for using the texture_glossy_blur option, which we now recommend setting to zero. Unfortunately, third party shaders that do their own integration and manual ray tracing (such as alSurface and Kettle) will not be helped by these fixes, something that we hope to address in a future version. (#4164, #4176)
  • Faster IPR when rendering with many textures : Time between IPR progressive frames has been decreased when there are many textures being used. This is especially evident when the textures reside on a high latency file server. (#4152)
  • Low-level optimizations : Several optimizations were made to improve performance. Some of these are most noticeable on linux and/or when rendering empty or low-complexity regions. (#4193, #4212, #4228, #4149, #1231)
  • Upgraded OIIO to 1.4 : This new version comes with many little improvements and bug fixes. For instance, processing a 54k-resolution TIFF file withmaketx on Linux is now 4.5x faster compared to the previous version. However, we now requires a manual texture flush in order for changes made to texture files be reflected inside of arnold. (#3593, #3646, #3826, #4154)

API additions

  • Python 3 support : The Arnold Python API and pykick are now fully compatible with Python 3, workarounds for module importing and unicode strings are no longer needed. (#4239)

Incompatible changes

  • Difference in microfacet BTDFs : Rough refraction viewed at grazing angles or using Phong-smoothed normals renders slightly darker now, especially for high roughness values. This affects the standard shader and AiMicrofacetBTDFIntegrate(), and fixes a bug in the previous BTDF sampling. (#4196, #4231)
  • Handling of unassociated alpha for TGA and PSD : OpenImageIO 1.4 has more conformant handling of unassociated ("unpremultiplied") alpha in TGA and PSD files. This results in improved texture filtering for typical files, but may also cause TGA files that are missing the appropriate metadata to render darker.

Bug fixes

Ticket Summary
#3998 Writing an .ass with open procedurals will not preserve overrides
#4158 Indirect from volumes in SSS is extremely noisy
#3183 OIIO cache refuses to close texture files
#3355 Overridden opaque attribute on procedural not written out
#3605 extreme anisotropy in Cook-Torrance BRDF produces black
#3624 Calling AiUniverseCacheFlush(AI_CACHE_TEXTURE) outside AiBegin / AiEnd crashes
#3674 OIIO locking texture files between renders on windows
#3823 deepexr driver crashes in tiled mode
#3867 OIIO does not check validity of image SHA
#3893 light_gamma is not applied to skydome_light color
#4068 utility shader unconditionally overwrites opacity when opaque flag is off
#4119 faceting in Cook-Torrance and Ward-Duer speculars
#4123 NaNs in bump mapping when Ns and N differ very slightly
#4126 make backtrace handler more resilient to errors
#4130 zero-length or NaN tangents causing artifacts in Cook-Torrance and Ward-Duer MIS functions
#4131 Zero roughness crashes AiCookTorranceIntegrate
#4134 crash with non-existent procedural path and AI_RENDER_MODE_FREE
#4137 null tangent vectors potentially causing crashes in Cook-Torrance and Ward-Duer
#4142 Don't crash if OIIO runs out of file handles
#4144 Crash after cloning shader with linked array parameter
#4147 Support user data for mesh light texture
#4159 AiShaderGlobalsGet*() hang if called during displacement
#4160 Volume node should adjust rays to local space
#4161 Wrong AtPoint2 constructor in Python bindings
#4163 robustness fixes in OBJ procedural loader
#4164 excessive texture I/O in cook-torrance blurry reflections in standard shader
#4171 Sampling position offset should be object space in density shader
#4181 Interactive creation of an object in an empty scene does not work
#4183 Spherical quad sampling converges a different result than area sampling in quad_light
#4184 Enable tiled Deep EXR output
#4186 driver quantization API functions overflow with large float values
#4187 skydome_light crash in IPR and corruption with per-component linked color
#4190 Wrong shadow when using utility shader to modulate opacity of an object
#4194 crash when reporting error before the options node was initialized
#4198 Sky image texture returns NaN when looking at poles
#4205 Degenerate linear or curved motion transforms can cause crashes
#4211 Removing a node with unsolved references causes a crash
#4213 bump2d shifts with highly scaled UV coordinates
#4214 AiNodeGetArray/Matrix returns wrong matrices on instances
#4215 Deep EXR driver crash when reused in the same session
#4222 Shadow precision artifacts with lights with visible geometries
#4231 Microfacet refraction has sharp total internal reflection
#4240 SSS invalid or crashes on non-polymesh objects
#4244 Camera exposure affecting AOV alpha channels
#4251 Skydome interactive enable/disable not working
#4252 Don't write 'options' node default values to .ass file
#4157 Need to warn when passing empty filename as texture name
#4192 Cannot set metadata for "node" parameter on an .mtd file

Was this information helpful?