Extensions are a means to extend maxwell capabilities in several areas: geometry loaders, geometry modifiers, procedural geometry, scene procedural textures, material UI modifiers and procedural texturescamera lens extensions.
Geometry loaders allow geometry to be loaded at the beginning of the render process. It's an external referencing mechanism that substantially decreases the size of .mxs files. Proxy objects and external referencing can be implemented using these extensions.
Geometry modifiers allow an object to be modified at the beginning of the render process. For example, a coarse geometry object could be refined just before starting the render.
Procedural geometry extensions enable maxwell to render mathematically defined primitives. It is geometry created on-the-fly. Given a ray, with origin and direction, their main task is to calculate an intersection point and a surface normal. In addition to this, given an intersection point these extensions can also calculate UV coordinates, used mainly for texturing purposes. An extension can define an arbitrary number of ways of generating these coordinates.
Scene modifiers are able to change elements in the scene just before the render starts.
Procedural textures generate texture colors on-the-fly while renderingat render time. It can also generate its own texture coordinates.
Procedural textures are calculated while rendering, and generate a color at each intersection that evaluates a material texture.
Material UI modifiers organize material parameters in a simplified way, displaying only those that are relevant to the material type in question. For example, the only relevant parameter for a pure diffuse material is only the reflectance 0º color and that's the only parameter displayed.
Camera lens extensions implement different types of lenses.
Extensions are implemented as a set of classes from which you must inherit to create your own extension. These base classes have some pure virtual methods which, when properly implemented, provide the basic functionality and there are other non pure virtual methods which provide optional functionality.