Share

5.6.0.100 - Arnold for 3ds Max

29 March 2023

MAXtoA 5.6.0.100 is a feature release using Arnold core 7.2.0.0. Main new features are support for color management, 3ds Max compounds, and the 3ds Max material switcher.

Installation

Enhancements

  • Support for 3ds Max 2024: MAXtoA 5.6.0.100 is the first version to support 3ds Max 2024.

  • Support for 3ds Max 2024 Color Management: MAXtoA now passes on all color management information from 3ds Max to Arnold for rendering by handing over the entire OCIO configuration for rendering. (MAXTOA-1481).

  • Arnold Render View supports Max 2024 Color Management: Arnold Render View now shows menus for the view transform, plus obeys and automatically updates itself to any changes in 3ds Max Color Management settings. (MAXTOA-1502)

View Transform menu set to ACES 1.0 SDR-video (sRGB). Color Management enabled in Preferences.

  • Arnold Render View updates: ARV has been updated to the latest version. (MAXTOA-1507)

  • Arnold Image Node supports more color spaces: In earlier versions the Image node was limited to "auto", "linear", "sRGB" and "ACESCg" color spaces, and it was stored as an integer parameter with values from 0 to 3. This is now changed to a string parameter, and the provided choices are the color spaces defined in the OCIO configuration. When loading old files, the old integer value is automatically upgraded to its matching string value. (MAXTOA-1519)

Color Space options in image shader

  • Support for 3ds Max 2024 Compounds: MAXtoA can properly traverse the new 3ds Max 2024 Compound object, and Compounds can be used seamlessly. (MAXTOA-1501)

  • Support for 3ds Max 2024 Material Switcher: MAXtoA supports the 3ds Max 2024 Material Switcher. (MAXTOA-1484)

  • LatLong is now the default mapping in the SkyDome light: The default projection mode was changed to LatLong.

  • Disable sky in physical_sky: In addition to the preexisting enable_sun parameter, the physical_sky shader now also has an enable_sky parameter for disabling the sky. (ARNOLD-12584)

  • Colorspace included in TX filename: AutoTX-generated files now include the original extension and the texture and rendering color spaces in the filename. For example, running AutoTX on my_texture.jpg with an sRGB color space and ACEScg rendering color space would produce: my_texture_sRGB_ACEScg.jpg.tx. Textures that are not supposed to have colorspace changes get the tag raw, such as my_texture_raw.jpg.tx. (ARNOLD-11919)

  • Faster node init/update: The node init and update time is now faster. We have seen speedups of up to 20%. (ARNOLD-12870)

  • Improved many-core volume scaling: Rendering performance of volumes has been improved on certain many-core machines. The Disney cloud on a dual Intel Xeon Linux machine (56 total logical cores) now renders 1.4x faster. (ARNOLD-13004)

  • Support up to 1024 CPU cores: AI_MAX_THREADS has been increased from 256 to 1024, which allows Arnold to now create up to 1024 threads for full CPU utilization on machines with up to 1024 cores. (ARNOLD-11015, ARNOLD-12967, ARNOLD-12997)

  • Instancer light linking: If a light is linked to a shape and both are instanced, then the instancer now preserves this link within instances. This means the first light instance is linked to the first shape instance, the second light instance to the second shape instance and so on. (ARNOLD-12929)

  • polymesh.smoothing defaults to true: The default setting for polymesh.smoothing (smoothed normals) is now true across the core and plugins. Previously it was disabled in the core and only some plugins. (ARNOLD-11688)

  • Remove warning about using tiled with deep_exr: We no longer warn about using tiled with deep_exr. (ARNOLD-12887)

  • Improved many-core OCIO performance: Rendering performance when using OCIO has been improved (for example when using 8-bit textures, textures in a different colorspace to the rendering colorspace and not using AutoTX, or shading operations that require colorspace transforms). This can result in an up to 20% reduction in rendering time especially when using multi-socket systems. (ARNOLD-12912)

  • Better autobump visibility masking: We can now also disable autobump on camera and shadow rays. These used to be treated as always enabled. For scenes with non-opaque objects, disabling autobump on shadow rays can give up to a 50% speed up, usually without changing the look. (ARNOLD-8863)

USD Enhancements

  • MaterialX displacement shaders: MaterialX displacement shaders are now interpreted correctly. usd#1366

  • Arnold shader metadata: We now register all Arnold shader metadata in the Sdr registry. Before only the Help and Role metadata were passed to the registry. usd#1390

  • AutoTX environment variable: HDARNOLD_auto_generate_tx can be set to override the default AutoTX behavior in the render delegate. usd#1353

  • Driver options in the RenderProduct primitive: It is now possible to set the driver options in the RenderProduct primitive using attribute names prefixed with the driver name in the Arnold namespace. For example arnold:driver_jpeg:quality will set the quality when rendering with the jpeg driver. usd#1346

API Additions

  • Load/Read, Write, and Resize image API changes: The Image API functions introduced in 7.1.4 now also take an optional AtParamValueMap so that in the future we can add or change parameters to these functions without breaking the API. Currently there are no parameters these functions expect. Additionally, AiLoadImage() has been deprecated and replaced with the more appropriately named AiReadImage(); functionally they do the same thing. (ARNOLD-12937)

     bool AiReadImage(const char* filename, const uint8_t format, AtImage& image, AtParamValueMap* params = nullptr);
     bool AiWriteImage(const char* filename, const AtImage& image, AtParamValueMap* params = nullptr);
     bool AiResizeImage(const AtImage& inImage, AtImage& outImage, AtParamValueMap* params = nullptr);
  • Specify connected inputs in AiMaterialxGetOslShaderCode: The new optional connected_input parameter enables client code to specify input connection on a MaterialX node reference. This is needed for Geometry Property input connections like UV coordinates, to prevent them from being removed from the generated OSL code. (ARNOLD-12712)

  • New API to get the name of the TX file generated for a given texture: TX file names now include the color spaces and the extension of the original file, so we added AiTextureGetTxFileName to allow client code to get the exact name of the generated TX file. (ARNOLD-12970)

     AtString AiTextureGetTxFileName(const char* filename, AtString texture_color_space, AtString render_color_space, const AtUniverse* universe);
  • Enable/disable crash handler for the session: The new function AiSetSystemHandlers() and the environment variable ARNOLD_SYSTEM_HANDLER_MASK allow users to mask the Arnold built-in system handlers. The supported masks are listed in AtSystemHandlerMask and allow all handlers to be enabled or disabled. (ARNOLD-13014)

Incompatible changes

  • Arnold 7.2.0.0 breaks binary compatibility: Shaders, procedurals, and other plugins compiled against older versions of Arnold are not compatible with this version of Arnold and need to be updated and recompiled.

  • Autodesk Network Licensing version : Arnold 7.2 switches to ARNOL_2024 licensing.

    • Single-user subscriptions will work with Arnold 7.2. The plugin installers automatically register the new version. If you do not use a plugin, then after you download Arnold, open the Arnold License Manager and click Register.
    • Existing network licenses will not work with Arnold 7.2. Log on to your Autodesk account to generate your new ARNOL_2024 licenses.
    • Autodesk Network License Manager (NLM) servers must be updated to version 11.18.
  • AiLoadImage: AiLoadImage() has been deprecated and replaced with the more appropriately named AiReadImage(); functionally they do the same thing. (ARNOLD-12937)

     inline AI_DEPRECATED bool AiLoadImage(const char* filename, const uint8_t format, AtImage& image)
     {
        return AiReadImage(filename, format, image, nullptr);
     }
  • Removed deprecated functions: The following previously deprecated functions have now been removed. (ARNOLD-12938)

     // replace with init() as there is no benefit to specifying an init bound
     void AtBBox::init(float bound);
    
     // replace with AtMutex
     void AiCritSecInit(AtCritSec* cs);
     void AiCritSecInitRecursive(AtCritSec* cs);
     void AiCritSecClose(AtCritSec* cs);
     void AiCritSecEnter(AtCritSec* cs);
     void AiCritSecLeave(AtCritSec* cs);
    
     // Replace with variants that specify the universe or render session
     int AiDeviceSelect(AtDeviceType device_type, const AtArray* device_ids);
     int AiDeviceAutoSelect();
     AtDeviceType AiDeviceGetSelectedType();
     const AtArray* AiDeviceGetSelectedIds(AtDeviceType device_type);
    
     int AiASSWrite(const char* filename, int mask = AI_NODE_ALL, bool open_procs = false, bool binary = true);
     int AiASSWriteWithMetadata(const char* filename, int mask = AI_NODE_ALL, bool open_procs = false, bool binary = true, const AtMetadataStore* mds = NULL);
     int AiASSLoad(const char* filename, int mask = AI_NODE_ALL);
    
     void AiMsgSetLogFileFlags(int flags);
     void AiMsgSetConsoleFlags(int flags);
     int AiMsgGetLogFileFlags();
     int AiMsgGetConsoleFlags();
    
     AtNode* AiNode (const AtString nentry_name, const AtString name = AtString(), const AtNode* parent = NULL);
     AtNode* AiNodeLookUpByName (const AtString name, const AtNode* parent = NULL);
     AtNode* AiNode (const char* nentry_name, const char* name = "", const AtNode* parent = NULL);
     AtNode* AiNodeLookUpByName (const char* name, const AtNode* parent = NULL);
    
     bool AiOpSetTarget(AtNode* node);
     AtNode* AiOpGetTarget();
    
     AtSessionMode AiGetSessionMode();
     void AiRenderAddInteractiveOutput(uint32_t output_index);
     bool AiRenderIsInteractiveOutput(uint32_t output_index);
     bool AiRenderRemoveInteractiveOutput(uint32_t output_index);
     void AiRenderRemoveAllInteractiveOutputs();
     void AiRenderSetInteractiveOutput(uint32_t output_index);
     uint32_t AiRenderGetInteractiveOutput();
    
     bool AiRenderSetHintBool(AtString hint, bool value);
     bool AiRenderSetHintInt(AtString hint, int32_t value);
     bool AiRenderSetHintFlt(AtString hint, float value);
     bool AiRenderSetHintStr(AtString hint, AtString value);
     bool AiRenderSetHintArray(AtString hint, AtArray *value);
     bool AiRenderGetHintBool(AtString hint, bool& value);
     bool AiRenderGetHintInt(AtString hint, int32_t& value);
     bool AiRenderGetHintFlt(AtString hint, float& value);
     bool AiRenderGetHintStr(AtString hint, AtString& value);
     bool AiRenderGetHintArray(AtString hint, const AtArray*& value);
    
     AtRenderErrorCode AiRender(AtRenderMode mode = AI_RENDER_MODE_CAMERA);
     AtRenderErrorCode AiRenderBegin(AtRenderMode mode = AI_RENDER_MODE_CAMERA, AtRenderUpdateCallback update_callback = NULL, void* callback_private_data = NULL);
     AtRenderErrorCode AiRenderEnd();
     AtRenderStatus AiRenderGetStatus();
     void AiRenderInterrupt(AtBlockingCall blocking = AI_NON_BLOCKING);
     void AiRenderAbort(AtBlockingCall blocking = AI_NON_BLOCKING);
     void AiRenderResume();
     void AiRenderRestart();
     bool AiRendering();
    
     bool AiUniverseIsActive();
     bool AiUniverseCacheFlush(int cache_flags);
     AtNode* AiUniverseGetOptions();
     AtNode* AiUniverseGetCamera();
     AtBBox AiUniverseGetSceneBounds();
     AtNodeIterator* AiUniverseGetNodeIterator(unsigned int node_mask);
     AtAOVIterator* AiUniverseGetAOVIterator();
  • autobump visibility masking: Camera ray visibility must now be explicitly set (before, camera ray visibility was enabled automatically when you set autobump_visibility to any value). Existing scenes that use autobump_visibility may need to enable camera ray visibility.

Bug Fixes

  • ARNOLD-12712 - Modifying texcoords in USD doesn't work with Arnold

  • ARNOLD-12982 - [LicenseManager] Support tool fails to install on Linux and macOS when running Diagnostics

  • usd#1383 - Relative search paths with UDIM and attribute tags are now correctly passed to Arnold

  • usd#1380 - Crash when updating a MaterialX shader in Solaris

  • usd#1372 - Primitives with an empty purpose attribute are now handled correctly

  • usd#1334 - Skip curves with empty radius

System Requirements

  • Autodesk 3ds Max 2022, 2023, 2024
  • Windows 10 or later, with the Visual Studio 2019 redistributable.
  • CPUs need to support the SSE4.1 instruction set.
  • GPU rendering requires an NVIDIA GPU of the Ampere, Turing, Volta, Pascal, or Maxwell architecture. We recommend using the 528.49, or higher, drivers. See Arnold GPU for more information.
  • For GPU rendering, the cache also needs to be re-populated after installing a new Arnold version, updating to a new NVIDIA driver , or changing the hardware configuration of GPUs on the system. More information can be found here.
  • Optix™ denoiser requires an NVidia GPU with CUDA™ Compute Capability 5.0 and above.

Was this information helpful?