 Okay, so let's focus on creating the randomized UVs so that we can pick a particular grass blade out of our texture sheet, okay? So to do that, we need to utilize a forEach loop. And this particular forEach is gonna run over all the points that we have in our scatter points, okay? So what I'm gonna do is I am going to feed in the scatter points now, okay? So what we're gonna do is we're gonna come over here. So let's actually just push this off to the side here because this is kind of, we don't need this copy to points for right now. This is kind of our end result of our grass card itself. So we'll say out grass card like so. Okay, so you can even put that in that box which we'll do here in just a second. I really wanna focus on getting our for loop going. So now for each one of our points that we have, okay? We're gonna run over it. So you can see in the side of this forEach loop, if I select the bottom node or the forEach end node and set it to single pass, I'm basically going to roll through each one of those points. And what we can do is we can actually utilize all the information that's coming out of this forEach loop to give us a randomized value, okay? So in order to do that, I'm gonna select this forEach begin node and say create meta import node, okay? So I'm also gonna rename this to loop data. And what this does, this node actually contains all the information that we need about our current loop that we have going here. And to see that information, we can select the loop data node here and go to the details option inside of our geometry spreadsheet. And you can see that our iteration and num iteration is set to 30 and iteration set to zero. But if I were to actually set the single pass to one there, I now have iteration one. So what we can do is we can actually get that information from the node and we can actually pass in information to our other network over here, all right? So in this case, this particular value here, okay? So we can also just get our grass card. So let's do another object merge node here. Or we're gonna say get a grass card like so. I don't need to transform it. So we'll just say out grass card. All right, so that's our current grass card ready to be copied to a point. And what we can do is drop down another UV transform node, okay? Since we know that we're starting at zero. So I'm gonna switch over to my UV view by hitting space bar five. So we know we're starting at zero. So all we need to do now is just pick a random spot on our UV shell or space, okay? And to do that, I'll try to make this, I'm gonna try to make this as clear as possible. So to do that, we need to access the iteration detail attribute, okay? So I'm gonna go into my UV transform node. And what I'm gonna do is, I'm just gonna set this up really quickly. I'm gonna say detail that allows me to grab a detail attribute from a particular node. And that node that I wanna grab that information from is the detail or loop data node, sorry. All right, and the attribute that I wanna get is that iteration attribute. And we want the first value, all right? So it's a float value or an integer value in this case. So zero will work just fine, all right? If we had a vector, you'd do zero, one or two for the different components of that vector. All right, so now let's take a look at this. If I were to, you can see that it's moved one all the way over to one. So if I were to actually keep looping through, it's gonna move us one unit. This is cool, but I really need that to be normalized between zero and one. All right, so let's take a look at our texture sheet here. So we have four, all right? Grass blades in our texture sheet there. So that means that inside of Houdini here, what we need to do is we need to determine how far we can move, all right? So we need to split one up by four in this case. Okay, so I'm going to take our current detail value and randomize it, okay? So we're gonna say rand. All right, and that random function basically is gonna return us a value from zero to one, okay? Cool, so now if I were to do the single pass here, you can see that we're getting a random spot, okay, on the UV space there. And you know what? I actually want to mod this particular value. So we're gonna do a modulo instead of a random. We might use the random still later on. So what I'm gonna do is I'm gonna say that iteration value mod, so use a percentage sign for that four. What this will do for me now is we will, as I go through the single pass, we'll go zero, one, two, three, and then zero, one, two, three, and then zero, one, two, three. So we never actually get to four, which is great. All right, so what we can do is we can go and pick a UV shell. So if we divide this value now, all right? Let me know if you guys have any questions about this. Gets a little, you know, it's kind of like a mental gymnastics at this point. I'm gonna divide that value by four, which should give us a value of 0.25. So now we go, we perfectly pick a spot on our UV space, relatively perfect. But that will actually set us up nicely, okay? So all these assets will be available for download in the actual package as well. So you can take a look at the final result, but this is gonna work out just perfect for us right now. So now with that information, what I'm gonna do is I'm gonna say copy to points like so. So I wanna copy that grass blade. I'm gonna pump the, for each begin to the copy to points note. So we have that current point coming in. And then what we wanna do is we want to output that and turn off our single pass and go to our view here. And you can see that we now have a bunch of grass cards all set up here. And what I need to do is I need to put down a normal node. That's where it came back on anyways. But what I wanna do is drop down a normal node, just so all the normals are all fixed. All right, I'm just gonna set that to by face. And there we go. So now we have a bunch of grass blades and they're all picking a different grass blade from the texture sheet. Cool. So the last thing I'm gonna do in this particular video is just adjust the scale by the density. Okay, so you'll notice as we get a point here. Okay, so I'm gonna turn my normal again. So we have a point, we have a direction. If I were to look at the point in the geometry spreadsheet here, you can see that we have this density value. All right, so we can utilize that. So I'm gonna say attribute wrangle. Okay, we're gonna do our scatter. No, let's call this our copy adders. So what we can do is we can say our at pscale. All right, this is another built in variable. All right, pscale is equal to at density. And this will allow us to scale those grass blades based off of the density value. All right, remember that density value? All right, this is our fall off. So if we take a look up here, all right, it's that density values being controlled by this particular ramp here. All right, so we're gonna go from zero on the outside to one on the inside. So we should get bigger and smaller grass blades as it goes into the center. And that is exactly what we are looking for. Cool, but we also get really, really tiny ones. So we need a way to control that. Okay, so we can actually control our density value by doing a fit value. Because remember, our density is now going from zero to one. So I can say fit zero one. And we're gonna fit that density value between a CHF or float channel. We're gonna call this our min scale. And we're gonna say CHF max scale. So we're gonna allow the user to determine what the min and max scale values are. Okay, so I'm going to submit that and then create those parameters. So now I'm gonna say that my minimum scale, you know, something like that, my maximum scale is one. So that allows me to control that fall off a little bit better. Cool, very cool. So one more thing I really wanna do here is I just wanna create a transform node. Let's do transform node. And what I'm gonna do is I'm gonna use this to allow the user to also control how clumped together they are. All right, so it'll just be more of a global clumping control. There we go, much better. Okay, so in the next video, what we wanna do is we want to get all these guys bending also based off of that density value. Because right now obviously this looks like, well cool, it doesn't necessarily feel like a grass blade yet or a grass clump yet because they're not all bending outwards from their center. Okay, so we're gonna get that all set up in the next video. Thanks so much.