AIR 8 includes a new Massive agent light tool (malt) to enable rendering Massive agents with per-agent lights. Possible applications include vehicle headlights or crowds carrying torches or flashlights. The basic idea is to use a piece of stand-in geometry to represent an agent light, which is converted to an actual RIB light source by the malt utility prior to final rendering. The workflow in detail:
1. Create and position standin geometry for each light associated with an agent. The shape should be a pyramid or triangle. By default malt uses the first vertex as the light position and the average of the other vertices as a target point for the light. If the -last command line option is passed to malt, it will use the last vertex as the light position.
2. In Massive assign a special surface shader to the standin geometry with the light shader properties. The AIR distribution includes two "proxy" surface shaders: proxy_spotlight for the standard spotlight shader, and proxy_pointlight for the standard pointlight shader. Most parameters of the proxy shaders mirror those of the corresponding light shader. There are a few special parameters:
LightShader - the name of the light shader to use. Due to a bug in Massive 3.0 that initializes all string parameters to the empty string, the parameter must be set to "spotlight" for the proxy_spotlight shader or "pointlight" for the proxy_pointlight shader.
ShowProxyGeometry - set the value to 1 to make the proxy geometry visible in the rendering.
LightMaxDistance - sets the light maxdist attribute defining the range of influence of the light as a distance from the light source position. Setting this value appropriately can help reduce render times.
For initial tests you may also wish to set the falloff parameter to 0.
If the lights are to cast ray-traced shadows, set the shadowname parameter to "raytrace".
3. Make sure the proxy geometry is tagged not to cast shadows in Massive.
4. Sim to export rib files as usual.
5. Use the malt tool to create agent lights for each frame:
The malt tool parses through all the agent data looking for objects with a "light" surface shader. For each such object, malt creates a light in an agent light file named "scene0001_agentlights.rib". After processing the agents, malt re-writes the main scene file, adding a reference to the agent lights just after the WorldBegin statement.