Section 1 - Overview

In this section:

1.1 - Entities and Attributes

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.

1.2 - Textured Attributes

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.

1.3 - Animated Attributes

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).