Milestone 4.0.2


  • Multi-threaded displacement: When two or more buckets require the result of a mesh displacement in order to continue they may now collaborate in the displacement computation to speed it up when the enable_threaded_displacement render option is active (default ON). (#2212)
  • Displacement of un-subdivided meshes: It is no longer required to set polymesh.subdiv_type to other than none before displacing a polygon mesh. This is useful for dense meshes that already have enough polygons to capture the detail in the displacement map. (#2212)
  • Per-face displacement shaders: polymesh.disp_map has been changed from an AtNode parameter to an array of AtNode's. So now, not only does it accept a NULL or a single shader as input, but also an array of displacement shaders. Please note that when it contains more than one shader,polymesh.disp_map will share the indexing scheme provided by polymesh.shidxs and as a result must have the same number of elements as polymesh.shader. (#2669)
  • Faster abort during displacement and ray accel build: The renderer will now more frequently poll for a render abort condition during both displacement and ray accel builds, which increases interactivity when working with big meshes and high subdiv settings. (#2709, #2710)
  • Faster scenes with many lights: Scenes with thousands of lights cause quite long render times simply due to the time it takes to loop over the lights themselves. Some of those lights probably won't have any influence for a given shading point. We have introduced an acceleration structure to classify the lights by their volumes of influence and then loop over the important lights only. sg->lights and sg->nlights no longer return all the lights in the scene, and instead they now return the (hopefully small) set of lights which can have any influence in sg->P. The speedup will depend on both the number of lights and the number of overlapping influence volumes. We have seen speedups of 1.5x in empty scenes with 4 sparse lights all the way up to 20x in empty scenes with a few hundred sparse lights. (#2542, #2543)
  • New nlights color mode in utility shader: The nlights mode shows the relative number of lights considered at the shading point, which is helpful when debugging scenes with many lights. This is visualized with a "heatmap" color gradient that goes from red (all lights in the scene are considered), passing through yellow and green, to blue (very few lights are considered) and finally black (no lights considered). (#2664)
  • Auto-cropped EXR output: We now optionally embed DataWindow information when saving EXR files. This data window, or ROI in Nuke, stores a tight bounding box around non-empty pixels in the image, which can greatly accelerate post-processing. To enable this feature, use theautocrop attribute in the driver_exr node (default OFF). (#2660)
  • Removed default node name: When creating a new node, instead of this node receiving a default name based on a combination of timestamp, node type and count, etc... we now just give the node an empty name. This results in memory savings and speedups when loading or writing .ass files. (#2649)
  • Better info messages for licensing: We have updated the warning messages for the licensing subsystem, making them more informative. This also includes messages coming from the kick -licensecheck command. (#2638, #2657)
    • No server running:
      00:00:00    5MB WARNING | [rlm] could not connect to license server on 5053@localhost
    • Wrong license version:
      00:00:00    5MB WARNING | [rlm] wrong license version, found 1 license for arnold 303
      00:00:00    5MB WARNING | [rlm] please contact
    • Expired license:
      00:00:00    5MB WARNING | [rlm] could not find any license for arnold 400, the license may be expired
      00:00:00    5MB WARNING | [rlm] please contact
    • No license files:
      00:00:00    5MB WARNING | [rlm] could not find any license files, please check the license server
    • Up-to-date license file:
      00:00:00    5MB         | [rlm] checkout of arnold (version 400) OK

API additions

  • AiArrayInterpolateRGB/RGBA(): In Arnold 4.0.0 we introduced several AiArrayInterpolate*() functions but we somehow forgot the RGB and RGBA versions. (#2666)

Incompatible changes

  • Transfer control about aborting on texture error to the calling code: By setting a valid pointer for the return (success) value in AiTextureAccess(), the current error message is disabled and the render process is not aborted. It is left for the client code to handle the error as appropriate. (#2671)
  • Deprecated some 2D vector functions: The old-style AiV2Add, AiV2Sub and AiV2Scale functions have been deprecated, the operators +, -, * should be used instead. The signature of the AiV2Lerp and AiV2Clamp functions has changed so that they return a value directly rather than through an argument; the old-style functions have been kept for now but marked as deprecated. (#2648)
  • disp_height no longer affects displaced mesh bounding box: Both disp_height and disp_padding are separate and independent now. The former sets scale for displacement, while the latter extends the bounding box. If disp_height is set without setting disp_padding, it could result in clipping of the displaced mesh. (#2722)

Bug fixes



#2678arnold 4 and auto_transparency_thresholdarnoldalanblocker3.33 weeks
#2656always_linear metadata doesn't work when writing to .assarnoldangelcritical3.35 weeks
#2659Weird shadowing with transformed instances of proceduralsarnoldoscarcritical3.35 weeks
#2662Halo artifacts with 'importance_sampling' in 'volume_scattering'arnoldoscarcritical3.35 weeks
#2665Bug when writing to .ass shaders with component linksarnoldangelcritical3.34 weeks
#2479Some geometry in procedurals with SSS is not renderedarnoldoscarmajor3.34 months
#2641Threading Issue when generating SSS pointcloudsarnoldoscarmajor3.36 weeks
#2646intersection precision problems in cone primitivearnoldoscarmajor3.36 weeks
#2652Handle ABS(int)arnoldthiagomajor3.35 weeks
#2655Linking to a component in an array element not workingarnoldangelmajor3.35 weeks
#2661missing Doxygen docs in AiSSSEvaluateIrradiance()arnoldthiagomajor3.35 weeks
#2675missing return value from AiRender() function in Python bindingsarnoldangelmajor3.33 weeks
#2676missing return value from AiASS*() functions in Python bindingsarnoldoscarmajor3.33 weeks
#2677Bad composition of inverse XForm matrices in procedural networksarnoldoscarmajor3.33 weeks
#2680Memory leak on array element linkingarnoldangelmajor3.33 weeks
#2681Wrong shader override in instanced procedural networksarnoldoscarmajor3.33 weeks
#2682Wrong xform matrix recovering in instanced procedural networksarnoldoscarmajor3.33 weeks
#2683missing return value from AiNodeGetLink() function in Python bindingsarnoldangelmajor3.33 weeks
#2685AiFormatTime() is not thread-safearnoldmarcosmajor3.33 weeks
#2698IPR memory leak in utility node in ambocc modearnoldangelmajor3.32 weeks
#2701Nodes with empty names cause problems when saving to .assarnoldangelmajor3.310 days
#2704AI_LOG_SSS missing from python bindingsarnoldangelmajor3.38 days
#2711Misaligned temporary SIMD variables in MSVC cause memory crashesarnoldxomajor3.34 days
#2713Gamma is not being applied to RGB(A) array elementsarnoldangelmajor3.33 days
#2714log memory stamps shift by 1 above 10Gbarnoldmarcosmajor3.33 days
#2715wireframe returns black in indirectarnoldmarcosmajor3.33 days
#2679P color mode in utility shader is brokenarnoldoscarminor3.33 weeks
  • No labels