 Okay, so let's keep moving on with our grass clump here and I'm going to name this wrangle node here to ramp adder All right, just so I can find it easily Okay, so Let's go and let's take care of our directions now and let's get some scattering going on So what I want to do is in my attribute wrangle node here. I'm going to get rid of the power Stuff because I'm not going to use that one Now that'll leave behind this spare parameter. At least that's what they call them, right? This is a spare parameter now So what I want to do is I want to go and hit this little cog wheel up here a little gear hit Edit parameter interface and just get rid of that slider. I don't need that anymore. I'm gonna hit accept There we go. We're just going to use this fall off here for now All right, so I'm just gonna kind of do something like this may pull that in a little bit more. That's good cool all right, so Instead of assigning this to the color, I'm actually going to assign this to a built-in Attribute that Houdini specifically looks for and especially when you're looking when you're trying to scatter points and that's called at density And there we go spell correctly All right, so what I want to do is just assign that ramp value to my density value Cool, so now the color has gone away That's just because we're not assigning color anymore, but we are assigning to this density value And this is great because I'm going to drop down a scatter node now like so and Turn this on here and we have this scattering of points on our particular Rematch so we're we're getting rid of the geometry. All right, which we can utilize later, but for this particular Exercise I just want the grass clump itself just the grass blades. So this is going to work out perfectly All right, and they all have normals on them, which is fine It's cool. Yeah, what I want to do is I want to create directions So we need those radial normals back. All right, and I also want to start to utilize that density value So I'm going to select the scatter node here and we want to make sure that we are generating them by density And then we want to utilize that density attribute that's built into Houdini here So you can see that our density now is being driven All right, so let's just actually template our remesh node here But our density is being driven now by our ramp So now we can clump together the grass blades in a very custom way. So we can allow the user to adjust this stuff Very cool All right, so we're not going to need that many points I mean you can use that many points if you want it's currently set to a thousand. So well, I'm going to put down something like 30 Okay, and we can pull that in even more Like so, so we just pull this guy in a little more there like that Maybe we do something like that Looks good for now Cool. So now what I want to do is I want to create those normals again All right, and we're also going to create a couple other directions. So we're going to call this our scatter directions Scatterders as I usually like to call them All right, so the first thing I want to do is I want to get the center again Okay, so In this case, I want to get the center from the remesh node So what we can do is we can drop down an object merge node and I'm going to say get remesh or get clump mesh All right, and what I'm doing is I'm actually just importing the mesh from that step in the network So I'm going to get that remesh node there And except and you can see that I have the remesh in there and I'm just doing that so I can pump it into The first input there or the second input But it has an index of one I can use that now and I can say my vector Center is equal to the get baby box center, but from input one Or the second input on the attribute wrangle node there So now I'm getting the center and that I want to do that because the center isn't necessarily world center anymore Because the shape has been offset by the noise All right, so let's go and now Create our radial normal. All right, so we're going to say at n is equal to our at p minus our center All right, you can see they all radiate out now from the center But you can see that the guys in the the middle here are really small the normals aren't actually Normalized and so what we can do is we can just put this into a normalized function like so There we go. So now they're all the the same length The next thing I want is I want the ability to Define the right direction and the up direction for these particular normals All right, and this is useful when you really really want to have a lot of control over how your cards are facing in your grass clumps All right, so to do this. It's actually quite simple What I'm going to do is I'm going to declare a new variable called v at right And this is going to be equal to the cross product All right the cross product of at n and the world up vector Okay, and I want that because what'll happen is it'll give me a perpendicular Normal if you will or direction to each of these normals so we can actually visualize that here inside of a game I'm going to drop down a visualize node Okay, I'm just going to pump in the output of our Scattered error node there and what I want to do is I want to turn on the visualize node go to the visualizers tab there and I'm just going to give it a name of Right and a label of right and then the attribute that we want to display Is this right direction right here? So you can see in our geometry spreadsheet We have the right Normal, so if I just type in right like so and then set the type to marker and the style to Vector you can see we now have this perpendicular vector or direction to our normal for every single point All right, and so let's actually just rescale that so we can see it a little bit better Cool So what I can do now is give this a color. So I usually give the right direction a red color All right And the last thing that we want to do is just to find the the up direction in this case this one's easy because We just want to use the world up. So I'm just going to say that v at up All right or that stands for a vector And the attribute is called up and these are built in both right and up are built in Attributes for Houdini. All right, so I'm just going to sign that the world up vector And then again, we can go and visualize it So what I'm going to do is I'm going to select this node right here hold down alt on the keyboard Click and drag it and it creates a copy. That's why I don't have to set up too much More so I'm just going to say up up and then Up for the attribute and then just give it a different color Like green there we go Voila, we now have all of our colors or not colors our directions that we need in order to copy Our grass cards to each one of these points cool All right, so the last thing I really want to do is I want to give it some noise because right now All of this is a little bit Too perfect. It's a little Too radial. All right, and so what we can do in our scanner is we can create A noise attribute or vector Variable. All right, so what I'm going to do is I'm going to say float noise is equal to a noise All right, and that's a function inside of vex here. All right, and it's looking for A position and a couple other attributes that we can assign it. So I'm particularly using this a noise here and what I just did is I put the mouse right over the The function a noise and I hit f1 on the keyboard and what what that'll do is it'll take you directly to that particular functions documentation All right, so you can see that we can give it just the position So the position would be something like at p our current point position But we can also give it some other attributes or or variables or functions or Parameters they're all kind of similar. So so I want to say float Turb for turbulence. So this is going to be called chf turbulence like so And then I want to do a float rough This is going to be equal to chf roughness like so And then I want to do float A 10 and this is equal to chf attenuation And I didn't spell that correctly There we go cool So what we can do is we can actually pass those in now. So we're going to pass in that turb Property or value and we could pass in the roughness and we pass in the attend And what this does it creates an offset for us We can actually declare it as a vector as well, which works out quite nice for us. So we can say vector like so Cool So I'm going to get rid of the documentation there Actually, I'm going to pull it back one second because I am getting Aha, so turbulence needs to be an int So I'm getting a little green squiggly line, which means that we're having a conversion problem All right, so to take care of that Turbulence needs to be an int There we go And this needs to be set to chi instead of chf for a integer channel And there we go. So we took care of all those problems So now I can expose these values and just give them some sort of value to start out with And now what we want to do now is we want to add that to our normal Okay So I want to add the the x and z values instead not the y so here in side of our n I can say at n Dot x plus equals our noise. So we'll say noise dot x All right, so you can see that's giving us You know some offset value and then I want to say at n dot z plus equals Our noise dot z value And you can see that that's actually put pushing everything off To the side and this is because our noise actually returns. Let's go back to our Method here actually returns a value between zero and one. So I need to remap this noise value All right, so these these particular noise values to negative one and one So what I need to do is I need to say to fit Oh one here I'm going to take the current Noise dot x value and remap it between negative one and one And that should take care of our offset problem there All right, we'll say negative one to one And there we go. So now we have a way to change noise on our particular Guys, it's just another way to give us Some extra noise. So it's not so perfect, right? I'm always looking for ways to do that We also need to after we've done that we also need to say that at n is equal to normalized Or normalized at n There we go. So we're just making sure that all of our normals are the same length there Cool And you can see that as we change Any one of our values here our perpendicular vector is working perfectly. So it's updating with it Cool All right, so that's what I'm looking for Okay, so I'm going to close out this video there All right, so that was quite a bit to take in just for One video and what we want to do next is we want to Instantiate a card or copy a card that has uh one of the grass blades on it to each one of these points Okay, thanks so much