Skip to content
Motion OPerators for Houdini, a motion graphics toolkit.
Branch: master
Clone or download
Latest commit 773fc68 Mar 12, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
otls fixed spring mod rotations Mar 12, 2019
scripts/python mops_tools cross-platform compatibility Mar 2, 2019
toolbar updated move along mesh controls to act more like move along spline, … Feb 17, 2019
.gitignore removed point N from mops explode fragments Dec 24, 2018
VERSION.txt updated VERSION Mar 12, 2019
mops_logo_01.png logo resize May 30, 2018


MOPs logo

Motion OPerators for Houdini, a motion graphics toolkit.

MOPs is intended to be an easy way to manipulate lots of copies of things, leveraging Houdini's packed primitives. The goal is a familiar and fast workflow for motion graphics artists migrating from other platforms, as well as a powerful toolkit for more experienced Houdini artists to quickly design and execute new effects.

MOPs is based on an internal framework of nodes that convert point attributes to packed primitive intrinsic attributes and back again, making it easy for technical artists to develop new MOPs modifiers.



Option 1: Navigate to the folder you want to contain MOPs, and from BASH / Git BASH type: git clone

Option 2: Download the desired release directly from the releases page and extract it to the desired location.

Next, edit your houdini.env file and create a variable called MOPS that points to the new folder: MOPS = "/path/to/MOPS"

Finally, add $MOPS to your HOUDINI_PATH: HOUDINI_PATH = $MOPS;&

It's important that your HOUDINI_PATH always ends in ;&. You can append any other paths you like, but the last path should be &. This will ensure that Houdini's built-in operators work normally. On Linux and OSX, use : instead of ; to separate your paths.

If you want to use the old installation procedure, set the following environment keys in houdini.env:

HOUDINI_TOOLBAR_PATH = $MOPS/toolbar;@/toolbar
HOUDINI_SCRIPT_PATH = $MOPS/scripts;@/scripts

Usage basics:

The main types of nodes in MOPs are the Generators, Modifiers, and Falloff nodes. Generators like the MOPs Instancer create copies of objects. Modifiers transform or otherwise change the objects. Falloffs weight the effects of Modifiers.

The simplest network to start with is the MOPs Instancer. Create a Instancer and an empty File SOP, then add the File SOP as an Instance Object under the MOPS Instancer > Instances tab. The Instancer will create several copies of the File object. If you want to copy onto another mesh, you can change the Distribution Type to Mesh and select an Input Mesh to copy to. If you add multiple Instance objects to the Instancer, by default they will be randomly selected for each instance. You can use the MOPs Index From Attribute node to determine exactly which objects will be instanced where.

Append a MOPs Transform Modifier to the MOPs Instancer. Try playing with the rotation and translation settings. Next, connect a MOPs Shape Falloff in between the MOPs Instancer and the Transform Modifier. The Falloff node by default will change how much the Transform Modifier affects the objects upstream. If you want to reposition the center of the falloff effect, connect a MOPs Transform Falloff node to the second input of the Shape Falloff. All MOPs Modifiers by default will respect the Falloff value assigned to incoming points.

For more detailed examples, see the "examples" folder for HIP files.

Data analytics:

MOPs optionally collects data about what MOPs nodes are being used via Google Analytics in order to help us prioritize development and get feedback. The only information associated with an individual user is a randomized UUID. By default, MOPs follows the same permissions as Houdini does when collecting data (i.e., if you opt out of Houdini's collection, we will not collect either). If you would like to set an override on this behavior, you can add the key MOPS_ALLOW_ANALYTICS to your houdini.env file. Setting MOPS_ALLOW_ANALYTICS = 1 will allow the collection to go ahead. Setting it to 0 will always disable it, regardless of your Houdini data collection settings.


This section is in progress.

MOPs is essentially a handy front-end for manipulating the transformations of Houdini packed primitives. The main node that handles these transformations is the MOPs Apply Attributes SOP. This SOP takes input packed primitives and a matching set of input points with typical instancing attributes, such as p@orient, v@scale, etc. and uses those attributes to modify the primitive intrinsics of the packed primitives in predictable ways. The MOPs Extract Attributes SOP can operate in the other direction, taking the primitive intrinsics and generating instancing point attributes from them. The Falloff nodes create a point attribute called @mops_falloff on the points, which MOPs Apply Attributes will use to weight the applied effects.

Reserved point attributes include:

  • f@mops_falloff: the falloff value generated by Falloff nodes. A value of 0 implies that no effect will take place.
  • i@mops_index: The index attribute used to decide what object is cloned to what point, if multiple objects are connected to the MOPs Instancer multi-input.
  • p@mops_orient: An orientation offset to allow for changes of the local rotation frames without actually rotating the object.
  • v@euler: Created internally by the Transform Modifier. If detected, the Apply Attributes SOP will apply these rotations to the incoming points instead of using p@orient. This is to prevent flipping when animating rotations beyond 180 degrees on a given axis.

MOPs is developed and maintained by Moritz Schwind and Henry Foster. Additional contributions by Adam Swaab, Jake Rice, Ian Farnsworth, Kevin Weber, and Luca Scheller.


This software is provided AS-IS, with absolutely no warranty of any kind, express or otherwise. We disclaim any liability for damages resulting from using this software.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.