Args Files for Procedurals
==========================

.. highlight:: xml

Similar to the use in shader interfaces, UI hints can be defined for renderer
procedurals. :kat:node:`RendererProceduralArgs` nodes look for an Args File
called :samp:`{proceduralName}.so.args` in the same directory as the
:file:`.so` for the selected procedural.

Here's an example of a ``procedural.so.args`` file::

    <args format="1.0" outputStyle="scenegraphAttr">
      <float name='color' size='3' default='1,0,0' widget='color'/>
      <float name='radius' default='1'/>
    </args>

.. note::
    For procedurals, the type and default value of a parameter have to be
    declared. This is in contrast to the use of :doc:`ForShaders` where the
    type can be interrogated directly from the shader.


Output Style
------------

The choice of ``outputStyle`` controls how Katana declares procedural arguments
to the renderer. We show the resulting RenderMan ``.rib`` and Arnold ``.ass``
generation to illustrate the differences. The following styles are available:

``typedArguments``
  Serializes arguments into multiple typed arguments. This is the default if
  ``outputStyle`` is not specified.

  In RenderMan::

      Procedural "DynamicLoad2" "MyProc"
        "float[3] color" [0 1 0]
        "float radius" [0]

  In Arnold::

      procedural {
        name MyProc
        declare color constant ARRAY FLOAT
        color 3 1 FLOAT 0 1 0
        declare radius constant FLOAT
        radius 0.9
      }

``classic``
  Serializes arguments into a single string.

  In RenderMan::

      Procedural "DynamicLoad" ["/path/to/proc.so" "-color 0 1 0 -radius 0.9"]

  In Arnold::

      procedural
      {
        name MyProc
        dso "/path/to/proc.so"
        data "-color 0 1 0 -radius 0.9"
      }

``scenegraphAttr``
  Serializes arguments to XML, then passes the XML string as a single string
  argument.