You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Arnold provides support for Softimage's ICE (Interactive Creative Environment) visual programming system, allowing you to create complex effects by connecting nodes graphically.

SItoA can efficiently render Point Clouds and Strands. Custom attributes are also supported.



Currently the following shapes are supported by Arnold:

  • Points
  • Discs
  • Rectangles
  • Spheres
  • Boxes
  • Cylinders
  • Cones
  • Strands


In addition, SItoA supports ICE Geometry instantiation on both points and along strands.


ice_shapes_example                         ICE examples: a bunny model covered with particles using the sphere primitive (left) and instanced tanks (right)


Exporting Attributes

In ICE, each particle has many attributes such as age, rotation, color, elasticity, size, etc. SItoA fully supports reading predefined as well as custom attributes of any data type in the rendertree using the "Attribute" shaders.

To export any attributes you may want to use in the Render Tree, you will need to add a "Set Data" node that assigns the data to an attribute. There is one exception: the color attribute is always exported so you don't need to assign it manually.

ice_attribute_setdata Assigning a random scalar value to a custom attribute called 'HueOffset'



ICE Strands are rendered using Arnold's Curve Primitive.


The following attributes are required:

  • 'StrandPosition'. 
  • 'Size' for constant thickness and 'StrandSize' for varying thickness. 
  • 'Color' for constant or uniform (one color per strand) color and 'StrandColor' for varying color. 
  • Instances on strands are also supported. Below is a standard set of strands, rendered by Arnold curve nodes:



And this is the same scene, instancing a cone along the strands:



You can instantiate meshes and models. The pointcloud's attributes (like the color in this case) are also exported as constant values for each instanced object. Since the geometry of the master objects is deformed by the strands, each shape is exported as a separate shape, and not as an Arnold instance. The strands' size and orientation are also taken into account for shaping the objects.


Here is for instance a cube shape, which gets twirled by the strand orientation:



In version 2.3 of SItoA, we added support for oriented ribbons.


If no instance shape is in place, you can tell the curves primitive to orient the ribbons along the strand orientation directions. To do so, apply an Arnold Property to the pointcloud, and set the Curves Mode to Oriented Ribbon (ICE Strands).

This is the same scene rendered with oriented ribbons:



Motion Blur


Required Attributes:


  • 'PointVelocity' for linear transformation motion blur.
  • 'AngularVelocity' for rotational motion blur. Note that this attribute does not come for free, you have to set it in the icetree as shown in the snapshot: get the rotation, subtract it from the one at the previous frame, and multiply it by the frame rate. This way you have the angular velocity (radians per second). Finally, set this data asSelf.AngularVelocity.
  •  'StrandVelocity' for linear deformation motion blur on strands.



From 2.1, we added a new flag called Exact ICE Blur, that, if enabled, does not require the velocity attributes to be defined for points. The pointcloud geometry is evaluated at all the motion blur times, so giving much better results. But there is a price to pay, since it requires evaluating the geometry several times, which can be quite expensive. And, there are two limitation:


  1. It does not work at all for strands 
  2. It does not work for pointclouds with varying number of points per frame (for instance, basic emissions). It will be automatically disabled, but you should do it yourself in advance to save time to the exporter.


Related topics:

Hair / curve parameters (Arnold properties menu)

Hair Tutorial


Shading with Attributes

For objects and strands, you must get the desired attribute by one of the Attribute_* nodes in the rendertree.

ice_shaders_attributesSame scalar attribute used to drive the Hue offset in the ColorCorrection shader



ice_shaders_example                         Example render with no hue offset (left) and with hue offset (right)


Instanced Lights with Attributes

For instanced lights (SItoA light shaders are not texturable), we go with the attribute name. Any attribute whose name starts with "ArnoldLight" (case insensitive) is treated as a candidate for setting a given parameter on the instanced lights.

What follows "ArnoldLight" is used as the parameter name to be set. The parameter names used are not those of the light shader. The parameter names refer to the Arnold node used for that light. For instance, all the light nodes in Arnold have parameters called "color" and "intensity".

So, you simple have to set two attributes called ArnoldLightColor and ArnoldLightIntensity, and they will be automatically pushed as the value of the corresponding parameters of the Arnold lights. There is no need to do anything in the light rendertree.

SItoA will also convert between different types. For instance, in ICE you can declare ArnoldLightColor as a scalar attribute, and SItoA will assign the same scalar value to the light color's R,G,B.

Note that, not being pulled by any rendertree node, you must force ICE to export the ArnoldLIght* attributes, for instance by displaying their values in the viewport, as showing below.



You can set light parameters of type point, vector, color, scalar, integer and boolean.


To get the full list of the parameters for a given light type, use "kick -info <node>".

For instance, for a point light, kick -info point_light returns this:


Type          Name                              Default

------------  --------------------------------  -------------

POINT[]       position                          0, 0, 0

FLOAT         radius                            0

ENUM          decay_type                        quadratic

BOOL          affect_volumetrics                true

BOOL          cast_volumetric_shadows           true

NODE          volume_density                    (null)

MATRIX[]      matrix

RGB           color                             1, 1, 1

FLOAT         intensity                         1

FLOAT         exposure                          0

BOOL          cast_shadows                      true

FLOAT         shadow_density                    1

RGB           shadow_color                      0, 0, 0

INT           samples                           1


This tells you that, for instance, if you want to affect the shadow color, the correct attribute name to set in ICE will beArnoldLightShadow_Color (again, case insensitive).


Instanced Standins with Attributes

From version 2.2, SItoA allows for standins driven by ICE attributes as well, similar to the support for lights.

You should proceed as usual when instancing standins on a pointcloud. Then, if the standin property has the string "ArnoldProcedural" set for the path and/or the data, then it will be exported by ICE as an Arnold procedural node. In ICE, any attribute starting with "ArnoldProcedural" is a candidate for setting the corresponding procedural parameter.

In the example shown below, we set ArnoldProceduralDso to point to an .ass file (depending if the point id is even or odd), and set ArnoldProceduralData to void. "Dso" and "Data" are the names of the parameters of the native Arnold procedural node. We can then set any of the procedural parameters, as long as you we the original name (kick -info procedural) after ArnoldProcedural. For instance, ArnoldProceduralSelf_Shadows, etc., the same way we did for lights (see above).

If Path is a valid dll (meaning that Data must be set equal to "ArnoldProcedural" to be managed by ICE), then the dll path is used, and you can just set ArnoldProceduralData in ICE to have the same dll using different data for different points.

If Deferred Loading is on, then the standin object bounding box is used (the asstoc file is not used, even though selected in the standin property). If you need to set or overwrite the min and max boundaries (for instance if using your own custom procedural), you can push two extra 3D vector attributes named ArnoldProceduralMin and ArnoldProceduralMax.

Note that, not being pulled by any rendertree node, you must force ICE to export the ArnoldProcedural* attributes, for instance by displaying their values in the viewport, as shown below.


Also, while rendering, you may get some warnings from Arnold about names being reused; these warnings can be ignored.




  • No labels
Privacy settings / Do not sell my personal information / Privacy/Cookies