KtoA 4.2.1.0 - Arnold for Katana
29 March 2023
KtoA 4.2.1.0 includes Arnold core 7.2.1.0.
Installation
- Download the Arnold for Katana plugin
- Follow these installation instructions
Katana 4.5 and 5.0 compatibility
Katana 4.5v3 and 5.0v3 introduced a change that affects the Arnold USD plugins support in Katana. This release of KtoA supports those Katana versions or newer within their release series. Katana 4.5v1, 4.5v2, 5.0v1, and 5.0v2 are not supported by this KtoA release.
Enhancements
Material node naming: Material-like nodes on the Arnold side are now named with a simpler scheme, always based on the Katana location the material actually came from. They are also shorter and easier to understand. This solves several important issues, including naming stability across frames so that e.g. Cryptomatte keeps the same auto-generated IDs based on the node name. Previously, the naming depended on which Katana locations had the material assigned, which was not always consistent from frame to frame. (KTOA-473, KTOA-708)
Arnold materials via USD: Arnold materials are properly imported and are editable in NetworkMaterialEdit (for Katana versions 4.5 and up) when brought in via the UsdIn node. (KTOA-809)
Version check in About shelf script: The about box, accessed via the KtoA shelf script, has been updated, and will inform if there is a new version of KtoA available than the one that is currently running. (KTOA-856)
Final render location attribute: Newer versions of Katana provide the final render file location, which KtoA can take advantage of for checkpoint/resumable renders, simplifying and speeding up the process of discovery for where the resumable rendered image is on disk. (KTOA-847)
Global light samples: In ArnoldGlobalSettings a new option in the lighting section, when activated, will intelligently distribute light samples among the potentially many lights in the scene, rather than relying on the per-light sample settings. This applies to any lights except for environment lights, distant (directional) lights, or when rendering volumes or when rendering on the GPU. See the core release notes for more information. (KTOA-853)
Katana 6.0 support: The Katana 6.0 release series is now supported. (KTOA-845)
Distance shader: A new distance shader that uses the distance to the nearest surface to interpolate between near and far color values. (ARNOLD-9361)
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Global light sampling: A new, more efficient sampling technique for lights is available. To enable global light sampling, set
options.light_samples
to a non-zero value. When enabled, the light sample settings on individual lights are ignored and the overall, global contribution of all lights together is computed usingoptions.light_samples
number of samples only. In this release, global light sampling does not apply to environment, directional lights, volumes, and GPU rendering. See the full documentation for more details. (ARNOLD-12860)
![]() |
![]() |
without Global Light Sampling: 2 mins, 41 secs | with Global Light Sampling: 44 secs |
![]() |
For equal-quality renders of this scene, the new light sampling technique becomes progressively faster than per-light sampling as more lights are used. |
- 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. This allows, for instance, to have two suns. (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 will produce:my_texture_sRGB_ACEScg.jpg.tx
. Textures that are not supposed to have colorspace changes get the tagraw
, such asmy_texture_raw.jpg.tx
. (ARNOLD-11919)Improved triangle intersector: Triangle intersection is now 20% faster and less likely to allow rays to incorrectly slip between triangles, which manifested as holes in a mesh. (ARNOLD-4136)
Faster loading of OpenVDB volumes in Windows: On Windows, OpenVDB volumes are faster to load, especially on certain many-core CPUs. On one 112-core machine we've seen 4.5x faster loads; other CPUs saw smaller speedups. (ARNOLD-12633)
Faster instancer initialization: The instancer procedural is now faster on single-socket CPUs. We've seen up to 1.6x faster node initialization on some machines. (ARNOLD-12963)
alembic.objectpath
changed to an array : The Alembic procedural parameterobjectpath
is now an ARRAY type, so multiple object paths can be given to a single Alembic procedural. (ARNOLD-12950)uv_transform
improvements : The uv_transform shader now has awset
parameter, which is the name of a float user data value. A new matrix attributeuvw_matrix
returns new coordinates based on the uvw values. If the new attributeuvcoords
is linked to a shader, the values returned by that shader override the uv coordinates, at the cost of efficiency because this prevents Arnold from using the correct filtering. (ARNOLD-13049, ARNOLD-13156)Motion blur with set_transform: The
set_transform
operator now has a matrix attribute, that can be animated. This allowsset_transform
to apply animations and get correct motion blur. (ARNOLD-13068)Faster node init/update: The node init and update times are 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 socket Intel Xeon Linux machine (56 total logical cores) now renders 1.4x faster. (ARNOLD-13004)
Improved many-core OCIO performance: Rendering performance when using OCIO has been improved. Examples where this speedup might be observed are when using 8-bit textures, textures in a different colorspace to the rendering colorspace, when not using AutoTX, or shading operations that require colorspace transforms. We have seen up to 20% reduction in rendering time on multi-socket systems. (ARNOLD-12912)
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)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 if there are many non-opaque objects. This shadow ray optimization should only affect the look when autobump is used to adjust the opacity for shadow ray, which likely is not a common use case. (ARNOLD-8863)
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)
Upgraded OCIO: OpenColorIO has been upgraded to 2.2.1. (ARNOLD-12743)
Remove warning about using tiled with deep_exr: We no longer warn about using tiled with deep_exr. (ARNOLD-12887)
Update OSL : Open Shading Language (OSL) has been updated to version 1.12.9. (ARNOLD-11791)
Update Boost: The Boost library has been updated to 1.81.0. (ARNOLD-12271)
Update zlib: The zlib library has been updated to 1.2.13. (ARNOLD-13097)
Update Cryptomatte: Cryptomatte has been updated to 1.2.2. (ARNOLD-13101), so sidecar manifests now work with Solaris.
autotx metadata in tx files: TX files generated with AutoTX now have the metadata
autotx 1
added to the TX file. (ARNOLD-13025)New environment variable for external control of autotx: The new environment variable
ARNOLD_AUTO_GENERATE_TX
overrides the options parametertexture_auto_generate_tx
. This environment variable can be eithernever
orwhen_outdated
, which are equivalent to disabling or enabling the global autotx option. (ARNOLD-12875)
USD Enhancements
Update Arnold-USD: USD has been updated to 22.11 (ARNOLD-13075, ARNOLD-13099)
Support more MaterialX shaders in USD. The MaterialX Standard Library shaders for creating and manipulating BSDFs, VDFs, and EDFs, such as
layer
,mix
, andadd
, are now supported in USD as well as the following shaders :triplanarprojection
,switch
, andconstant
.Convert cube, sphere, cylinder, capsule primitives as meshes in the procedural. Geometric primitives are now converted to Hydra meshes instead of Arnold primitives. usd#1318 usd#1451
Support render delegate products for all Arnold drivers. When rendering using Hydra, with husk for example, the render delegate now uses the RenderProduct drivers. usd#1422
Arnold Render Products in Hydra: Setting the render product type to "arnold" (instead of the default "raster") will now render the scene with Arnold drivers. This means we support the driver parameters defined in the Arnold tab of the render products. usd#1423
Instanced skinned meshes: Skinned instances are now rendering in the correct transform and order. usd#1412
fStop and aperture_size: The procedural and render delegate now support both the fStop and the aperture_size parameters in the camera. usd#1421
Support combination of half and full precision AOVs in the procedural. The procedural can now render a combination of half- and full- precision aovs. usd#1416
Always read RenderVar aov:name as an output layer. The
RenderVar
parameter driver:parameters:aov:name is now used as the output aov layer name. usd#1408Support Render Product names: Render Product names are now used as the Arnold output layer names. In exr files, each layer name can now be customized. usd#1408
Support asset attributes for filenames when no tokens are present. "filename" Arnold attributes are now SdfAssetPaths in USD usd#1163
Filename attributes as Assets: In Arnold shaders (like the image shader), the filename is now an asset parameter. This allows Arnold to support relative paths in a more consistent way for USD. usd#1418
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 behaviour in the render delegate. usd#1353Driver 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 namedAiReadImage()
; 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 variableARNOLD_SYSTEM_HANDLER_MASK
have been added, allowing a user to mask Arnold built-in system handlers. The supported masks are listed inAtSystemHandlerMask
and currently allow all handlers to be either fully enabled or disabled. (ARNOLD-13014)Check if TX file is up to date: The new function
AiTextureTxFileNeedsUpdate()
returns true if the TX file needs to be regenerated from its source texture. This can happen if the source texture was modified or if Arnold was updated with a newer OpenImageIO library. (ARNOLD-12994)Get original texture name for TX file: The new function
AiTextureGetTxSourceFileName()
returns the name of the texture file used to generate a given TX file. (ARNOLD-13047)
Incompatible Changes
This version 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. (ARNOLD-12833)- 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.
Minimum driver requirement raised: The minimum supported NVIDIA driver versions are now 512.78 (for Windows) and 510.73.05 (for Linux). (ARNOLD-13169)
Material node naming: The new Arnold node naming scheme will require an update of any Arnold operators that relied on the old naming scheme. To see the new naming scheme, export a .ass file and view the Arnold node names, as they use the original material location and shorten the postfixes for the material terminal type. (KTOA-473, KTOA-708)
Auto Generate TX and OpenImageIO versioning: Arnold now regenerates tx files only if the OIIO version in Arnold is newer. Using an older Arnold with an older OIIO does not force a regeneration of the tx files. (ARNOLD-12992)
Auto Generate TX on write-protected folder: When a TX file cannot be generated because the target folder is write protected, the TX file is generated in the system temp folder. (ARNOLD-13039)
AiLoadImage:
AiLoadImage()
has been deprecated and replaced with the more appropriately namedAiReadImage()
; 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();
Removed min_optix_denoiser_sample option: Removed the deprecated and redundant
min_optix_denoiser_sample
option. (ARNOLD-11714)Removed non-functioning
kick -of
flag:kick -of
was removed because it was never able to actually change the output file type. The one thing it could properly do was to output the output file types Arnold can write to, however that functionality can already be reproduced throughkick -nodes | grep driver_
. (ARNOLD-12857)Better autobump visibility masking: Camera ray visibility must now be explicitly set (before, camera ray visibility was enabled regardless of the autobump_visibility setting). Existing scenes that use autobump_visibility may need to enable camera ray visibility. (ARNOLD-8863)
License Manager log folder changed on Linux: License Manager application and diagnostic logs are now stored under the ~/.autodesk folder on Linux. (ARNOLD-12993)
kick -nostdin
replaced with-stdin
: kick no longer automatically reads from stdin, because in the past, waiting for input from stdin caused problems with some tools. If you want kick to read from stdin, use the new -stdin flag. (ARNOLD-6908)
Bug Fixes
KTOA-21 - Not all light changes reflected during live rendering
KTOA-809 - Round-trip of ArnoldSceneBake (USD) to UsdIn does not recognize materials correctly
KTOA-822 - HDRI Light + Scene Graph > Expand All crash Katana
KTOA-830 - Non-camera materials inherited by cameras cause render failure
KTOA-849 - Color manager slot not translated
KTOA-863 - Crash when including KatanaUsdArnold in Katana resources
ARNOLD-12964 - Rare crash when threads are creating AtStrings at the same time
ARNOLD-13032 -
AiTextureAutoTxFlags
not resolving auto color spaceARNOLD-13115 - Use textures in
texture_auto_tx_path
even when autotx generation is disabledARNOLD-13197 - Log callbacks ignore maximum number of warnings
ARNOLD-13201 - Crashes when default universe is null
ARNOLD-13350 - Set AtNode LocalData pointer to null after node_finish is called
ARNOLD-12995 - [MaterialX] Support nodes from the MaterialX PBR library in USD
ARNOLD-13073 - [MaterialX]
AiMaterialxGetOslShaderCode
fails onND_switch_color3
ARNOLD-13074 - [MaterialX]
AiMaterialxGetOslShaderCode
fails onND_separate3_color3
ARNOLD-13107 - Mesh lights occasionally do not render
ARNOLD-13163 - [GPU] CPU memory leak when rendering multiple frames on the GPU
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
usd#1412 - Fix instance skinned mesh in incorrect position and order.
usd#1438 - Creating surface models from PBR nodes doesn't work
usd#1433 - Material binding not handling correctly the different scopes
usd#1447 - MaterialX Triplanar renders black
usd#1427 - Motion blur differences between procedural and delegate
usd#1442 - Velocity motion blur doesn't work if PointInstancer has more than one prototype
usd#1354 - Vertex mismatch with velocity blur and point normals in Hydra
usd#1420 - Unify
fStop
andaperture_size
usd#1430 - deepexr driver parameters like
depth_tolerance
are ignoredusd#1411 -
append
parameter (for checkpointing renders) is not translatedusd#1413 - Crash in UsdSkel in the procedural
usd#1352 - Skinned instances in wrong world position
usd#1394 - USD procedural renders characters in the wrong positions and order
usd#1443 - Incorrect number of motion keys with skinned primvar normals and motion blur
System Requirements
Windows 10 or later.
Linux with at least glibc 2.17 and libstdc++ 4.8.5 (gcc 4.8.5). This is equivalent to RHEL/CentOS 7.
CPUs need to support the SSE4.1 instruction set.
GPU rendering works on Windows and Linux only and requires an NVIDIA GPU of the Ada, Ampere, Turing, Volta, Pascal, or Maxwell architecture. We recommend using the 525.89 or higher drivers on Linux and 528.49, or higher on Windows. See Arnold GPU for more information.
Katana Katana 4.0v1 or newer, Katana 4.5v3 or newer, Katana 5.0v3 or newer, or Katana 6.0v1 or newer.