In its simplest form, a basic rasterizer processes a scene via a data structure similar to:
- List of lights
- List of pairs of:
The camera in this case is a generalization of all the data needed to transform and project the 3d world onto the display (this may include viewport information as well). In this simplification, a single set of lights is assumed to apply to all geometry in the scene. More advanced renderers may allow different sub-sets of the global light set to apply to particular materials. Lastly, a flat-list of the geometry to render and the material associated with that geometry is provided. A list of reference counted items is likely appropriate as the same basic material may apply to multiple objects. Or, more likely, the material may actually be a composite of a shared material base object and an unshared set of parameters specific to that object.
There are other considerations as well that are ignored in this basic example. Spatial indices, transparency rendering, multi-threading, transformations, geometry instancing, etc. will all add complexity to this basic framework.