Milestone 4.2.13.0
Enhancements
- SSE4.2 optimizations: We have raised our minimum CPU requirements from CPUs needing to support the SSSE3 instruction set to SSE4.2. This allows us to start taking advantage of the additional SSE4 instructions to further optimize Arnold. Already we are seeing a slight speedup in several areas. For instance, the Hosek Sky shader is now 5% faster. (#2625, #5051, #5053, #5056)
- Faster OpenVDB motion blur: Rendering of motion blur on CPUs with many threads is now faster. The speedups depend on the specific scene and the CPU, but we have often seen 2x faster, and even 10x faster in some cases. Additionally, rendering of OpenVDB files with separate velocity grids for the XYZ components is now also up to 2x faster, so that merging the grids into a single vector velocity grid is no longer required for good performance. Merging the grids in advance still helps to make the file loading a little faster. (#5103)
- Faster gobo shader: The number of shader evaluations in the gobo light filter has been greatly reduced. We are seeing 20% faster renders in simple scenes with a light and a gobo. (#5070)
- Faster textures: AiTextureAccess() is now much closer (though still not equal) in performance to AiTextureHandleAccess(). We have also made AiTextureHandleAccess() faster in certain situations. (#3192, #3699, #5069, #5068)
- Default texture cache size increased to 2GB: The default setting for options.texture_max_memory_MB has been increased from 1GB to 2GB. This can help improve performance on texture heavy scenes. (#5101)
- Quad and disk light spread: Quad and disk lights can now emit light focused in the direction along the normal. The default spread value of 1 gives diffuse emission, while lower values focus the light more, until it becomes a laser like beam at value 0. Low spread values can be noisier than the default high spread, so be careful when using them. (#5119)
- Photometric light radius: Photometric lights now include a radius parameter with which softer shadows may be obtained in a manner similar to point lights or spot lights. Defaults to 0, which matches this light's original behavior. Note that IES files only store far-field photometric values, so it's meaningless to use them with area lights, and abusing the new radius parameter can make things look strange. The intent of adding this radius is to achieve slightly soft shadows rather than razor sharp shadows in a manner that is acceptable for VFX use. (#5121)
- More shader parameter conversions allowed: It is now possible to link a shader that outputs a float to a shader that takes in an integer type and vice versa. Likewise, several other useful types of conversions are also now allowed. (#5058, #5095)
- Deep EXR driver support for append / checkpointing: driver_deepexr now supports append on to skip rendering buckets that were saved in a previous interrupted render. Currently this only works for tiled mode, not scanline. Note that since Nuke only works with scanline deep files, if your output deep files are tiled you will have to convert them with oiiotool input_tiled_deep.exr --scanline output_scanline_deep.exr (#4863)
- Improved deep EXR driver support for volumes: Deep volumes are now written with higher precision using less samples, which results in much more accurate and smaller deep EXR files, with size savings of 50 to 75%. (#5102, #5113, #5114, #5120, #5135)
- Fewer warnings: A number of pedantic warnings have been removed in order to declutter log files: nonexisting shader paths, camera matrix overriding handedness, deprecated RGB AOV, empty polymesh node, UV array compression, ignoring mesh with all faces invisible, user normals on subdivs, too many messages of given type. (#5042)
- Watermarks for shaderballs: Shaderball previews in our plugins (e.g. MtoA) no longer show the "arnold" watermark. (#5074)
- Updated to RLM 12.0BL2: We have upgraded the license server and the external library controlling the licensing subsystem from version 11.3BL1 to 12.0BL2, a more stable release fixing various crashes, bugs, hangs and memory leaks. (#5014)
API additions
- AiNodeGetParent(): Return the AtNode* procedural (i.e. the parent node) that created the input node. (#5004)
- AiParamTypeConvertible(): Added API function to determine if a parameter src_type can be converted into the dst_type parameter. (#5097)
- AiMsgGetLogFileFlags(): Added AiMsgGetConsoleFlags() and AiMsgGetLogFileFlags() API functions to get the currently set logging flags. These now match the corresponding AiMsgSetLogFileFlags() and AiMsgSetLogConsoleFlags() API functions (#5109)
- UVs in quad light filters: Light filter shaders on quad lights can now use sg->u and sg->v to retrieve the UV coordinates on the surface of the quad light. (#5122)
Incompatible changes
- Require SSE4.2 CPU: We now require CPUs that support (at least) SSE4.2 instructions. On older computers that do not support these instructions, Arnold will inmediately abort on startup. (#2625, #5053)
- Internal reflections in standard shader: The enable_internal_reflections parameter previously did not ignore all internal reflections, and incorrectly ignored some other reflections, which is now fixed. (#5136)
- Specular roughness: When using very low or zero roughness in the standard shader or microfacet API functions, reflections will be sharper than before, where previously they were too blurry. (#5067)
Bug fixes
Ticket | Summary |
---|---|
#2654 | Implement a more robust ray-cone intersector |
#3699 | Filtered texture result cache slows down evaluation in corner cases |
#5027 | AOVs of type AI_TYPE_NODE do not work |
#5028 | shader AOV does not work |
#5033 | Deep EXR light AOVs crash |
#5034 | Bump should work regardless of UV quality |
#5035 | Deep EXR light AOVs not composed correctly |
#5039 | Problems when first element in the list of disp_map shaders is NULL |
#5041 | Incorrect deep EXR render with matte surfaces behind volumes |
#5046 | Light AOV name change to use '_' instead of '.' as separator |
#5054 | Crash when comparing compressed arrays |
#5064 | Incorrect subdivision for soft creases on boundaries |
#5067 | Standard shader with specular roughness zero is not perfectly sharp |
#5071 | textures with empty filenames should be an error |
#5078 | Misleading warnings when loading invalid volume and procedural DSOs |
#5083 | UDIMs with linked UVs or custom uv set are using wrong UDIM column |
#5086 | Wrong transparency in front of opaque matte surfaces |
#5091 | NaNs in Ward-Duer and stretched Phong BSDF sampling weights due to division by zero |
#5092 | cached indirect diffuse values are incorrect |
#5096 | rectangular quad light check is overly aggressive |
#5099 | Improve sample merging for deep volumes |
#5102 | Deep volume output accuracy should not worsen with more AA samples |
#5108 | Procedurals create duplicate objects |
#5129 | Gobo light filters connected to a float slidemap result in red colors |
#5132 | crash when rendering large un-tiled EXR images |
#5134 | Bad texture derivatives in rare cases from sphere objects |
#5136 | Standard shader enable_internal_reflections not working for specular |
#5057 | missing ai_shaderglobals.h include |