C4DtoA 4.0.0 uses Arnold 126.96.36.199 and is a major feature release adding ACEScg as the default rendering color space, Intel®'s Open Image Denoise, better denoising quality overall, important scalability improvements on GPU, and better performance and interactivity. This major release also introduces support to the Cinema 4D Node Material and Node Editor (still in beta), important changes in the Arnold API, such as the ability to render several scenes within the same process, and shaders now supporting multiple outputs. Support for Cinema 4D S22 is dropped.
Cinema 4D S24 and R25 related issues in the legacy Arnold Shader Network Editor:
- Drag & drop nodes to the node editor does not work as expected:
- Drag & drop an Arnold Material to create a reference. A Cinema 4D Object Operator node is created instead of an Arnold Material reference node.
- Drag & drop an object to create an object reference. A Cinema 4D Object Operator node is created instead of an Arnold object node.
- Drag & drop a Vertex Map to create a Vertex Map shader. A Cinema 4D Object Operator node is created instead of an Arnold Vertex Map shader.
- Ctrl + drag a shader in the node editor in S24 creates two copies instead of one. shift + drag and Shift + Alt + drag does not work.
- Cinema 4D
- R21.026 and above
- R23.008 and above
- S24.111 and above
- R25.010 and above
Open Image Denoise imager: Intel®'s Open Image Denoise (OIDN) is a fast, AI-accelerated denoiser that runs on CPU that has been integrated into Arnold as the
imager_denoiser_oidnimager as an additional denoising option. (ARNOLD-8677).
OIDN denoiser. Rollover image to view without denoising.
Sampling settings: camera (AA): 3, diffuse: 2, specular: 2, transmission: 2.
Higher quality AI denoising: The OptiX and OIDN denoisers now use the newly introduced denoise_albedo_noisy AOV as the albedo feature AOV provided to the denoiser. This adds specular reflections and refractions to the albedo, which can improve denoiser quality. Below are comparisons between undenoised and Optix denoised with the old and new albedo AOV (ARNOLD-10812).
Undenoised (left), Optix diffuse albedo (center), Optix diffuse+specular albedo (right).
LUT based tone mapping:
imager_tonemapnow supports a
lutmode to apply LUT files in all the formats supported by OCIOv2 (
imager_tonemap.lut_filenamespecifies the file to load. Note that some LUTs assume a non-linear color space. To help with this, it is possible to specify a working color space in
imager_tonemap.lut_working_color_spaceto convert to the specified space, apply the lut, and convert to linear or rendering color space again (ARNOLD-11084).
Automatic selection of box filtering with OIDN and OptiX denoisers: The OptiX and OIDN denoisers do not perform well with CPU rendering filters that span across multiple pixels. Arnold on CPU will now automatically force a box filter on outputs with filters with known issues when either of the denoisers are used (ARNOLD-10812).
Imager_color_curves: A new imager to control brightness and color curves has been added. Separate curves can be authored for each R, G, or B component, along with the main curve to control the overall luminance response. Curve interpolation and working color space can also be set as needed (ARNOLD-11161).
RGB colors edited in real-time using imager_color_curves
imager_tonemap.mix: imager_tonemap now has an additional mix parameter. 0 preserves the input untouched and 1 applies the full node effect (ARNOLD-11172).
Ignore imagers option: The global option
ignore_imagershas been added to allow users to disable imager post-processing in a scene. This can be useful for debugging and can also be enabled via kick with the
Improved support for imagers shared by multiple drivers: All imagers, including the denoisers, can now be shared by drivers with different AOV inputs (ARNOLD-11087).
Improved imagers refresh rate in IPR: Fullframe imagers will now be updated during rendering so that the imager chain result can be previewed before the entire image has been rendered. This replaces the previous behavior where in some cases we would have to delay the result until after the full frame had finished (ARNOLD-11203).
Improved filter performance in progressive rendering: The performance of several filters, including the Triangle, Sinc, Blackman-Harris, Catmull-Rom, and Mitnet filters have been improved when rendering in progressive mode. In some cases, we have seen a 48% improvement in performance and a 20x improvement in memory usage (ARNOLD-10651).
Added support for multiple parallel render sessions on CPU: Any Arnold universe can now be rendered using its own render session (only one render session per universe). Those render sessions can be executed in any order, even in parallel.
The existing API (
AiBegin) creates a default universe and render session, which can be used or ignored. Additional universes can be created and destroyed as usual with their API, but there is a new API that allows creating/destroying and using render sessions:
Multiple outputs for shaders: Arnold now supports having multiple outputs for shader nodes. Shader outputs can be linked to inputs of other shader nodes in a .ass file or programmatically via the AiNodeLinkOutput() function by optionally specifying which output is desired when linking. When no output is specified, the node's default output parameter will be chosen, preserving Arnold's existing behavior.
Standard OSL language rules apply when specifying multiple OSL shader outputs. An example OSL shader with three color outputs could look like the following snippet and each output could be connected separately :
Visible lights now transparent: The visible lights are now transparent, which matches the behavior of indirectly seen lights. This also has the benefit of allowing black parts of textured lights to be masked away. This is a look-breaking change to fix previously incorrect visible light behavior (ARNOLD-9070).
Visible lights transparency now matches the reflection
kick ascii render mode:
kick -asciiallows rendering directly into the terminal. This requires a 24-bit terminal with UTF-8 support. The windows terminal, most Linux terminals, and iTerm support this; Apple's Terminal does not. This will change the resolution of the render to fit within the console, so any images written to disk will likely be very small. Because it is so low res, telling kick to use a small bucket size is recommended, for instance by passing
-bs 16to kick. This can be useful for checking if a render on a remote machine is working (ARNOLD-11146).
Render in ACEScg by default: Arnold will now use an OCIO color manager by default. This color manager will use the default OCIO configuration file. Arnold will render in the ACEScg color space by default. (ARNOLD-11246):
- The rendering color space in Arnold 6 and older is scene-linear Rec.709-sRGB, it is possible to override the default OCIO color manager to revert back to the previous default color space. For example, you must pass the following argument to kick :
- Arnold assumes tx files are in the rendering space, it is recommended to regenerate tx files when changing the rendering color space
Standard OCIO configuration: Arnold now ships with a standard OCIO configuration exposing common color spaces used for rendering, such as ACEScg and scene-linear Rec.709-sRGB as well as the ACES 1.0 SDR-video ACES output transform for standard dynamic range video. This configuration is compatible with the default Maya 2022 OCIO configuration. (ARNOLD-11333):
Multi-part EXR: The EXR driver can now render AOVs as separate images (parts) in a multi-part EXR file (merged AOVs, in contrast, renders AOVs as layers in a single-part EXR).
Multi-part works with either scanline or tiled EXRs and is enabled with the driver_exr.multipart boolean parameter.
- Noice does not work with multi-part EXRs.
Write AOVs to multiple formats: It is now possible to output a single AOV in multiple different formats, for example, the following output string will now output the correct result (ARNOLD-11079).
OSL UDIMs: OSL now uses the same code as Arnold's image node for resolving texture tags, such as UDIMs. This can make OSL texture lookups faster and increase the types of texture tags that can be used from OSL. (ARNOLD-9276).
SSS setnames with randomwalk: The sss_setname feature that allows subsurface effects to spread between distinct objects is now supported in the randomwalk mode on CPU (ARNOLD-8140).
Rollover images to view with sss_setname
Use Existing TX: When
options.texture_use_existing_txis set to true, which is the default, Arnold will attempt to use the .tx version of a texture when available. The .tx file must be located in the same directory as the requested source texture and have the same name with the exception of the file extension. For instance, if "foo/bar/floor.png" is requested and "foo/bar/floor.tx" exists then "floor.tx" will be used. Arnold will ignore any requested colorspace conversions when the .tx file is used since we assume the .tx will have the colorspace transform baked in (ARNOLD-4107).
Support for MaterialX v1.38: Arnold extends its MaterialX support to v1.38. As a part of this upgrade, looks and materials exported from Arnold will now be expressed as a combination of Nodes and Inputs departing from the previous standard of ShaderRefs and Params. Arnold will still be able to render MaterialX documents exported with earlier versions of Arnold however this may cause a look-breaking change.
Cryptomatte 1.1.2: Cryptomatte has been updated to version 1.1.2 (ARNOLD-11270).
- Arnold shaders in the Cinema 4D Node Material (BETA): Arnold shaders are now available in the native Node Material within the Arnold node space in Cinema 4D R23 and above. The node graph can be edited via the native Node Editor. The feature is in beta state, see the known limitations below (C4DTOA-1940).
- Substance Shader is not ported.
- Value and object shaders are not ported.
- Light_blocker is not fully ported.
- Exporting and importing shaders are not supported.
- Popup menus in user_data shaders are not working.
- Loading textures from a folder in the ramp_rgb shader does not work in R23.
- Matrix type parameters are not displayed properly.
- toon.stylized_highlight cannot accept multiple lights.
- Shader presets are not supported.
- OSL shaders from a custom folder are not listed if the plugin path is defined in the scene. It has to be defined via the ARNOLD_PLUGIN_PATH environment variable before starting Cinema 4D.
- Material stacking is not supported.
- No python-support yet (other than the native support).
- Viewport preview is not fully supported.
- No shader preview if the shader has multiple outputs.
- No custom material preview scenes are supported.
- No custom Arnold-specific shortcuts.
- No custom Arnold-specific editor functionality.
- No custom Arnold-specific menu categories in Cinema 4D R23 (shaders are listed under Uncategorized).
- Connecting shaders to non-linkable parameters does not show an error in Cinema 4D R23 and S24.
- Default material system in Preferences: New option is added to the Preference window, which controls whether the new Node Material (still in beta) or the old Arnold Material is created from the menus. (C4DTOA-2513)
- Reference shader in the Node Material: Reference shader is ported to the Node Material, which can reference another Node Material or an old Arnold Material. (C4DTOA-2401)
- ACEScg as the default render color space: Default render color space is now changed to the industry standard Academy Color Encoding System (ACES) via an OCIO v2 config shipped with Arnold. This change does not affect existing scenes which use the builtin (legacy) color manager (linear color space with sRGB primaries). (C4DTOA-2503)
- Bake texture into Picture Viewer output: New option is added to the render settings to bake the view color transform into the output saved in the Picture Viewer. This is needed to compensate for the built-in Cinema 4D color transform. Enable this option when saving to an 8-bit integer image (e.g. JPEG, PNG). Disable the option when saving to a 32-bit float image (e.g. EXR). This does not affect Arnold Drivers, only save from the Picture Viewer (including Commandline and Team Render). (C4DTOA-2540)
- Color space of Arnold Sky and Arnold Light color texture: Color space of a texture linked to the Arnold Sky or Arnold Light color (e.g. HDRI map) can be properly defined. In case of a 32-bit texture (e.g. .hdr) it defaults to linear color space with sRGB primaries (linear sRGB). (C4DTOA-2531)
- Color space aliases: New options are available when selecting color space of a texture: sRGB, linear sRGB, raw. These aliases resolve to the actual color spaces defined by the active color manager and allow smooth switching between color managers (e.g. legacy <-> default ACES) and managing material assets created with a specific color manager. (C4DTOA-2480)
- Set default color manager in Preferences: The default color manager can be overridden in the Preferences window. This is the color manager which is created in new scenes or new render settings by default. This can be useful when someone wants to use a custom OCIO config instead of the built-in one, or a custom color manager. Normally the default ACES config is fine and this option is not set. (C4DTOA-2471)
- LUT settings are removed from the IPR window: LUT settings are removed from the Display tab of the IPR window, use the tonemap imager instead. LUTs now apply to the Picture Viewer as well, not just the IPR. (C4DTOA-2386)
pin_threads has been removed from the
options node. Threads are now never pinned. (ARNOLD-11073)
AiOutputIteratorGetNext switched from taking a
const char** output_name to the more efficient
AtString* output_name. (ARNOLD-11357)
AiMalloc_func(), AiFree_func(), AiRealloc_func(), AiArrayGet*Func(), and
AiArraySet*Func() all took source code info (filename and line number). These functions have been removed and their previous macros (
AiMalloc(), AiFree(), AiRealloc(), AiArrayGet*(), and
AiArraySet()) which were setting the source code info are now proper functions. If you were using the macros you should not need to modify any code. (ARNOLD-5785, ARNOLD-10754).
scene_units_in_meters option and metadata have been renamed to
meters_per_unit, putting them more in line with their equivalents in the USD standard. Note that these values now have an inverse interpretation to what they had before, so implementations must now provide values such that:
new_scene_units_value = 1 / old_scene_units_value (ARNOLD-11176)
AiUniverseIsActive API function is now renamed to
- C4DTOA-2555 HDR sky texture is displayed dark in the viewport
- ARNOLD-3573 - Incorrect log color in Windows consoles when using multiple threads
- ARNOLD-11625 - Empty backtrace when using
printBackTrace()outside a crash on Windows
- ARNOLD-11230 - Low transmission_depth values causes dielectrics to be too dark
- ARNOLD-11421 - Progressive render IPR can get stuck at final AA level
- ARNOLD-11178 - Unexpected normal smoothing behavior
- ARNOLD-11228 - Using ray/shader switches to lower transmission depth causes dielectrics to be too dark
- ARNOLD-11562 - [Alembic] UV data in curves not interpolated correctly when overriding curve.basis
- ARNOLD-11361 - [Alembic] user data on curves is interpolated incorrectly
- ARNOLD-8934 - [GPU] Arnold "Render Section to Texture" crashes Maya
- ARNOLD-11687 - [GPU] 8-bit RGBA sRGB textures render incorrectly in ACEScg
- ARNOLD-10996 - [GPU] Crash or artifacts when multiple image nodes point to the same texture
- ARNOLD-11515 - [GPU] Crash when destroying procedurals interactively using 470 Nvidia drivers
- ARNOLD-11621 - [GPU] Discrepancy with SSS closures in OSL
- ARNOLD-11241 - [GPU] Missing alpha channel in RGBA-typed LPE AOVs
- ARNOLD-11466 - [GPU] denoise_albedo is black on SSS
- ARNOLD-11444 - [Imagers] Crash after an imager_denoiser_optix error
- ARNOLD-11087 - [Imagers] Incorrect result when multiple drivers with different AOVs share a single imager
- ARNOLD-11071 - [MaterialX] Crash when multiple objects share the same material
- ARNOLD-11089 - [OCIO]
OCIOColorManagerGetKnownChromaticities()not working with
- ARNOLD-11538 - [OCIO] Random crashes when using the color API from multiple threads
- ARNOLD-8521 - [OSL] UDIM textures through OSL do not have their color transform applied
- ARNOLD-9190 - [Noice] Crash when using a small data window
- usd#751 Render delegate crashes when changing material terminals interactively
- usd#797 Warning messages when
- usd#847 Procedural should check the camera of the proper universe for motion blur settings
- usd#858 Can't hide/unhide lights in Hydra
- usd#853 Missing indices for facevarying primvars in Hydra abort renders
- usd#871 Enforce writing multiple frames when no default is authored
- usd#802 B-spline curves not using radius in procedural
- usd#798 SdfMetadata clashing with another NdrDiscovery plugin
- usd#816 The procedural does not use "driver:parameters:aov:name"
- usd#880 Scenes using pre-21.02 light parameters are not rendering correctly
- usd#884 Render delegate shouldn't call AiBegin/AiEnd if Arnold is already active
- usd#843 Disabling render purposes does not hide geometries in Hydra
- usd#887 Int parameters are not converted to unsigned int shader parameters in the render delegate
- The C4DtoA API has been modified which requires third-parties to recompile their C4DtoA extensions.