Skip to content
toadstorm edited this page Jun 14, 2020 · 5 revisions

mops rainbow

Henry/Toadstorm presents an overview of the "what" and "why" of MOPs at Houdini HIVE Worldwide, along with some example scenes to get a sense of how MOPs works and what problems it can solve.

Most of the MOPs toolkit is all about transforming packed primitives in Houdini. Packed primitives are essentially "instances"... that is, they are a transformation matrix (translate, rotate, scale) and a pointer to some underlying shape (e.g. a pig head). Packed primitives can be very efficient because each transform can point to exactly the same shape in memory under the hood, meaning you can have lots of copies of just a few objects with very little performance loss. The only disadvantage is that you can't deform individual copies or manipulate the shape attributes without unpacking first.

Packed Primitives unfortunately aren't easily messed with in vanilla Houdini, aside from just moving their positions around. MOPs aims to make this process easier by introducing a few basic nodes: MOPs Apply Attributes, MOPs Extract Attributes, and MOPs Transform Modifier. Extract Attributes converts the secretive "packed intrinsic" transformation attributes of these packed primitives into familiar instancing attributes like N, up, orient, pscale, etc. Apply Attributes takes those familiar attributes and converts them back into the packed intrinsic attributes, thus translating, rotating, or scaling packed primitives the same way you would use a Transform SOP on regular geometry. MOPs Transform uses Apply Attributes under the hood to convert the user-friendly translate, rotate, scale parameters into transformations to be applied to the packed primitives.

Packed primitives generated by MOPs aren't much different from regular packed primitives in Houdini... we just sneak a few point attributes in here and there. Some of the more commonly used attributes in MOPs are i@id, i@mops_index, and p@mops_orient. We also add some attributes to Packed Disk Sequences and Packed Alembics generated by the MOPs Instancer, to better allow for cycling behavior. The MOPs Convert node in the Tools menu is intended to quickly take existing geometry or packed primitives and make them as MOPs-compatible as possible.

The Modifier MOPs nodes are a loosely organized set of operations that work on packed primitives. They can move your primitives along splines or meshes, change their colors, aim them towards a goal, push them through a noise field, etc.

MOPs also comes with a ton of friendly Falloff nodes, that determine the weight of these transformations or modifications per-primitive. If you use MOPs Transform to apply a rotation of 180 degrees, an object with a Falloff of 0.5 applied will rotate 90 degrees. A lot of MOPs operators support the Falloff attribute @mops_falloff!

There's also a number of low-level Tool nodes that are intended as building blocks for making your own higher-level MOPs operators. The most important are again MOPs Apply Attributes and MOPs Extract Attributes, but there are all kinds of helpful little nodes in there for managing packed sequences, orienting meshes and curves, and visualizing things. We encourage you to try to construct your own tools!