Skip to content

Node structure

ymesh edited this page Feb 3, 2013 · 4 revisions

Node structure description

All nodes and node networks are stored in unified XML format. Here is basic node structure:

Node description:

<node name="nodeName" - internal node name
  label="Node_Label" - user-friendly node label (without white spaces)
  author="Node author name" 
  type="surface" ( rib, rib_code, rsl_code, image, surface, displacement, light, volume )
  icon="nodeName.png"> - icon file name (relative to .xml node location)
  <help>Short node description</help>

Input parameters:

<input> 
  <property name="Ci" type="color" default="color(1.0, 1.0, 1.0)" />	
  <property name="Oi" type="color" default="color(1.0, 1.0, 1.0)" />		
</input>

Output parameters:

<output>
  <property name="volume" type="rib" default="Surface &quot;${NODELABEL}&quot;" />
  <property name="__color" type="color" default="color(0)" detail="varying" provider="primitive"  />
</output>

Include files needed for RSL shader:

 <include>
  <file name="noises.h"/>
  <file name="pxslUtil.h"/>
 </include>

Internal local variables names, that can be used inside code block as $(name):

<internal>
 <variable name="spec"/>
</internal>

Python code that will execute before node code processing. Here is possible to change parameters and code at run-time.

<param_code>
  <![CDATA[
    print ":: Hello from %s XML code !!!" % self.label
    
    
  ]]>

Main node code. The format depends of node type (SL, RIB, ...)

 <code><![CDATA[
  #define SURFACE_SHADER ${INSTANCENAME}
      surface ${INSTANCENAME} ( 
      ${PARAMS} 
      )
     {
     /* CODE BEGIN ${INSTANCENAME} */
     Ci = $(Ci) * $(Oi); 
     Oi = $(Oi);
     /* CODE END ${INSTANCENAME} */
     }
 ]]>
 </code>		
</node>

Node parameter description:

<property name="paramName"  - parameter name for internal purposes and final shader
          label="Parameter Name" - user-friendly parameter name
          type="rib" - (image, float, int, color, string, normal, point, vector, matrix, surface, displacement, volume, light, rib, text, transform )
          shaderParam="1" - =1 if parameter is used as external in compiled shader
          space="rgb" - space option ("rgb", "hsv", "hsl", "xyz", "XYZ", "YIQ") for color, 
                        ("current", "shader", "object", "camera", "world", "raster", "NDC", "screen")
                        for point, vector, normal, matrix 
          detail="uniform" - (uniform, varying)
          provider="external" - (internal, external, primitive, attribute)
          subtype="slider" - (slider, switch, selector, file) 
          range="1 100 0.1" - "Min Max Step" for slider
                            - "item1=value1:item2=value2:item" for selector 
                               (if values are 0,1,.. they can be omitted)
          value=""   - parameter value
          default="" - default parameter value
          display="hidden" - used for hidden parameters
        >
  <help>Short parameter description</help>
</property>
Clone this wiki locally