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.
INSTALLATION PROCEDURE HAS BEEN SIMPLIFIED FROM PREVIOUS RELEASES. PLEASE READ CAREFULLY.
You need to download MOPs from GitHub and then save them somewhere on a local drive or network share. You can install MOPs pretty much anywhere you like except:
-
Do NOT install to $HOME/houdiniXX.X or $HOME/houdiniX.Y. These are your preferences directories! Only the JSON goes here!
-
Do NOT install to your Houdini program directory!
Option 1 (users who are familiar with Git):
Navigate to the folder you want to contain MOPs, and from BASH / Git BASH type:
git clone https://github.com/toadstorm/MOPS.git
Option 2 (what's Git?): Download the desired release directly from the releases page and extract it to your hard drive or network share.
Option 1: Plugin (17.5+ only) First, locate your Houdini configuration directory. This is where houdini.env typically is:
- Windows:
My Documents\houdiniXX.Y
- Mac OS:
~/Library/Preferences/Houdini/XX.Y
- Linux:
~/houdiniXX.Y
Next, look for a directory in there called packages
. If it doesn't exist, create it. Copy MOPs.json
to the packages
directory.
Then edit MOPS.json and change the MOPS
variable to match the MOPs install path you chose in step 1 (the directory that contains "otls", "scripts", and so on). On Windows, make sure to use forward slashes (/
) instead of backslashes (\
) when separating paths. For example, if you extracted MOPs to C:\VFX\MOPs
, you would change the value of the MOPS
variable at the top of the JSON to "C:/VFX/MOPs"
. That's it!
To verify your install, open Houdini and drop down a Geometry container, then dive inside. If you see MOPs nodes in the Tab menu, the installation was successful. You can also check the "+" button next to the Shelf menu and look for a shelf called "MOPs" to verify your installation.
Option 2: Edit Houdini.env
You need to add the MOPS installation directory to your Houdini environment file. For more information about the Houdini environment file, see this help link.
Edit your houdini.env file and create a variable called MOPS that points to the new folder you just extracted MOPs to. The folder you point to should be the one that contains "otls", "scripts", and "toolbar":
MOPS="/path/to/MOPS"
Finally, add $MOPS
to your HOUDINI_PATH:
HOUDINI_PATH=$HOUDINI_PATH;$MOPS;&
If you already have a HOUDINI_PATH defined, you can simply append $MOPS to that existing HOUDINI_PATH. For example, if you're using both MOPs and QLib:
MOPS="/path/to/MOPS"
QLIB="/path/to/qlib"
HOUDINI_PATH=$HOUDINI_PATH;$QLIB;$MOPS;&
Note: On Linux and OSX, use :
instead of ;
to separate your paths.
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.
To ensure that the installation worked correctly, create a Geometry container and dive inside, then look for the "MOPs" entry in the Tab menu. Also look for a toolbar called "MOPS" in your shelf list. The MOPs Shelf contains some handy tools complete with their own documentation.
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.
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 Henry Foster. Additional contributions by Moritz Schwind, Adam Swaab, Jake Rice, Ian Farnsworth, Kevin Weber, Matt Tillman, 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.