BASH is a film produced internally at Mainframe to celebrate the release of the MASH Dynamics node in Maya 2018.

We set out to create a selection of experimental, dynamic scenes using simple primitive shapes as the base objects. That original concept stood fast but the process itself also resulted in serving a far higher purpose than pretty pictures alone.

We first heard the term ‘eat your own dog food’ when we joined forces with Autodesk in 2015. The project didn’t start out as R&D. It was simply meant as a promotional piece to celebrate the fact that MASH now has a Dynamics node. Something we’ve craved since MASH’s inception many years ago. What became quickly apparent was how effective this process was at exposing any bugs during our development cycles. It’s amazing how often a 3d artist, on trying out a new feature, will gravitate towards the one thing that’s not working properly or try to do something we hadn’t thought of in development. So we ate a lot of dog food and the more we ate the better it tasted. The process really informed our approach to MASH Dynamics in development and contributed to another powerful addition to MASH’s arsenal. Oh, and we made a lovely promotional piece along the way.

All these scenes were put together during the development of Maya 2018 so it’s entirely possible there are better ways of doing some of these things now we have a full release version. That said, all scenes have been tested in the Maya 2018 release (on OSX at least) so we hope the notes below help you understand and familiarise yourself with some of the processes and techniques we used in creating BASH.

Scene files -
Tutorials -

Note - all scenes require Maya 2018. Let us know via if you have any problems (or love!). Please bear in mind we’ve provided these files as a gift for you to play with. We may not be able to answer every question.


1. Hedgehog

By Ben Black

The “spines” are simply cylinders distributed onto a hemisphere (Mesh Distribution). Add a Dynamics node and then add a Constraint to it. Set the Constraint to Spring and under the Spring roll down, uncheck Enable X, Y, Z under Positional Spring and Enable Y under Rotational Spring (leaving only the X and Y rotation). The Platonics are set up in a grid distribution above the hedgehog and simply fall onto it. I’ve used a Gravity field (add to the BulletSolver) to trigger the platonics fall.

2. Egg Collection

By Matt Oxley

More of a ‘hand made’ set up. The Ball, Torus and Egg are all separate MASH networks using Transform nodes to position them. Both the Torus and the Egg have Initially Sleeping checked under the Sleeping roll down on their Dynamics nodes. This keeps them inactive until something collides with them. MASH_Platform is another network positioned with a Transform node (you could use Initial State instead if preferred). It them has a Constraint added to its Dynamics node. Its Type is set to Custom and then under Limits all Positional Limits are set to Fixed along with Y and Z for Rotational Limits. Limit Type X is then set to Limited with min/max settings of -45 and 0.

3. Sticks

By Ben Black

Create a Grid Distribution and add a Dynamics node. Add a constraint to the Dynamics node and set Type to Spring and Connection mode to Connect to Offset Point. Under the Spring roll down uncheck Enable X, Y and Z under Positional Spring. This restricts any movement to rotation only. Hand animate the spheres and and then add them to the BulletSolver as Collider Objects.

4. Signal Fins

By Jack Brown

Really simple.

Create a Radial Distribution with your Fin. Add a Signal node, set Signal Type to Trigonometry. Put a value into Position Y and play with the Trigonometry Settings to get the movement you want.
For the ball, create a MASH network with Number of Points set to 1. Add a Transform node to position it, then add a Dynamics node. You then just need to drag the Fins ReproMesh into the BulletSolver as a Collision Object.

5. Signal to Dynamics

By Chris Hardcastle and Ben Black

An example of using the MASH Bias attributes to trigger Dynamics halfway through a sequence.

A very simple set-up using a Signal node set to Trigonometry to create the wave animation. The Position Strength attribute under the MASH Bias roll down on the Dynamics node is then keyed from 100 to 0 over frames 50 and 51. Think of MASH Bias as a force. Setting Position Strength to 100 is putting MASH in charge, setting it to 0 is handing over the reins to Dynamics (Bullet). You may need much higher values in some circumstances.

6. Fill Up

By Ben Black

The platonics inside the invisible jar are a simple mesh distribution onto a disc. The Number of Points is then animated from 1-700 creating the filling up effect. The Ball and Lid are separate Dynamic MASH networks that have been positioned using Transform nodes. The invisible jar (ContainerShape) is then added as Collider Object onto the BulletSolver.

7. Slides

By Ben Black

Two MASH networks. The MASH_Balls network is a Grid Distribution with the MASH_Slides network linear. The MASH_Slides_ReproMesh is then added to the BulletSolver as a Collider Object. There are also two Gravity Fields (again, added to the BulletSolver’s Fields) which are being used to control the speed the spheres hit the slide.

8. Mixer

By Ben Black

Each tube of spheres is a MASH network distributed along curves using the Curve node. The tubes are then created using CurveWarp with the same curves as inputs. The tubes are added to the BulletSolver as Collider Objects, as is the spinning Mixer at the bottom. Due to a bug in the 2018 release we’ve added this via a ReproMesh (Offset node used for the rotation) rather than as a simple rotating object. The horizontal tube network also has a gravity field added to push them along.

9. Bad Piano

By Matt Oxley

MASH_Lollies have are placed using a simple Linear Distribution in Y and Z. Under Ramps on the Distribute node the Bias Ramp has been adjusted slightly to give more room for the bigger lolly. This has been scaled up using an Offset node with a Ramp. The same Offset node has then also been used to position it higher in Y. This network then has a Dynamics node added and Use Mass as Density is checked to give the bigger lolly more mass. Note - the lolly has been grouped as a two part model (stick and head) with that group added to the Repro/Instancer and then Collision Shape set to Convex Hull. MASH will add a collision shape for each object within the group. This can help get more accurate/stable results.
MASH_Keys have been created using a Linear Distribution. The pivot points for each key have been carefully placed (and baked) to ensure the even distribution. An Offset node has then been used to move the black keys up in Y. Have a look at the Filter On attribute under the Strength rolldown. The Position and Rotation Strength under MASH Bias on the Dynamics node have then been given fairly high values to keep them in place when the lollies hit. The keys also have a fairly high mass to make them harder to move.

10. Suck It Up

By Alex Dorman

A simple example using Maya’s native dynamic forces in conjunction with MASH Dynamics.

Simply create some Platonic Solids and lay them out in your scene. Then create an object you would like to instance onto the edges of the Platonic. With that object selected create a MASH network and set Distribution Type to Mesh and Method to Edge on the Distribute node. Then drag your Platonic into the Input Mesh slot. You can additionally play around with Face/Edge Settings to get the desired layout as well Number of Points.
Add a Dynamics node to the MASH network and then under Constraints, right click to add a Constraint. Set Constraint Type to Glue and check Breakable. Set Connection Mode to Connect Touching.
Now to add forces, In this example I created a simple dynamic spline rig and attached a VolumeAxisField to the dynamic spline. Then you can drag the VolumeAxisField into the Fields slot located on the Bullet node created when you add MASH dynamics. I also added a Drag Force.
Settings that helped in this example were Maximum Velocity located on the MASH Dynamics Node, this helped keep control of the movement of the sticks as they were sucked up the tube.

11. Flight Crash

By Chris Hardcastle and Ben Black

Hooking a Flight node up to Dynamics

A really easy one. Create 6 cones > With them selected create a MASH network > Add an ID node > Add a Flight node > Add Dynamics > Set Position Strength under MASH Bias to e.g. 60 > Set your Ground Position on the BulletSolver to match your floor plane (or add your floor as a collider).

12. Gherkin Elevator

By Jack Brown

Using one MASH network as a collider for another.

MASH_Steps is a simple Linear Distribution of cubes with a Signal node set to Trigonometry and a value set to Scale Y. MASH_Gherkins is then another Linear Distribution of cubes but with Number of Points keyed to increase over time to get them to pop on. A Random node is then used to vary them up a bit. Having added a Dynamics node you can then select the associated BulletSolver and drag the ReproShape from MASH_Steps in as a Collider Object. With animating colliders it’s important your Collision Shape is set to Mesh. Automatic should work fine but if you have problems you can find this setting on the ReproMeshShape node under the MASH rolldown. I’ve then used an airField to push the ‘gherkins’ towards the steps. Drag this into the Fields roll down of the BulletSolver.

13. Airbag

By Chris Hardcastle and Matt Oxley

Another one using MASH Bias

Create a grid of cubes using MASH (MASH1) and set them out so they butt up to each other > Create a second MASH network (MASH2) and set out some objects in a linear distribution > Use a Transform node to move MASH2 above MASH1 > Add a Dynamics node to both MASH1 and MASH2 > On MASH1 open the MASH Bias roll down and set Position and Rotation Strength to anything above 0. > Hit play.
The MASH2 cubes should fall and push the MASH1 cubes out of the way with MASH1 then trying to return to their original positions/rotations. Play with the MASH Bias settings to adjust the effect. If you then add a Random node to MASH2 and set some random scales you can then experiment with the Use Mass as Density setting on MASH2’s Dynamics node.

Checking this attribute means MASH will calculate the volume of each object and multiply its mass accordingly meaning bigger objects will have greater mass and apply a larger force on the cubes in MASH1.

14. Fruit Sorter

By Jack Brown and Matt Oxley

MASH_Fruit is a simple Grid Distribution with an ID (random), Transform and Random node to position them. MASH_Container is then network where we’ve dialed the MASH Bias values on the Dynamics node up very high so that the Signal node stays in charge of the up and down motion. We’ve also adjusted Maximum Velocity to try and dampen the effect of the Signal node so all the fruit doesn’t get thrown out of the container.

15. Pipe Dreams

By Alex Dorman

An example of using MASH’s custom constraints.

A very simple set-up using four MASH networks for layout. The MASH_Pipes network is dynamic, whilst a second network named MASH_Constraints which has identical distribute settings is used to provide points to which the MASH_Pipes network is constrained to. > Add a Constraint to MASH_Pipes Dynamics node. > On the Constraint set Type to Custom. > Under the Limits > Positional Limits rolldown set Limit Type X, Y and Z to Fixed and then under Rotational Limits set Type Y and Z to Fixed and leave Type X set to Free (or Limited). The MASH_Ball network then drops under gravity and MASH Dynamics takes care of the rest.

16. Unicycle

By Matt Oxley

Three networks. MASH_Wheel is simply using Signal to give it some movement. Its Repro is then added as a Collider Object on the BulletSolver. MASH_Objects is a selection of objects distributed using Initial State on the Distribute node and an ID node. We’ve set the Collision Shape to Convex Hull here but if you wanted different Collision Shapes for different objects you could simply create separate MASH networks for each of them. MASH_Balls is then a simple linear distribution of spheres positioned with a Transform node.

18. Platonic Crumble

By Jack Brown

Couldn't be simpler. Create a ‘stick’ and then use a Platonic Solid (new in 2018) to create a Mesh Distribution (Method = Edge, Flood Mesh). Add Dynamics > Add a Constraint > Check Breakable > Set Maximum Constraints to something like 10 (to give it more solidity). I’ve then keyed the Breaking Threshold to give it that secondary collapse.

19. Eggsaw

By Matt Oxley

MASH_SeeSaws is a Grid Distribution with an Offset node controlling positioning and rotation. The Dynamics node has a Constraint added to it. Type is set to Custom, Connection mode is set to Connect to Offset Points and then all limits are set to Fixed except for Rotation Y and Z. The MASH_Eggs1 and 2 are then simple MASH networks with Transform nodes to position them and Dynamics nodes.

19. 64000

By Chris Hardcastle and Ben Black

We’re just showing off here. C4D won’t get close to this many objects with its Bullet implementation without crashing. In our tests we’re also running at higher frame rates than Houdini’s RBD.

Create an object (start with a Cube!) > Create a MASH network > Set Distribution type to grid > Set Distance X, Y, Z to 50 > Set Grid X, Y, Z to 40 > Add Dynamics > Set Playback speed to ‘Play every frame’ > Press play > Wait/Look on in awe.

In this scene we’ve also set up a second MASH network for the pyramids and just set the Mass very high on their Dynamics node so they hold their ground as best they can against the onslaught of platonics.

Turn Grid X, Y and Z up to 40, 40, 40 on MASH_Spheres_Distribute to get the full 64000 object experience. We’ve dropped the values to save your CPU on open.