Share

Operators - Arnold for Cinema4d

Further Reading
See the Arnold User Guide for more information.

Operators allow advanced users to override any part of an Arnold scene and modify the Arnold universe at render time. Probably one of the most common use cases is to override parameters (e.g. shaders) inside a procedural (e.g. ASS or Alembic). To achieve this you must know the Arnold node and parameter names defined inside the procedural.

Info: Tutorials about operators can be found here.

Operators are available from the Render Settings > Main > Advanced section which opens a node editor (similar to the shader network editor) to create an operator network. Only one operator network can be active in the scene.

The following operators are available in Arnold:

Info: You can export operator graphs to ASS files and import them back in any DCC using the Arnold Operator Network Editor window.

You can also run the export/import from a python script.

Set Parameter

Info: A video tutorial can be found here.

Arnold Node Names

When C4DtoA translates the Cinema 4D scene to an Arnold scene, it uses the following rules to assign names to the Arnold nodes:

  • Only letters, numbers, underscore (_), dash (-), pipe (|), slash (/) characters are allowed. Every other character is replaced with underscore (_).
    • For instance My-Sphere (obj) becomes My-Sphere__obj_.
  • When multiple nodes exist with the same name, an index number is used as a postfix to avoid duplication. The index depends on the order in the object tree.
    • For instance two objects named Sphere will become Sphere and Sphere_2 in Arnold.

The following table contains examples of names generated for different objects and materials.

Dependencies

Assignments can reference other nodes, for example overriding shader of a polymesh:

shader = /Other_Arnold_Material/standard_surface

C4DtoA exports nodes only if they are actively used in the scene. For instance a material is only exported if assigned to an object. Therefore nodes referenced only in an operator expression might not be exported by default.

List all referenced nodes in the Linked Nodes field to force them to be exported to Arnold.

Procedural

In this example, we want to assign a shader used inside a Procedural (Stand-in Maya/C4D) to objects in the scene. In the Procedural, there is a shader called 'green' that works for overrides on objects inside the ass file since this green shader is in the same Procedural. The full path for the shader is used inside the Procedural for it to work for both the shapes in the ass file and the ones coming from the scene:

shader = "^/obj/arnold_procedural1/procedural^green"

You could choose a namespace for the Procedural by setting the namespace parameter on the Arnold Procedural object node in the Arnold parameters (to foo for example). Then you can use the following shader override which is more intuitive and has the same effect.

shader = "^foo^green" 

Was this information helpful?