 Okay, so now what we want to do is we want to get a whole bunch of variations of this one grass blade here onto a texture sheet. So I'm just going to make a few variations here and slap them onto a texture sheet. All right. And so to do that, I'm going to jump inside the grass texture sheet geometry node. And the first thing I want to do is I want to drop down an object merge node. Now this object merge node is going to get the current grass blade. All right. And let's change the transform into this object. And what I want to do is get the result from the grass blade node. And that will then import our grass blade for us like so. And so what I want to do is I want to create a bunch of variations. So how do we go about doing something like that? So just a quick example, I'm going to drop down a for each number. So I'm going to allow the user to determine how many variations they want here. Okay. And so inside of this for each loop, what I want to do is each time I iterate through, I want to add a new point. All right. And this is going to be the point to copy the grass blade to the current grass blade. All right. So what I need to do in this ad node is I need to turn on the point right here. So we get a single point in world space right at the center. Okay. And then we just need to copy our grass blade to that particular point. So I'm going to take the current grass blade and copy it to that point there. All right. So now if I wire that into the end results here, this for each end node, like so, you can see if I switch back and forth, we get a bunch of iterations or now we have a bunch of copies. So currently if I were to go to the for each end node, we have 10 copies. So I can change this to get the different amount of copies. But for each copy, I want a bunch of different variations. All right. And so to do that, what I need to do is I need to get the current iteration that we're on. So what loop are we on? Because currently I have 10 iterations. So that means that this for each block is going to run 10 times or yeah, 10 times. So it's going to start at zero, then go to one and two. And I want to get that number. So that number is actually accessible on this for each count node. And I'm going to rename this to loop data. Something I like to do. You don't have to. It's not like that's necessary for the system to work. But you'll notice that in this loop data node, all right, you'll notice that this iteration value is set to nine right now. And that's just because our iterations are set to 10 up here. All right, if I go to my for each end node and turn on single pass and go back to this loop data node, all right. So what I'm going to do is I'm going to pin this geometry spreadsheet to look at this specific node currently. That way I can select the for each end and actually slide the single pass here. So you can see now that this iteration right here, all right, is changing as I move the slider. So now that's our number that we can use to generate a random value. All right, so now that we've got that information or we've got that concept in our heads, let's go back up. And what I want to do is start to put some my own custom properties on this grass blade here. And so I'm going to select the grass blade geo node. And I'm going to go and hit the little cog wheel up here and say edit parameter interface. Now, if you are familiar with creating HDAs, you might be thinking yourself, well, why are we doing that before we're creating HDA? Because, and the reason is because what we're going to do is we're going to make a massive HDA. This is more of like what I like to call compound HDAs. Okay, this allows me to bundle up a bunch of little tiny processes, all right, into a single HDA, instead of it just being a single geo node, and then saying create digital asset. This is a sub network that has a bunch of stuff inside of it. So it allows you to really accomplish a lot with one HDA. Now, I'm not saying that this is the only way to do it. There are cases where you want to just make a single HDA. That's just a single geometry node. This is more complex, more compound type of HDA. So anyways, all right. So now that we've removed all the UI elements from our geometry node, I'm going to go back to that edit parameters interface, and I'm going to drop out a integer. Okay, and on that integer, I'm going to name it ID, and this is going to be our iteration ID for the label, and hit apply, and accept, and now we've got this iteration ID. And so what I want to do is I want to change this value as that iteration changes down here. And so to get access to this value, we can use a detail expression. So I'm going to say detail. We want to get the information from our grass texture sheet and then from that loop data node, and the name of the iteration or the name of the value that we want to get is iteration. So that's that variable name or attribute name. We should call it, and there we go. So now I have the current iteration that we're on. All right, you can see this is zero. So if I were to, let's actually pin this one now, okay, and jump into our grass sheet, and I actually do need to change this. So let me make a new parameters view here and just quickly change this. So you can see that our iteration is now equal to three. And if we look at our grass blade, our iteration ID is now equal to three as well. Cool. All right, so now we are getting that value. So now what we can do is we can use that information. We can use this ID value inside of our network. All right, so we're creating procedural relationships between all these nodes, but the nodes themselves contain just the functionality that they need to process. And so really all I'm gonna do is vary the bend. Now you can go and add tons of variations to these, but I obviously just want to get the basic concept across in this video series. So to create a random value that goes from one range to another, one number to another, we're gonna utilize the fit01 expression. All right. And for the first argument, we need a float. Now this is the number that we want to create a random number from. So we're gonna use the rand function. And I'm going to get our ID parameter off of the node here. All right, and that should actually be, there it is, ID, there we go. All right, and so that's our channel. So now we're getting a random number from zero to one. All right, and I want to remap that from negative, let's say 10 to 10. Let's just do that. You can see it moved already for us. So now if I were to go back down into our grass texture sheet node and change this, you can see that we're getting variations, bunch of variations of that bend. Cool. So now we're generating a bunch of iterations. So if I turn off the single pass, you can see now we've got a bunch of grass blades. They're all a little bit different. Cool, and you can go back up and this is another great way to expose properties or create more features. Let's go and create another float up here. And this is gonna be our bend range, like so. So I'll call this bend range. This just allows us to have a little bit more freedom here. So our minimum range is gonna be something like negative 20 and our max will be 20. And I'll just set the default to 10. And actually let's just keep this at zero. There we go, let's say accept. All right, so what I'm gonna do now is I'm gonna jump into the grass blade node here, go back to the bend node, and I'm just gonna get that parameter. So I'm gonna say ch dot dot forward slash to go up and onto the actual grass blade geo node. And I'm gonna look for that bend range property or parameter. All right, and I'm gonna replace our hard coded values with a value that now we can change up here. There we go, very cool. Okay, so that's more or less what I'm looking for. Okay, so the next step in all of this is actually get it onto a sheet. So that way we can turn it into a texture. So to do that, I'm gonna create a grid. All right, so this grid is gonna represent our texture, but it's still gonna be in 3D space. All right, and what I'm gonna do is put it into the y or xy plane over here, there we go. Very cool, okay. And I also want to change the rows and columns. Now, this is going to allow me to create the placement for the actual blade. For our rows, I really just need, well, in this case, I just want two rows because I wanna have these little vertical slats here, if you will. All right, and we'll just keep that something like four for now. And so in each one of these little quadrants here, these quads, I wanna have a grass blade. All right, so how do we go about doing something like that? So we're actually going to have to change this up a little bit here. And what I wanna do is I actually want to now go, instead of for each number, all right, I wanted to say by pieces or points, all right, and we're gonna loop over primitives, okay. But we don't really need to go and, you know, change all these parameters. In fact, you know, I much prefer to just go and drop down a for each primitive, right? Cause all the stuff is all hooked back up. Plus, this could get used to the preset. So we really just want to copy this stuff over here. Or we don't necessarily need to copy it. We can just replace this here like so. And just unhook this, so you can hold down Y on the keyboard and cut the lines there like so. Now, this stuff isn't set up, but we need that meta node again. So let's get this all back in order here. All right, so we need this loop data node back. And so what I'm gonna do is just come up to the for each begin and say create meta import node and then just call this loop data. There we go. So now we're gonna loop through all of the primitives here. So if I were to hook that in, you can see now we are getting a grass blade or all those grass blades per primitive there. And that's not what we want. All right, what we wanna do is we wanna create a single point at the bottom of each one of these strips here. So then you can see, let's actually just kind of start from the beginning here. We'll put this stuff over there like so. There we go. All right, so if I were to set the single pass, we can see that we're going through each of those primitives. All right, so what we wanna do in each pass is we wanna add this point. So let's do this. So let's add this point. We wanna add this point right here. And we actually wanna center it down at the bottom of this particular primitive. And so to do that, you'll notice that we have a way to position our point in space. And we know where the center of our particular primitive is. We can use the centroid. Okay, so let's do that. We wanna center this up the current point that we've just added. We wanna center it up in the x-axis. So I'm gonna use the centroid function. And we can just get the input from the first input here, which is there is only one of them. So we can get just that single input and we can say dx, like so. And this one's, we want to do the op input path. I believe there. Let's actually get this. There we go. Op input path. It's not allowing me to do the whole thing. That's weird. Op input path. And we want that one and zero. There we go. So you can see now it's centered up on the x, which is great. We should probably do the z as well just to be safe. All right, so we'll do dz for the z position. And then for the y direction, I just wanna get the bounding box of this quad and find the y min. All right, so we're gonna do bbbox. And we're gonna take the first input there and I bet you that works in the century too. So we'll say the d, y min, like so. And there we go. Now we now have a point there. Cool. Let's go and try this out so we don't have to type in op input path. Yep. So we'll just type in zero for the only input, but it also represents the first input. Cool. All right, so I also need a way to blow away or blast the current quad. So the first thing I need to do is group it. So we're just going to put it into a group here. And again, I'm using the dollar o s. So I'm gonna say orage quad for original quad. And yep, we just want the whole primitive there. So basically now that after we've added that new point, this is gonna be our copy point. I'm gonna blast the orage quad. And we'll get that particular group. And there we go. So now we're left with just our point. So now we can go and copy this. So if you wanna drag, hold networks together, hold down the shift key. There we go. Cool. And now we've got a point or we've got a grass blade on our point. Super cool. All right. And we're getting a bunch of variations out of all this. And if I were to turn off single pass, you can see I'm getting really tiny grass blades when our grid is actually really, really big. All right. Now we can always go and just normalize this. We can say one and one like so. There we go. And now we've got perfect fitting into our different areas. But I actually do wanna keep this at its defaults. And the reason why is because I honestly just wanna show off how we can actually fit those guys appropriately to whatever size we provide as our grid. So we're gonna use the match size node. So I'm gonna use match size like so. All right. So it wants an input and then it wants a bounding box that we wanna use to match against. All right. So I'm gonna take in the current grass blade that we have. All right. And I'm gonna feed in our quad that we're currently working on. All right. So this guy right here. Now you could do it like that, right? But if you wanna clean up your grass, let me just show you really quick. Cause I do kinda like to keep all these things pretty organized. We can also just drop down an object merge like so. And we'll say get current quad. So get current quad like so. And we don't need to transform it. And we'll get it from the group node rich quad. So now we have the current quad and I can just feed that in. All right. So it keeps it nice and clean. All right. It's easier to read that way. At least in my opinion. All right. So now we have our particular grass blade in the center. And now I don't really wanna do that. I just want to scale to fit it. And I really just wanna scale it in the y direction. And I don't wanna do any justification cause it should already be no translation. There we go. So we wanna put it onto center and just keep translate on actually. And then we wanna scale to fit this. And what I wanna do is a uniform scale. I believe. And I wanna match the y and that basically got rid of our actual offset. So let's just take a look and see if all these guys are now in their proper size that we're providing. All right. But now what I'm getting is, let's just put these all back to center then. There we go. Cool. So that's what I was looking for. Very cool. Might as well just put these all back to center then. I was wrong. All good. Okay. So now we've got all of our grass blades in place. And the cool thing is, is if I actually copy this here and then paste this reference. If I were to change the size, you can see that our grass blades go with it. And if I were also to change amount of copies, you can see now I'm getting a bunch of grass blades. And it's gonna try to scale it as best can to fit it onto the texture. Pretty cool. All right. So let's do four. It seems to fill it up nicely. Okay. So now we got a whole bunch of variations on our grid and one thing I would like to do is actually add some padding. All right. So how do we actually add a little bit of padding between these? Now, in this case, it's not necessary, but I just wanna show this before I close out this particular video. So what I'm gonna do is create a poly extrude. All right. And for all the individual elements, what I wanna do is do an inset. And this will basically allow me to create a border around each of those. And in order to get rid of that padding, because now if we were to feed that through our loop, it would go through all these little tiny guys as well. What I wanna do is just output the front. I don't need the sides anymore. So we pass that in there. All right. And take a look at our final results. And now we've got a little bit of padding. And what we can do is we can actually change that padding and expose this value to allow people to, you know, give a little bit more padding to it. So lots of uses for that. Cause honestly, you don't want the grass blades budding right up against the border there. And so there we go. Cool. All right. So with that, we now have our grass blades all set up in a texture sheet type of format. What we wanna do now is get this into a texture format. Cause currently it's still all geometry. All right. So let's take a look at that in the next lecture.