In this section:
A RenderDude! scene consists of a number of entities (geometry, shaders, textures, cameras, etc), each of which has a specific set of attributes that describe them. As an example, a file format entry for a 2d checker texture looks like:
CHECKER2D { name Checker1 scale 5 5 color1 1 0 0 color2 0 1 0 } |
![]() |
This instance of a CHECKER2D entity specifies the values of several attributes for the entity. The 'scale' attribute specifies the 2d transformation to be applied to the texture, while the 'color1' and 'color2' attributes specify the two colours of the checker texture. The accompanying image shows the result of mapping this texture onto a plane.
RenderDude! supports many different types of attributes, including integer, boolean, double, string, vec2, vec3, and several others.
One of the goals of RenderDude! is to permit interesting shader networks to be constructed. To this end, many attributes are texturable, that is, their values are not fixed, but instead can be driven by some texture. For example,
CHECKER2D { name Checker1 scale 5 5 color1 1 0 0 color2 <Checker2> } CHECKER2D { name Checker2 scale 10 10 rotate 45 color1 1 1 0 color2 0 0 1 } |
![]() |
In this example, the same checker texture from before is used, but its "color2" attribute is now driven by another checker texture with a higher repeat rate and a 45 degree rotation applied to it. The result is shown in the accompanying image. There is no predefined limit to the depth of nested textures that can be achieved.
Another goal of RenderDude! is to provide support for animation of both geometry and of shading parameters. Thus, many attributes are animatable. An animated attribute has its value determined by a time-varying function called an animation curve, described in more detail in Section 5. Animated attributes are specified just like texture attributes in the file format, except that the name of an animation curve is specified instead of a texture. For example, if "AnimCurve1" is an animation curve, then the following file format entry:
SPHERE { name Sphere1 translate <AnimCurve1> }
denotes a sphere primitive whose position is driven by the AnimCurve1 animation curve. All attributes that are texturable are also animatable, but not vice versa (it makes no sense to texture the position of an object, for example).