 Howdy guys, this is IndiePixel. I wanted to make this video to show you guys a really nice, just kind of elegant way to create more interesting Vorinoid fractures inside of Houdini, especially if you're going to be creating platform type stuff for like top-down games or something like that, right? So here I have an HDA that I've made or a Houdini digital asset and really all it is is just there to create just a bunch of different types of interesting fractures using the Vorinoid fracture node, right? But there's a lot of other steps that goes into doing this and really one of the secret deals is just kind of stretching and translating the Vorinoid noise, right? It's really just about manipulating that shape to get interesting patterns instead of just kind of using it straight up. So I want to walk through that here in this video, okay? So what I'm going to do is create another geometry node up here, all right? So we're going to do geometry and put that there and we're going to delete that file and I'm going to hide all the other objects there and what I want to do is drop down a grid, all right? So this grid is going to be something like two and let's do four, all right? So we get that kind of platform type shape. Maybe it's like a bridge that's you know got fractures. Anyways, I just want to show you guys the pattern here. So we're just going to call this our template. That's what I usually like to do. All right. And I'm going to show my wireframe and let's do two and two because I just really want the outer points there. All right. So then what I want to do is go and remesh this guy here. So I'm going to remesh that and that just gives me a bunch of points basically. So it's going to go through the surface and remesh it and since it's a plane, it actually works really fast. Sometimes the remesh is a bit slow and you can always go and change the target length to make even more topology there. But really the reason why I'm doing this is because I want to get a nice border color, okay? So what I want to do now is group this. So we're going to go group and I'm just going to call this group. And I'm going to use the $OS over here. And I'm just going to call this the boundary group. All right. And all I want to do is remove the base group here, right? Because I don't want anything just yet. And I want to include by edges. So I'm going to hit that and then do the shared like so and make sure it's set to edges. That way we just get that boundary edge. And now what I can do is just add some color to that. So we drop down a color node and I'm going to put some black onto the color node there and make sure that we're set to the boundary group. That way we get black all the way around. And we won't just want to turn off the material there. All right. So now we can see that we just have black around the boundary. Cool. All right. So then what we want to do now is smooth that out a little bit so I get a nice gradation instead of a harsh border. So all I need to do is an attribute blur node. So we drop that down attribute blur. And we want to take the cd or the color information coming in there. And it is complaining about something. Oh, you have to put in. So what I have to do in this case, because the mesh is so simple, and I want to actually sample by the same mesh, I'm just going to take the output and just pump that guy in there. And now you'll see that because I have both inputs set up, all I have to do is move this blurring iterations and I get a nice blurred edge. That's pretty cool. All right. So nice and clean. You can always change this stuff around to get different shapes. That's pretty good to me. And the reason why I'm doing this is because I want to scatter points around the edge of this mesh. Because when you use the scatter just by itself, if we just throw a scatter down on this. So if we just use the scatter by itself, we get points everywhere all over the place. And in some cases, that's great. In this case, I want the fractures to be sampled from the edges of this mesh. That way I get long cracks, right? Instead of just a bunch of cells. So let's go set up that Voronov fracture so we can watch this stuff in action. All right. So we need the mesh to fracture and then the points to fracture with. So the mesh is our template right here. And our points are those points there. Now you see if I turn on the wireframe, we have a bunch of fractures. All right. And so what I want to do is reduce the amount of points and also set the density attribute on this. And that'll pull the fractures more towards the edges. Okay. And so to do that, what I want to do is actually put down a point. I'm going to put down a point about you could do this with an attribute wrangle as well. In this case, I'm going to keep it more visual. All right. So we don't do any code or anything like that. And what I want to do is do a vector to float. Oops. Vector to float. I don't know why I can see it. There it is. Vector to float. And we're going to take the CD or the color information on a per point basis. Okay. And I just want to do a compliment. So let's compliment this and see what we get. You can take any of these channels because it's a black and white or gray scale range. They all have the same value. X, Y, and Z has the same gray scale range. And by default there, we are getting just full white. It's actually a little dark in the middle. You can see it. So we just need to do a fit range. Okay. So let's do that. And that and start to play around with these values here. There we go. That's really what I want. And then what we can do is just clamp that so we get values, legitimate values between zero and one. Because we're using this for a density, I don't really need the negative values. I'm sure it works. And then that's fine. We don't need to blur that. I really just want it to drive points out to the edges. So what I'm going to do is a bind export. So that way we export this value on each point. So we're adding an attribute. So we're calling this the boundary points. Actually, we need to call it density. Let's just do that because it'll be easier. So density. So then I'm going to output that. And we don't need to connect it up to anything else. This is kind of an output, if you will, if you think of it. So this thing is actually exporting data onto each point as well. And you can see, you can verify that. So if you don't have the geometry spreadsheet open or you don't know how to do that. So the one way, the most visual way to do it, at least, is to split pane top and bottom. And then right click on this tab over here where it says scene view and select the geometry spreadsheet. And that'll show you all the properties on a per component basis. So there's points, there's vertices, and then primitives, and then group detail. Sorry. So points, we put it on a per point basis. So now we actually have, and you can see we have some zero values, which is exactly what we want. So we can also go in and watch this, right? So if we go into that fit value, you can see that the destination max is 0.663. And that's exactly what we're getting. So I just want to put that to one. And you can keep going negative with this and keep pushing it out. And then the clamp, make sure that we don't go below zero. Okay, so basically, now what we can do is use that density attribute that we've put on each point and pass that into the scatter node. So we can say density by attribute. And now if we visualize our points, they've all been pushed out to the edge. So pretty cool. And now we can actually use that to drive the Voronar fracture. So we can, I always recommend doing just a few points for these types of things. So now if we put on our, you can see the different types of patterns that we get. Right. And if we were to actually expose some of these values, so let's just say we expose the destination min and max. So I'm going to middle mouse click on these dots here to promote the patterns. And that will allow me then to change this even more. And I can start to get different looks, right? Different crack patterns instead of your standard Voronar fracture. And that's really just kind of the beginning here. And then you can also play with the amount of points, right? So you start to get a lot more fractures out on the edges. Very cool. So, all right, so let's move on. And what I want to do now is actually bevel these guys. So on a per point or per primitive basis, you can see here, if I turn the primitive mask or display there, I have a primitive per cut, if you will. So what I want to do now is just do a poly bubble. Let's do a poly bubble like so. And what this will do is it'll just kind of cut those edges there. I need to put on points. And it creates that nice kind of gap in between. All right. So you just want to be careful that you don't get any weird offsets. If you turn on the wireframe, you'll see if any geometry is actually offset in a weird way. It looks actually pretty good here. So I'm digging this. So let's just keep moving on with this guy. All right. All right. So that's basically the shape that we want to get. But what we want to do first, before we do all that stuff, is I also want to further modify this noise. And I don't want to do that with the bevel on it. So I want to insert another operation in between here or another pass at the noise, right? Because think of this as a noise. Like if you're working in like substance designer, and you're creating a crack pattern, usually they look very mechanical at first, right? It's obviously it's been created by the computer. So what we want to do is pass it through a bunch of, you know, like offsets and distortions and stuff like that. So one of the more basic distortions that you could do right off the bat with all this stuff is just to transform, right? So let's do a transform. And basically now what I can do, right, is go and scale this out more. I can obviously why it's not going to work. Do that. So let's go into a little more perspective here. And we can start to scale it in X and Z. Get bigger shapes. We can start to shear this in weird ways, right? Two. So we have a bunch of different ways that we can actually start to change the shape of that Voronoi. We can also rotate it, scaling it out. But what we want to do in this case is I want to kind of clamp it into that original shape that we had, that template shape. So I want to put all that inside of there. So once we have it modified, so this is called a distortion, right? Or distortion. And then what I want to do is just do a series of clips, right? And so these first clips are going to be on the Z axis here. And all I need to do is make sure that it is set to the B box. So the end, let's go back up here. I want to make sure that I have a clip for the end in Z or the minimum in Z and the maximum in Z and then the minimum in X and the minimum or the maximum in X, right, based off of the little gizmo down here, right? And to do that, use that B box expression or function, right? So we're going to do B box, grid, I call the template, sorry, template. And we want to do D underscore Z min, boom. So let's view that. So that's good, right? So if we were to turn this on, let's just template this, turn on wireframe. So we got that portion matched up. So let's just watch this happen. Okay. And then let's just copy that and paste it. So save a little bit of time here. And all we need to do then is update our B box function with Z max. And then tell this to keep the planes below. All right. Now we have that fitted back into that shape. All right. And then basically just want to paste another one down, but we're going to change this guy to the X direction. So we're going to say zero and X. And then I want to copy the B box function. And then I'm going to remove it by holding down control and shift and just clicking in that parameter and then pasting over here. Okay. And we're going to do a B box Z or X max or let's do min first. There we go. So now we keep in that side of the shape and as you might know, by now, we're just going to do that same operation, but X max. And we'll keep everything below the plane. There we go. So now we've got interesting shape. And what we can do, right? So this is why it becomes a nice elegant solution to creating a bunch of nice variations of fractures rather than having to go through a bunch of math. If we start to change these values here, you'll notice that we're really just starting to adjust that void noise. All right. So I can squeeze it in a little bit more. Right. We could shear it a little bit. Okay. We can rotate it. Change that direction. And you start to get a bunch of different patterns. We can even translate it along the Z. Just kind of test out other ideas. It's kind of like an offset. Obviously, you can only go so far. But the idea here is that now you can really start to artistically craft the fracture itself. So we're going to leave that like that. And that's a good step forward. Okay. All right. So let's move on to that next step. So what I'm going to do is actually, before I do that, I want to put a net box around these guys or what used to be called net boxes. All right. And I'm just going to call this creation. This is a shape. Right. And now we're going to get on to that next step. So I usually like to call this more of the assembly process. I'm going to refine the shapes a little bit more and then start to create the objects. Right. So I'm assembling the objects that is being created from this template, this template shape. Okay. So let's move on. So the next thing I want to do, actually, now that I've beveled it, and quick thing to note here, when you're beveling this stuff, especially these fractures, you want to kind of keep the bevel small. If you go too far, you'll notice you'll start getting these diamond patterns. All right. And I bet you I can figure out a nice cool little algorithm or a vex node that would actually kind of tech that and stop it. But for this video, I'm not going to go super hardcore. So basically, that's what we really want to do. And we can go and smooth this out even more. Because let's turn on point view, because now what I want to do is actually resample all of this. Okay. So I'm going to go and do a resample node, like so. And what I want to do is actually set this to very subdivision curves. So that way we get a nice smooth curve all the way around. And I want to set this to maximum segments. You'll notice now I start to get a little more rock type shapes. Okay. And the cool thing about this is we can actually come back up to the Voronoi fracture and adjust this cut plane offset. And you'll notice now we're starting to get some interesting ideas around placing rocks in a path. Okay. So what I want to do now is actually just up the amount of segments. It doesn't need to be crazy. Okay. Now that I have that out, I just want to do a little bit of point jitter. So let's view our point. So this might be good for the point jitter. Let's actually just throw down the node itself. So let's do a point jitter. And you can actually do this a couple different ways too. The point jitter is just the fastest, but not the most clean, right? But it'll give you a good idea of how all that stuff works. So I want to just point jitter this. And you'll notice that we're going to be getting y value or y offset. And let's just set our axis scales to zero on the y. That way we're just offsetting an x and z. That's all we really want because we're just dealing with the 2D shape right now. Okay. We're just trying to create that template, that look. And now we can start changing the seed and the intensity of this. So you can do this also with a point bop as well. So I might as well show that. But I do like just how it just kind of randomizes the edges a little bit and that removes that kind of machine procedural look, right? It's the same stuff you do in Substance Designer. I'm just going to close this a little bit more like so. It's all about just kind of distorting things after a while, matching patterns and distorting things. So let's go and do a point bop down here like I was saying. So point bop. And I will try to move through this as fast as possible here. So what I'm going to do is come in here and drop down a vector to float. And all I want to do is extract out the x and z positions. Okay. And I also want to take a turbulent noise. Actually, yeah, let's start with the turbulent noise. Why don't we do that? So we'll do a turbulent noise and I'm just going to add that value to the x. You can also multiply it. So we'll do another add here and we'll do the z there. That's not what I wanted. Sorry, z right there. So now we're doing the x and z and I just want to do a float to vector because really I'm trying to do is set up the graph so then I can go and tweak. All right. So I actually wanted this to be the x and this is the z right here. And so this basically is our new position. And you'll notice that it basically offset everything and that's just because we need to pipe in the p value into the pause. There you go. And now what we want to do is play around with that noise so we can further distort the shape and just start missing out there and distorting it. So we're going to also play around with the different types of noises in here. Sparse convolution always seems to work out the best. Simplex noise is pretty cool. That one's actually working pretty well too. I can really go and mess that up there. So I kind of like doing these broad shapes. I just kind of want to distort it a little bit and then change the turbulence a little bit more and the roughness. Right. So you don't really need a lot out of the noise. I mean, we're only working with a certain set amount of points. This isn't a high res image, you know, and it's model after all. So kind of want to just distort it a little bit. So anyways, that my point is you can do this with a point pop as well and have more control than the point jitter. It's it's I would consider the point pop, the high res version and the point jitter, the low res version. It just depends on how much time you got, I guess, or how much you care about it kind of deal. So anyways, moving on. Let's go and turn this back into a turn the wireframe off basically. And let's go and I'm going to use the point pop for this one. Okay, so all we need to do now is actually just poly extrude. So we're going to poly extrude this stuff and pull this up on the distance a little bit. Alright, we can always insert it as well just a little bit. You just a little bit. Nothing crazy, because I also want to output the front group. Sorry, the front group here. Alright, so let's take a look at a group. So we have a front group there and it's highlighting those top pieces. And so what I can do is do a group promote because what I want, what I want to accomplish here is to get the edge loop all right all the way around the top here. Okay, so I'm just going to call this the bevel edges. And we'll do a dollar os right here. We pick up that name. So anytime you do that, just picks up the name. And we're going to do edges. And I don't want the base group. Or we can do the base group. Yeah, no, we need the base group. So you notice that that selects that top piece. And it now has the edge loop. Cool. So we're good. Alright, so now we have the bevel edges. Right, so we can always view those if you just go to edges, there's bevel edges. It's perfect. Okay, I'm going to turn off that display. And I want to do a polybevel. So let's do a polybevel here. We'll just bevel those guys, just those top pieces. Because I'm going to clip off the bottom. So we don't even have the bottoms. Let's actually output that back for now. Just in case we can clip it off real easy. So now I want to do the polybevel. And we're going to get that bevel edges and do a fixed distance here. And you'll notice that we're getting perfect bevel just on those guys. And I'm just going to drop this down to one in the divide there. Now I just want to do a quick randomization on that bevel. And this is a technique that my buddy Hugo Bear showed me. So I highly recommend watching some of his videos too. He's a super smart dude and comes up with crazy ideas. So I'm going to do attribute random here and drop that guy down. And what we're going to do is change it from the attribute name to random bevel. Okay. And I don't need the values on these guys, because it's just a single float. And I just want to do a value between 0.2 and something like 1.2. Now you can keep it from zero to one. It's just that when you do that zero value, it means there's no bevel. So anyways, let's hook this up so we can see. All right. And so now in order to use that attribute that we just created, you can see that we have this random bevel now. So it says value from 0.2 to 1.2. It's all random there per point. We can just go into the poly bevel, turn on the point scale, right? Or you could also do the offset scale. Let's just do the random bevel. There you go. So now, if we turn on some lighting here, now we have a nice random bevel and it makes it look more like rock. And it's actually a really cool technique for just about anything. Nothing has a perfect bevel in the real world. So it's always good to randomize it a little bit. If you want to change those values, all you do is just change these guys, these min to max values, right? The max. So that gives you a nice randomized control over that bevel. And then you can drop it down to normal right here and change that cusp value. Let's turn off that wireframe. Now we have actually a kind of cool little rock formation there. All right. So that basically is that whole pattern there. So that's just kind of that mini technique for creating just a bit more interesting fractured shapes. The nice thing is that we can go back up to this transform now or a distortion node and start to mess around with some of these shapes here. Every once in a while, you get a little bit of a break in the poly bubble. And that might just be that we need to like fuse it or fix some of these guys here to a fuse. Just means that things are a little too close together. No, no, it's cool. So basically, yeah, I mean, just go through and pick the ones that don't necessarily have any issues there. So just rotate it and start to, you can start to play around with a bunch of different looks just like so. You can also change the density here. Now we start to get some really crazy stuff there. So let's just undo some of those guys. Get back to what we had here. I'll play around with it some more. So that basically concludes that. So really the last thing to do, you can go and remesh this to create a high poly. So if we remesh this like so, let's just review the wireframe there and create at least one and we'll do a gradation here just so we get all that detail in the edges, but we don't really need it on the flat areas. Right. So there's there's your high poly. So to speak, just create a normal for that. Nice. And then all we need to do is just create some UVs for the low poly. So come in here, we'll do a UV or actually let's do a clip first, clip off that bottom. All right. So now we have just the bottom there and you can see that we have a pretty nice low res mesh ready to go. You might want to bevel or extrude or inset the top here a little bit, but really no need to do any of that kind of stuff. Just not for this demo. I really just wanted to talk about the pattern making. So then basically we just do UV flatten. This actually works really well. And who do you 16? We got to if we hit space bar five, you can see it lays it out pretty nicely. I mean, that's legit right there. And to verify all that, if you just drop down a quick shade, well, you got to make sure material is on. There you go. That looks excellent. No stretching whatsoever. And you have some nice stepping stones or something like that. I don't know. It's just cool way to start to mess with the Voronar fracture. I always, in the past, have been, I've always struggled with it looking too mechanical, right? And I just wanted to show, you know, over the years, I figured out ways to manipulate this stuff. And I'll show you guys also a way to make cracks from an image, right? So let's say you trace something. That's one of my, my next videos is, so let's say you have a specific crack in mind, you can go and create a texture and just use that as the driving force behind the fracture instead of utilizing the Voronar fracture. But right there, you basically have it. So all you would do now is just create a couple outputs here, right? So I'm just going to do this output zero and just call this the low res and then do another output like so. Call this the high res. Make sure you change the index. Boom. And then from there, if you're just going here and shift C, create a digital asset, and I have two outputs. You have your output one and output two. Okay. So I will basically leave you guys there. Let's just turn off that quickshade. That is basically how you do that inside of Houdini 16. Interesting little technique. So anyways, let me know what you guys think and thanks so much.