MOPS: Beyond Motion Graphics | Henry Foster | Houdini HIVE Worldwide

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
[Music] alright so next up we've got Henry Foster welcome Henry hey thanks for having me so give us a little rundown on your background sure I started as a 3d generalist in about 2006 working in Los Angeles I learned a lot of commercial motion graphics shops and then I very quickly ended up becoming more of a technical artist working it's like a tools developer and a pipeline guy working and still doing a lot of lighting and rendering and a little bit of effects work here and there and related to that I got introduced to Houdini maybe in 2010 someone showed me a melting simulation and I just thought it was the coolest thing I'd ever seen and so I've been completely stuck with Houdini ever since so motion operators mops so mop started as a partnership between myself and Mort Schindler Mantegna in 2017 early 2018 we were both working independently on motion graphics tool kits for Houdini and he somehow found out that I had been working on one and reached out to me and asked if I wanted to join his project so we each took our independent projects and kind of smashed them together into into something that we could use as a fully featured tool kit and released that in I want to say July 2018 and he Morris left the project about a year ago but it still got his fingerprints all over it and I've been developing it constantly ever since trying to refine that vision into into a fully featured tool kit No so what's the presentation today gonna be about so today I'm gonna do a really quick once-over on what mops is just in case anybody hasn't really dealt with it yet and then the other thing that I want to go into is sort of the the way that mops can be leveraged for non-traditional motion graphic setups so there's a lot of low-level hooks and things that mops is doing in Houdini that can be applied to all kinds of things including traditional effects setups and so I want to talk a little bit about that and like how mops is working under the hood and at the very end I kind of want to show off a few of the things that I've been working for the upcoming moths release looking for to dive in thank you thanks hello everyone and thanks for tuning in from home I'm Henry Foster I go by toad storm on the internet and I'm the developer of mops the motion graphics toolkit for Houdini those of you who are familiar with Houdini probably know that Houdini has a reputation of being great at making hard things easy and easy things art it's an incredible piece of software that's capable of doing just about anything you can think of but it expects you to know exactly what you're doing in return for skilled technical artists this isn't as big a hurdle as it is for those of us who went to art school and forgot all our math classes however even for those smart guys in the room there's still time spent typing out all the necessary code remembering the order of operations for matrix multiplication remembering to convert from degrees to radians or maybe it's degrees after all if you're an aged script and not vex this is time that you could otherwise be spending making art mops aims to abstract away some of that boilerplate set up work without sacrificing Houdini's power and flexibility you can think of it a little like an extra UX layer on top of Houdini everything mops does is native Houdini just with a few words of encouragement and a shoulder to cry on the initial design goal of mops was to enable something I like to call gestural animation I don't know if there's already an established label for that but what I mean by gestural animation is the ability to make lots of complex motion with just one or two keyframes you might be animating hundreds of thousands of objects and each one might be displaying very different behavior but all you're doing is sweeping your hand across and saying go that way it's a really powerful and gratifying way of animating that's used in cinema 4d mograph and Maya's mash complex behavior with simple controls mops take this a step further thanks to Houdini's open nature the core operations that mopped is doing mostly related to transforming objects are exposed to you as low-level tool nodes that can be utilized by anyone as building blocks for creating more complex behaviors and tools these nodes are all at native Houdini and vex so they can be used anywhere in your networks with few exceptions they're just setting attributes like anything else in the SAP context mobs can work both with packed primitive or instances whatever you want to call them or with points setting primitive intrinsics or template point attributes interchangeably if you prefer the traditional Houdini way of copying the points you can still use almost all of the mops modifiers to adjust the attributes of those points and then copy like you normally would if you're new to instant singing Houdini let's go over the basics we're really fast to copy an object to a lot of points you use the copy stop a copy of your input object gets placed at every point in a second input if you want to vary the rotation or scale of these copies you use what are called template point attributes that the copies up an instance object look for position and scale are pretty straightforward but rotations need to be defined as a set of three vectors these are typically the normal vector or N and Houdini the up vector and a third by normal or by tangent vector that you don't really need to worry about because you can automatically derive it from the first two these three vectors tell the copy shop which way is forward which way is up and which way is sideways the three vectors together create what's called a transform matrix that define the objects rotation and scale in space this matrix is stored in each instance or packed primitive as an intrinsic attribute which is secretly lurking in the geometry spreadsheet if each of your template points has different N and up attributes this will make each copy face towards the end vector with its vertical axis pointing towards the up vector the system allows you to be very precise and how your copies are transformed but it's not exactly intuitive to figure out which way you might want in and up to be pointing when you're used to thinking about rotations as 90 degrees left or 15 degrees up and it gets even worse when you want to animate these rotations and they're suddenly exposed to words like quaternion and slurp and now you really need a drink it's easier to just show what this framework is doing rather than talk about it so let's jump into an example for anyone who's following along at home or anyone digging into the examples later I'm using mots experimental version 1 1 1 use an imaginary situation where an art director is giving you very specifically vague instructions on how he wants to construct a creative pig heads so here's the initial ask I need a grid of pig heads can you make them look in random directions but only side-to-side and not too much okay let's make our big heads we start with a grid and okay good copy points and now their default orientation is going to be wrong so let's set up some point attributes we're going to set N to be positive Z and up to be positive Y and let's set P scale to be a little bit smaller because the default is a little too large in this grid and there's our initial pig heads so now what we want to do is get them to look left or right randomly let's say up to 45 degrees so to do that rotation what we need to think of this as is a rotation around the up axis so around positive Y left or right 45 degrees there's a few different ways to approach this but one of the most straightforward ways is to create a transform matrix because they can be easily rotated insects so let's make a matrix and now we're going to rotate this matrix randomly 45 degrees left or to the right so we need to create a random angle we're going to fit that between negative 45 and 45 next we have to actually rotate the matrix we need to convert the same with radians because matrices don't deal with degrees and we're going to rotate it around the up access we defined earlier now that we have this we can just multiply our initial normal vector by this matrix and now we should have a rotated normal vector okay our hypothetical art directors back with some notes he says can you scale them randomly well this should be no big deal right we can just use the attribute randomize stop to handle the piece scale set the attribute P scale minimum let's say is 0.2 maximum is 0.8 and we're good to go the reason we couldn't use that to be remised handle the orientation is because we were rotating a specific number of degrees around a specific axis actually randomize can do a lot of things about randomizing orientations but it's not very good at accepting very specific instructions like that that's why we had to resort to vex but for P scale this is all we had to do so we're done right of course not your art director comes back and says wait I want the ones on the outside to be really small okay I'm not sure exactly what he means by the outside but just to be safe I'm gonna make a shape that I can transfer a color attribute from use that as a mass to multiply against P scale so I'm gonna make this here I'm gonna give this fear color I'm gonna give my grid points a default color and then I'm gonna attribute transfer from one to the other transfer the color attribute see I'll change our conditions to get a nice-looking mask something like that next we're gonna multiply P scale by this value and then afterwards sour copies don't inherit that color attribute we've got a deleted great okay outsides are smaller than the inside we're good right can you make the ones in the middle look up towards the camera well this is gonna be fun the way we're going to approach this is by making a transform matrix that aims at the target which happens to be the camera in this case and then we're going to blend it with the existing transform matrix to get the final result so first I'm gonna make a point in space that's gonna represent the camera this is gonna be my target next I'm going to drop down a triangle and wire the sphere and the second input it's the first thing we need to do is to find our target matrix and now we need to make another transfer matrix that represents our current transformation next we're going to blend them together using the slurp function in Houdini 18 you can directly slurp transfer matrices but if you're at an earlier version you'd actually have to convert these matrices into quaternions first slurp them and then probably convert back to matrices again once we have the matrix defined now we're going to set an up according to this again we could bind this to orient but I'm just trying to stay consistent with N and up for now okay now the heads are looking up towards that target you can see if I move this camera target the heads are looking at it and the closer they are to the center point the more they're looking last thing I promise can you make them just Bob around a bit you should never believe in art director when they tell you there's only one more note anyways the easiest way to get around this is to use a point flop for the noise functions inside we're going to lay down some Chrome OS and then to make the curl noise easily evolved over time we can convert it to a four dimensional noise first three components are going to be P and then I'm going to use time as the fourth component in K so I want to change how quickly this involves though I'm gonna add in an extra parameter here to multiply against the input time next I connect that to the position lookup of the curl noise and then promote the other parameters then I'm just going to add the output of that to P okay those pig heads are definitely bobbing oh and now can you make them all for him into one big pig head at the end well you had to know something like that was coming so let's start by making a pig head it's going to be our goal and we're gonna scatter exactly a hundred points on it which is the same number of points that we have in the original and we got it again set some basic template point attributes for it so NZ forward and why is the up and we'll set a based peace scale for it and now we're gonna have to blend to the point position the piece scale and the orientation of these destination points in with the originals so another point rattle so let's fetch all those attributes now I'm gonna make a transport matrix out of the goal attributes that I've just defined and now I have to make a transform matrix out of my current in and up now I'm gonna make some kind of attribute to blend it two together so that handles blending the orientations together now I've got to do the same thing for P and P scale now I can animate the slider Channel and the pig heads will move towards their goal if that whole section seemed a little tedious to you it was supposed to I don't like typing out all this code any more than you like watching me do it or listening to me do it because I'm a big nerd with a loud mechanical keyboard and you can imagine it would take a lot longer if you were at all rusty with the math or with vex so let's try doing this effect again this time using a few mops notes alright let's start fresh with another pickup and I'm gonna pipe this into making mops instance sir this is kind of like a copy sob but with a lot of extra built-in controls to help make it faster I'm going to set the distribution to grid and I'm going to set size to be ten by ten to match the other that we used and then said the step to one so I've got exactly the same number of pig heads then I'm gonna set the global transform to bring the scale down to about where it wasn't the other one okay and we've got our pickets so next we get you to make them look around randomly mom's randomized has an option to randomize orientation you can pitch pick which axes you want to randomize on so I'm just going to randomize negative 45 and positive 45 around Y so that's done next I want to shrink the ones that are on the outside so to pick the region of things that I want to shrink I'm gonna use a mops shape fall off the shape fall off is more or less setting that weight or blend attribute that I was setting earlier it's just doing it with a better interface I'm gonna enable preview fall off so I can actually see what this thing looks like I'm going to set my shape to spherical and then I'm gonna scale this up a bit I'll disable this shader so it gives a clearer view next I'm gonna use the mobs transform modifier this actually sets transforms on pack primitives but it does it in their own local space it'll also work on points and just update the template point attributes accordingly so if I scale down I actually want the opposite of this effect so I'm gonna go back to the shape fall-off and just go to remap and then fit my output range from 1 to 0 instead of 0 to 1 next I want to aim these guys towards the camera so I'm gonna grab that same sphere that I made before from the last example and then use that as the guide for mops aim I'm going to set the a method to target object and then I'm just going to disable that fall-off preview really quick so I can see this a little bit more clearly now it looks like I've actually got this backwards because the fall-off needs to be higher in the middle this time around so that the objects in the middle are actually aiming at the target so I'll use a remap fall-off node to again just invert the fall-off that I had going in now all these guys are looking at the target so next I got to get these guys to Bob around a little bit for that I can use the mobs noise modifier which has all kinds of built-in noise patterns that can apply to position or orientation or scale I'm just going to tweak these settings a bit disable fall-off change the amplitude a little bit it can automatically it make this time varying noise and then change the time scale down just like I did in the other example but now it's all built in and the last thing I need to do is blend these guys in with that final pig head shape so I'm just gonna copy the template points from the previous example bring them over here and I'm gonna use mops apply attributes which is one of those low-level API nodes what this will do is take the template point attributes from this second input and apply them to the first based on some simple rules I'm gonna create a plane fall-off which just sets a flat fall-off value for everything on this side I'm gonna tell my fall-off thing to set the rotations and then replace the scales now you can see as I animate this slider everything just moves right into place you can see how even if you have the technical know-how to address the endless stream of notes all these little things start to add up very quickly and there's a lot of time spent fussing over the implementation rather than getting the shot done so you can go play Animal Crossing mops can reduce a lot of that clutter and let you think a little more conceptually rather than technically okay now we can get to the fun part unsurprisingly mops has plenty of applications in motion graphics let's go over a few typical and motion graphics examples to see how it all works together animating type is a very common thing in the motion graphics world you're rarely animating words as a whole though usually you need to be animating letterforms separately in this example we need to do a quick bouncy sort of reveal this would be pretty annoying if we had to group each letter and then keyframe transform stops and visually setting the pivot point every single time so let's not do that okay so here I have a pretty basic text setup I have a fonts up I'm extruding it and then I'm setting vertex normals the only interesting thing here is that on the fonts app I've been able to add text attributes this means that on the primitives I'm going to have attributes that tell me which primitives belongs to which letter form I'm going to need that later so first what I'm going to do is I'm going to assemble these into pack primitives and there's all kinds of built-in tools that you can use to do this but I've built one called lops convert which makes it a little bit faster and easier all I have to do is tell this thing which attribute that I want to use to define which letter form and I have that already now if I middle mouse button here I've got 10 packed fragments one for each letter if you check the attribute spreadsheet each of these packed fragments also already has a name attribute and ID attribute built in you can change the prefix or the start number that the ID starts with just in case you're trying to merge multiple streams together these attributes are used by mops in order to know what attributes to assign to what piece but they're also used by things like the packed RPD solver and order to differentiate pieces in the simulation next if we enable point display we can see that the pivots of each of these objects is in the centroid and that's not really what we want we want these things to animate up from the bottom normally changing the pivot points of packed primitives is pretty tricky you have to worry about what kind of orientation and space that they're in and you have to actually move the primitives the P attribute in the opposite direction of the pivot adjustment that you're making and that includes the orientation of the object so it can get really confusing instead I have mopsa line which will do all that for you I can just set the mode from Center pivot to align to be box and the default is negative Y which means everything will be aligned to the base line next I'm gonna animate a fall-off that sweeps across and use a shape fall-off I'm gonna rotate it into position and then scale it up a bit and now I'm gonna keyframe it animating across these letters if I enable poor if you fall off on this you're gonna see that all of the letters change color at the same time and that's because these are packed fragments and this is an issue with the viewport shader it just doesn't know how to differentiate packed fragments because of the way that are optimized so if you go to fall-off pretty view you can enable display as sprites and this will enable each of these PAC primitives as a sprite so that I can see the color changes individually next I'm going to apply the transform so I'm just going to scale down on the y-axis down to zero now this is going backwards again so I'm gonna just remap this fall off real quick now these things are popping up but I want that spring motion that kind of extra bounce that gives a little bit more character and for that there's Mop spring modifier the spring modifier is a very simple solver that adds physical forces to different attributes you can add spring forces to position rotation scale fall-off or a few other things because this is a simulation the first thing I'm going to do is just reset it just to make sure everything's clean next I'm going to adjust the mass and the spring constant this just sets the various properties of the springiness how much follow-through it has and I'm gonna set this up to only apply to scale now that's animun same animation has a little bit more bounce to it finally the last thing I want to do is just make it so that I can't see these primitives before they pop up and remember these are just regular Houdini packed primitives there's nothing special about mops primitives so anything you can do with regular PAC primitives you can do here so I'm just gonna set up a blast and then I'm gonna erase any primitives where the fall-off value is greater than let's say 0.95 since most follow-up is a point attribute I just have to change the group type two points and now these things only show up when they start animating okay on to the next example here's a quick little transition effect that you might commonly find in the motion graphics world mops can effect polygons or clusters of polygons in the same way that it effects pact primitives by using the mops explode stop to break the polygon faces into packed fragments let's get started by generating one of these rubber toy plus geometries and then we're going to remesh it so we can get some smaller faces let's set this to about a tenth of what the default is okay and then let's run it through a divide so this will give us slightly more interesting shapes I'm gonna just enable a compute duel and now we get this kind of interesting soccer ball pattern almost so now we're gonna run this through mops explode and by default it's going to take every single primitive and break it into a separate face we can check that out by going to define pieces and then enabling visualize pieces and this will show us that each of these primitives is becoming its own packed fragment you have options to also use things like clustering or a special piece attribute which would be a primitive attribute that you can use to define what gets added to what chunk for example if I turn on clustering here I can have these things automatically use k-means clustering to group pieces by the P attribute or any other attribute you need to find I'm gonna leave this at the default is just split by primitive number for this example next we want the effect to start at the tail and work its way across the head so the spread fall-off we used earlier is probably a good candidate for that now for the spread fall-off I can either use a group mask to define what the starting points are for the spread or I can use points in space I prefer using points in space for this because it's a little bit more procedural now I'll connect that to the second input of the spread fall off and then set this to be point cloud I'm gonna turn the distance threshold down because by default this is going to spread over a wide area initially and we only want it to spread to a little bit at a time I'm going to enable preview fall-off and then again because these are packed fragments I need to enable display of sprites and then I'll scale these way down because they're going to be too large by default so now I can get a clear view of the spread as it happens I'm gonna go to the animate tab and then drag across and this looks okay I might want a little bit more fall off with to soften it a bit it's a little bit better and then to make the pattern a little bit more interesting I can add a bit of noise people choose the frequency of it here and make it more visible increase the amplitude just a hair that looks okay okay let's disable false preview now we can do our first transform and use the mop to transform modifier for this first part I'm just gonna flip these things 360 degrees on local Y and what this is gonna give us as kind of a ripple effect as that animation goes across so I need to set a couple of keyframes on this you need to animate until we see the ripple go all the way across so that's gonna be about 1.4 so this is already kind of an interesting transition effect the width of it might be a little bit broad and if we want to turn that down we can adjust our fall-off width that looks a little bit more contained now I'm gonna go back to the mop explode and disable the visual eye pieces here so I can get a less colorful view of what's going on here so this is already a kind of neat little ripple effect but what I want to do is have this thing actually animate on like it's materializing out of nothing so I can do that with another mops transform modifier we're just gonna have these things scale to zero and actually it's disintegrating now which is the opposite of what I want so let's go back and make another remap fall if node and switch the input output minimum and maximum so this thing is almost where we want it but let's make it a little bit more interesting and move these pieces out of it the nice thing about mops explode is that it automatically generates a local coordinate frame for each of these PAC primitives based on the orientation of the original surface so that way if we go back here with the maps transform modifier and we translate these pieces along their local z-axis that's equivalent to the primitive normal so that can be really handy when you're trying to actually blast pieces outwards normally if you were to break something like this apart using an assemble stop or something like that these pieces would have no idea what their own local orientation is and a translate along Z would just move along world Z the Mocs explode handles a lot of that for you let's delete that and go back okay so three might be a bit much here it's tried point three there we go so because these things have already been rotated and we're transforming in local space in the following transform this means that the pieces are going to start are going to have this sort of interesting wavy motion because they're rotating as they transform we could also probably get a similar effect by adding in some curl noise or some other function in here to kind of mess up the rotation frame of these things as they move but this works pretty well by itself here's another little motion graphics toy moving objects along paths in Houdini isn't too bad the object level using chopped constraints but this gets busy very quickly if you have a lot of objects you can do it manually at the top level but you'll likely be doing it in vex using the Promethean to manually define the parametric length along the curve that you want to sample your attributes from before applying those attributes to your objects and that's not even taking into account behaviors like wrapping from the end back to the beginning or maintaining any sort of offset from the curve mop samples all that pretty easily let's start by generating the initial line that we're going to move these squads along every sample it and then to bend it into that fountain shape I'm going to use the guide process sup in Bend mode let's change the mode from root direction to access constant that just lets meet arbitrarily define an access to Bend along and then change the angle at 90 so now I get this nice I need to read Bend next I'm gonna offset this curve just a little bit from the center here then use the copy and transform sup to actually copy these things around the center now let's say I want 16 copies that seems like a decent number what I'm gonna do in order to procedurally distribute these around the center is just use a quick expression 360 degrees around the circle divided by the number of copies this means that no matter how many of these I pick I'll get an evenly distributed set of curves next let's make the squad we want to copy I'm going to use a mob instance err and these are enormous so let's make this a little bit smaller and go to the global transformations just 2.02 and then on the distribution method I'm going to change the type to the from the default grid to curve and then just grab and drag these copy curves over the template object so now I have squabs and all these curves nicely distributed there's side ways though so let's go to our orientation settings for the curve and because reorient curve is enabled I can just take this and twist the curve by about negative 90 degrees to get it into the right position if you need more precise control that you also have the ramp here another way in mops that you can orient things is by using the mops orient curves up so I disabled reorient curve here you can see that these guys have no way of knowing which way they're supposed to be facing so they're just picking sort of a default orientation there's also in anemic teen something called orientation along curve which is a South that you should check out it's very powerful for those of you who are not on 18 yet I'm just going to stick with the mobs orient curves up so these controls are more or less the same as what you have on the instance sir because it's the same sup on the inside it's using an algorithm called parallel transport which is a great stable way of generating orientation frames but it's hard to debug these if you can't see them so another really handy node that exists inside mops is bops visualised frame which just quickly generates a sort of little gnome and visualizer that points out the up normal and side vector of each point so you can see that the up vector which is represented by this green line is facing sideways and that's why my squads were all facing sideways initially so I can go to my curve orientation and then change that same twist control to negative 90 to get a better result if I go back to the instance error I can just use the mops orient curve as my template object and now they're all facing the right way next I'm going to use the mops move along spline modifier I'm going to connect my squabs into the first input and then my curves into the second input so they're all just sort of dumped onto this one line right now so I need to change a few settings under the attach tab this is where I define the starting positions for each of these things at the beginning right now all of these squabs are in the wrong place because they're being told by default to attach to a primitive number zero which is this curve right here instead I'm going to change the current select mode to use nearest now it looks like they're the wrong orientation again and that's because reorient input curve is on by default if I turn this off it's going to use the orientation that I defined on the instance err now if I go to the animate tab all I have to do is just animate the goal slider and by default these guys will slide along the curve oriented along with it and they'll wrap from the end to the beginning as they pass to the end of the curve but this is a little bit boring they're all in exactly the same place so I'm going to offset their initial position using them on to randomize I'll take the minimum down to say point 1 and the maximum point 1 just in opposite directions now you'll notice that they're randomized along the curve now but they're not actually it or not not maintaining their offset from the curve and all three axes just along the curve so what I need to do is go to my attach settings and enable maintain offset and this slider allows you to blend between the original position and the new one the best part is that this offset translates along the local coordinate frame of the curve if you want to see what this actually means you can enable visualize offset and this will draw a visualizer that shows you what's happening to that offset as these objects slide along the curve if I go back to the animate tab and change the goal you can see that that offset is persistent and stays in the local coordinate frame of each curve as it slides across this will even work if I go to the original orientation and twist the curve so you can see that the offset is actually updating according to the space of the curve you can get some really interesting twisting effects out of this I'm gonna go back and disable that visualizer now another thing I can do is I can modulate this offset based on the position along the curve so I want these things to be a little bit tighter in at the beginning and then spread out towards the end so I'm just going to use this ramp and maybe dial this in a little bit and now as they animate they start very close to the curb that they spread out towards the end now the last thing I want to change here is that it's a little bit distracting when these guys pop on and pop off and a really cheap way of dealing with that is just having them shrink towards the ends now right now if I wanted to know what the position was of each of these things along the curve I'd have to use a premie v function and an XYZ dysfunction in facts to figure out the closest parametric location to each curve along blah-blah-blah-blah-blah it's a lot of work instead I can just enable keep goal attributes and now I have an attribute telling me what the goal is in UV space and then curve number that it's attached to I can use this to derive a fall-off attribute if I set my input attribute and change it from the default and mops fall-off to goal and then enable preview fall-off you can see that the follow-up is greatest on the outsides what I want to happen is for these things that start small reach their maximum size fairly quickly and then fade out again at the end so I'm going to use the revamp function to do that then I'm gonna change my output minimum maximum again to 1 and 0 to invert that curve now if I apply a MUX transform modifier I'm going to disable that fall-off preview just to get rid of these colors I can just turn the scale down and if I go back to the move along spline and animate the goal attribute you can see that they fade in at the beginning and fade off at the end it's not bad for a few minutes work mops was originally built with motion graphics in mind but there's no reason it has to be strictly used for motion graphics it turns out that animating things happens in visual effects too let's take a look at a few different ways you could apply these tools outside of motion graphics apply attributes is mainly intended to modify other packed primitives or attributes on template points however there's nothing stopping you from using it or many other mops nodes on regular old polygon geometry here I have a model of our good buddy Paul from side-effects labs that have mangled into something more akin to the Elephant Man but let's say I only want to make it look like he was stung in the face by a storm of bees I can use it mops fall off and mops apply attributes as a kind of simple blend shape with weighted deformations something that you can't currently do with regular blend shapes in Houdini okay first let's bring in our buddy Paul and we'll subdivide them just so we have a little bit more geometry to work with okay now let's use a mountain top to mangle him and it already looks great change the height to something a bit lower lower the element size so we get higher frequency of noise let's go for worley that already looks lovely okay so let's say this is the look that we're going for now if I were to do this as a regular blend shape I can blend it from A to B but blend shapes don't accept any kind of weight channel so instead I can use mob supply attributes now the default is just going to completely transform him but I can use any of the mobs fall-off nodes to decide what parts actually get affected in what parts done I mean enable preview fall-off go to the shape fall-off here and just rotate it into a better position you think we want this the other way around and then try to get it positioned in scale so that it's just affecting his head yeah that's a little bit closer now if I go back to apply attributes disable preview fall-off I have sort of a real cheap blend shape doesn't interpolate all of the other attributes the same way at normal blend shape or a deformation wrangle would so you're gonna have to compete your own normals afterwards but this is a great way for me to turn Elephant Man Paul into stung by bees Paul here's another pretty cool effect applied to a mesh instead of points or PAC primitives mops delay can offset any point attributes including P this can give you a kind of slit scan or shutter roll effect on moving geometry okay so for this demonstration the first thing I need to do is grab a person running around so fortunately Houdini has some built-in mocap geometry that we can steal for this I'm going to grab mocap biped 3 I'm going to set his animation type to walks and turns and then I'm gonna grab walk turn at 90 left for shuttle roll effects spinning movement works really well to make things extra Wiggly rather than just moving forward next I'm gonna hide this and then drop down a new geometry container object merge that character into this network so that I can manipulate them in stops so geo skin here is where the mesh is stored now I have head walking and turning it's really exciting so let's make it more interesting first I'm gonna retime this clip because this kind of trippy shutter effect tends to work a little bit better when it's in slow motion so I'm going to change this to fit range and then bring time in to about 1 to 100 or so Maggie's a little bit more liquid next I'm gonna drop down them opps shaped fall-off now for this kind of shutter roll effect I want the top part to be delayed less or more than the bottom part so I want the axis to be vertical on this you could set it up to be whatever you want you might get some really crazy effects but for a traditional shelter roll the axis that you're delaying on is usually just either you or V in the camera view so let's align this preview this just to make sure that looks about right so before we start using mots delay because we're just using regular points here most mocs notes really prefer that you have either an ID attribute or a name attribute in order to tell what points are what that's because in a lot of situations you can have points appearing or disappearing and ID attribute is a great way to prevent a changing point count from messing up your simulation to do that I can either use it enumerates up set it to points and then change the attributes of that ID or I can just drop down a pointer angle and said I add ID we go to the point number either one works now that I have an ID I'm gonna run Lots delay mops delay delays all of your incoming point attributes including P based on the fall-off attribute multiplied by the maximum delay amount that you set so I'm gonna set this leave this at seconds and then change my maximum delay amount to be about 3 seconds and that's going to be scaled by the fall-off attribute we said earlier since this is a simulation I'm just going to reset it real quick just to make sure everything's clean and now when I play you can see that the top of him starts moving sooner than the bottom with the right kind of motion this can look just absolutely wild here he is wiggling around at full speed now if I go back up here and add some noise to this things can get really strange maybe a little too strange move along spline is a pretty easy way of getting points or primitives to move along a curve this has applications for rigging oneknob vyas example as a conveyor belt or tank treads so for this demo I'm starting with just a box with some normals on it and a polygon curve I'm gonna start by using the end sup to turn this into a polyline it changed clothes you to unroll with shared points that means that this curve is still going to be joined but the points are going to be shared so we're not going to have a discontinuity in the line that would make the orientation weird at the ends next I'm going to the sample choose just the subdivision curves then out a pointer angle set the piece scale to and then let's copy to these points so these are in the wrong orientation but we can fix that either on the spline the move along spline modifier or we can add up mops orient along curve I'm just gonna use the spline modifier to do this first I'm gonna make sure that these are packed and then I'm gonna generate an ID attribute for these using enumerate so there's two points if they actually do ID and now I can use this apply modifier so the default is already pretty close it's almost aligned there's some nasty orientation on the edges here though so I'm gonna go down to my reorient settings I think what I'm gonna do first is actually resample this again because part of the problem is I have the right number of samples to just drop these copies on the input curve but I don't have enough to smooth out the orientation here just yet so if I enable resampling change this to subdivision curves and then lower my lengths quite a bit now I'm going to get smoother bends around the edges here that's perfect and now all I would need to do is set an expression on the goal and I already have a pretty good start for doing something like tank treads or a conveyor let's select down a bit so you can see how this would be really useful for the beginning of a rigging setup for something like this that needed to have treads and you can imagine how all of the other mops modifiers that are built to change the orientation of curves rotate objects in their local space and so on could be useful in a rigging context when you're deforming objects and stops fall off nodes and mops are really really versatile all they're doing is setting a single point attribute according to some simple rules considering how much you can do with point attributes in Houdini in general you can imagine this makes fall-off applicable almost anywhere in Houdini in this demo we'll use fall-off notes to our director destruction sequence and then use a couple other mops notes to fine-tune the results okay so first things first we've got a shadow squad I'm going to break this into let's say 500 pieces I'm gonna use the assemble stop to convert this into packed fragments that are prepped for our Reedy destruction create pack geometry and you can see I've got well approximately 500 pieces next I'm going to add an ID attribute I could do this with mobs convert or I could just do this with an enumerate stop like I have them now that my initial setup has figured out what I want to do is have these pieces collapse starting at one end of the squab and working their way back and again spread fall-off is a really good example for this this guy is oblong enough that I could probably get away with a shape fall-off but the spread means that I don't have to worry about pieces falling off before the piece in front of them falls off it'll look a little bit more natural here and then again I'm gonna build some kind of control that I can use to direct where the spread starts the sphere is perfectly good for that so that's sort of right in the middle of where all those tentacles set next I need to check the fall-off and for that again I'm gonna enable preview fall-off and then display this as sprites because these are packed fragments and not regular packed primitives so I need to change my start points mode to point cloud' my distance threshold is about right so I'm going to go to my animate tab and take the search radius down a bit now let's check to see how it spreads so it's starting at this end on the tentacles and then working its way up the body that's about where I want it let's add a little bit of noise as well I'm going to go back and have the spread midway through so I can see the noise a little bit more clearly I think I want this to be bit noisier so I have some chunks kind of falling off a little bit more out of order not too much let's bump the frequency up just a bit yeah that looks about right what I'm gonna do with this fall-off attribute now is I'm going to make it so that when the fall-off reaches a certain threshold the pieces are going to become active impact are beedis you have an integer style attribute called active that if it's set to zero a piece will act like a passive rigidbody it won't move at all but if you set the active value to 1 the rigidbody becomes active and you can update that in the middle of a simulation if you have your rigid bodies properly configured this means that as this fall-off spreads across the pieces will activate and they'll drop to the ground the way I'm going to do this is with an attribute expression sup the attribute I'm setting is going to be custom and it's going to be active the active attribute is an integer this is really important you can't cast it from a float it has to be an integer attribute in order for the bullet to understand it and the expression is going to be mops fall-off is greater than point nine so if I go to the spreadsheet you can see that I have an active attribute now on these points and it's set to one on a handful of them and then as a spread increase is they all eventually become one now I'll need to keyframe this spread value so I'm gonna start it at zero set a key and then at about frame let's say 96 I'm gonna set this to 0 how high I need to make it let's do 1 point 2 to be safe okay now let's send us it adopts I have an RVD packed object it's gonna be loading objects from the first contacts geometry now this is important because I'm changing active in sups I'm changing that attribute I need to enable overwrite attributes and active is one of the default once it accepts this means that as the active attribute changes on the original points and stops its going to be reflected in dots if you don't enable this nothing will happen now I'm gonna drop down rigidbody solver was default to bullets so all I have to do is why are these in and it's good to go gravity force and now I should have a ground plane for these to collide with I'm gonna lower it a hair I know it's normal you want the ground plane at 0 but I already set this up so we're just gonna roll with it I'm going to merge the ground plane in with the existing stream connect it to the output and now if I rewind oh I need to change I need to get rid of my fall-off preview okay so now I have my objects ready to go and if I run the simulation now as the pieces become activated they drop to the ground and that's just driven by a single fall-off attribute okay so back in stops I've cashed this whole simulation out and now I can just play it back really quick and it's a few things about this that I don't like I've got this big chunk right here that's rock but rocking back and forth all over the place and that just looks a little weird to me and I've got this little piece out here that's just going absolutely hog wild and I want to stop it before it gets to that part so I'm going to use a couple of mops notes to fix that first I'll do this big piece I'm gonna select it and then hit delete to blast it and then set this to delete non-selected so I've just isolated this chunk next I'm gonna find the time that I want to lock into let's say 105 is a decent rest position so I'm going to time shift this piece to 105 and I'm gonna run mops extract attributes extract attributes we'll take the primitive intrinsics that define a pack primitives transforms and convert those into template point attributes that you would use for instancing mops apply attributes also reach those same template point attributes when setting gold transforms for things so I'm going to extract the transforms from this piece and then apply it back to the original cache and use fall-off the blend between the two so it's making apply attributes I'm going to set the group on apply attributes to be the same as this primitive number so I'm just affecting that single one so 226 I'm going to set my rotate mode to set in the scale mode to replace that means that the transforms from this extraction operations are going to completely overwrite the ones in the main simulation and I'm going to connect the two together so if I disable fall-off you can see that that thing is completely frozen in place so now what I'm going to do is actually set a fall-off attribute to do that I'm going to use mocks playing fall-off I'm gonna target that same piece to t6 and I'm gonna start blending it let's say right here and finish maybe 10 frames later now when I play this back at piece and it makes into the right position it blends and then stops where I wanted it to stop this takes a little bit of finesse to get right sometimes but a lot of the time it's better than simulating all over again now let's get that other piece I'm gonna go back to my original file cache select the same primitive and delete again I'm gonna rewire this I'm not messing up my pointer delete non-selective so now I just have this piece I'm gonna find a frame that I want to be the goal transform it's laying flat right here that looks good enough so I'll time shift into 148 and then I can just merge these streams together run the extract operational at once now I just have to add this other primitive 350 to the same mask for apply attributes and again I'm gonna have to make another plane fall off because the timing isn't exactly the same between these two going to apply to 350 and now let's figure out the timing to blend this let's say we'll start somewhere around here then finish around here at 147 now you can see that little piece that was going nuts before blends into that resting place and it looks fairly reasonable now there's obviously a lot more chunks wiggling around that I would want to fix and maybe for this particular simulation I might just want to have better practice as an RVD to reduce all that jitter in but if you have a really really difficult RVD simulation and just a few annoying pieces that are wiggling around this is an easy way to just get those transforms to do what you want without having to be simulated say I want to do one of those instagram-worthy animations where this thing puts itself back together again I can do that pretty easily with just another apply attributes to set a new goal transform I'm going to do this with a spread fall-off now I want to do this spread in sort of a fixed orientation so I'm going to go back to my original geometry before the simulation and connect that as my input geometry I'm gonna make another sphere as my initial target I wanted to start from the center and then work its way outwards so we'll go forwards a little bit here towards the end of the simulation I mean a preview fall-off display as sprites scale with sprites down change this to be a point cloud so it's reading my sphere as the input point I'm going to turn my distance threshold down just a bit and then let's go to the animate tab and check our spread may need to increase the distance threshold just a little bit more there we go I just want to get that first blob to show up now I can go back here check the spread that looks good turn this back down just a hair and then let's dress it up a bit with some noise let's check the spread again that looks pretty good it's coming out from the center but not too evenly now what I'm gonna do is copy this fall off from the static position back to the animated geometry so the animated geometry goes in the first input spread follow four results go in the second I'm gonna copy mouse follows now I can do one last apply attributes I can use the results of my simulation as the first input and the original geometry as the second I set my rotate mode to set and my scale mode to replace so the transforms are just simply blending it looks like it's working so all I need to do now is animate my spread this looks like about the end of most of the interesting motion so I'm gonna set a key here and a key here and while we're at it let's turn off these sprites so now I've got an RPD destruction that I was able to do some tweaks to without having to risa me late and I can get these pieces to lift up and form the top Center first so that I don't get them colliding on top of each other too much and blend back into the original position so you can throw this straight on Instagram and everyone will love you let's talk very quickly about what's next for mops as some of you might be aware I've been developing some new mops tools over the past several months that I haven't yet released to the public there's a lot of work left to do on them on top of updating the existing open source tools so I don't have a definitive release date yet but I wanted to take the opportunity to officially announce mops Plus and briefly show you some of the new toys mops plus is going to be a paid add-on for mops that adds new tools for both motion graphics and visual effects in the same spirit as the original nodes there's going to be some new soft tools but the biggest upgrade here is the integration of mops into Dobbs this means that you can use mops like interfaces to control physical forces natively inside Houdini the new mops apply attributes dot operates in much the same way as apply attributes and sobs in that it sets a goal transform for points or pact primitives but also allows you to apply that goal use regular forces wind forces or by directly updating transforms this apply attributes table just like regular mops is these as a framework that other adopt forces can be built on including a straightforward transformed up as well as more complex forces like noise fields or moving along splines or meshes all of these forces respond to fall-off attributes and there are fall-off dots now to the mops typography stop is a new saab that aims to make working with type a little bit easier in Houdini it is built-in controls for managing outline quality extrusion bevel quality and it can output attributes in order to separate lines words or individual letters for easy grouping later it also supports word wrapping within the bounding box it even has a kerning handle so you can make kerning adjustments to individual letter forms the resulting pact primitives are automatically aligned to the baseline for easy transformation here's an example of the new mop stops nodes I'm using a combination of mop supply attributes mops object fall-off and mops transform in Dobbs to scale these pig heads based on a moving fall-off object and stops this very simple example shows how intuitive mop stops can be I'm just randomizing the transforms of these cubes and then connecting them to the input to of this dot network the mop supply attributes dot can use the transforms of those randomized primitives as gold transforms for original cubes and it computes the forces necessary to reach those goals it's a very straightforward way of guiding pops our VDS or even Vallum geometry to a target to wrap this all up I wanted to point out where you can look for help with mops the mops wiki on github is the first place you should look for tutorials installation help and an overview of what all the different nodes do complete with gifts the mops tutorial series on the wiki is the perfect place to start learning about how the whole system works and it includes example files that you can download and play with along with more gifts I'm constantly adding to it and the full tutorial series should be completed in the next couple of months every node in mops also has a help card for information on every individual control in parameter if you need help beyond what's available there you can sign up for the mops forums or you can try that mops user's group on Facebook and finally you can just reach out to me directly if you can't post your seen publicly and that wraps up this presentation thanks for watching and please reach out if you have any questions at all
Info
Channel: Houdini
Views: 13,769
Rating: 4.9449539 out of 5
Keywords:
Id: irAK6bw_Vnc
Channel Id: undefined
Length: 62min 17sec (3737 seconds)
Published: Fri May 22 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.