A plug-in describes scene entities, such as procedural (parametric) objects, materials, etc, processes that manipulate them,
such as the process of rendering or exporting a scene, or customize how 3ds Max looks and behaves. Plug-ins can be written
in C++, MAXScript, or .NET. Most plug-ins are written in C++.
Plugins are packaged in DLLs (dynamic load libraries). 3ds Max recognizes DLLs that contain plugins and loads them into its
process space when it starts up or when an instance of a plug-in from that DLL is required to perform a task, such as importing
data from a file in a given format into the 3ds Max scene. To speed up the plug-in DLL identification process, 3ds Max looks
in specific folders for DLL files with specific extensions such as dlo, dlm, dlt, dlu, etc .
Most plug-ins fall into one of the following categories:
- Object Plug-ins - These plug-ins (also called procedural or parametric object plug-ins) represent objects the user can create
and manipulate interactively in the viewport. Examples of such plug-ins include geometrical primitives (teapot, torus, etc),
shapes, lights, camera, and helpers. Plug-ins in this category are expected to be packaged in DLLs with the "dlo" extension.
- Modifier Plug-ins - These are plug-ins that take as input a procedural object or a mesh of some kind (triangle mesh, patch
mesh, poly-mesh) and apply a transformation to it. Examples include deformers such as bend, taper, etc, mesh editing modifiers
such as extrude, bevel, etc. Plug-ins in this category are expected to be packaged in DLLs with the "dlm" extension.
- Animation Controller Plug-ins - The main role of these plug-ins is to store and interpolate between animation keyframe values
of basic data types such as integers and floats. Controllers can expose sub-controllers. This allows for creating more complex
controllers such as constraints. Controllers are used everywhere in 3ds Max, starting with the position, rotation and scale
of objects to constraints, from evaluators of expressions written in MAXScript to generators of fractal noise. Plug-ins in
this category are expected to be packaged in DLLs with the "dlc" extension.
- Materials and Texture Plug-ins - These plug-ins allow for defining the look, or appearance of objects when displayed in the
viewport and rendered. Materials define how objects interact (reflect, transmit, etc) light. Texture maps add details or complexity
to the appearance of objects. Plug-ins in this category are expected to be packaged in DLLs with the "dlt" extension.
- Rendering plug-ins - These plug-ins can add effects such as glare, shadows, etc to a scene, or render the entire scene. The
plug-in is not restricted in the rendering method it implements (scan-line, ray-tracing, etc). Plug-ins in this category are
normally expected to be packaged in DLLs with the "dlr" or "dlv" extension.
- Scene Data Import Export Plug-ins - These plug-ins either import or export 3D scene data such as geometry, lights, camera,
materials, textures, etc. Plug-ins in this category are normally expected to be packaged in DLLs with the "dle" or "dli" extension.
- Image File IO Plug-ins - These plug-ins allow for importing and saving images (such as a rendering of the scene) in various
formats such as bmp, jpg, png, high-dynamic range, etc). Plug-ins in this category are expected to be packaged in DLLs with
the "bmi" extension.
- Utility Plug-ins - These plug-ins usually perform some operation on scene entities, such as display information about the
selected objects, or provide other miscellaneous services. Plug-ins in this category are expected to be packaged in DLLs with
the "dlu" or "gup" extension.
- MAXScript Plug-ins - These plug-ins customize how the MAXScript engine works or extend it with new functionality, such as
C++ implemented functions.