Houdini 18.5 - Procedural Paneling

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
howdy guys so in this video what we're going to do is we're going to walk through the process of creating all these procedural panels and then we're going to text right here inside of qixel mixer and we're going to go through a couple techniques um how to obviously create all these panels with all the bolts how to bake off all the textures and how to create you know this really basic set of layers here for this particular look here and this is heavily inspired by the sn8 spacex starship launch i was watching all that stuff and i really like the way that the aluminum looks on the starship and so i wanted to try to replicate that and also make it a procedural technique and so this is basically what i've come up with so let's get into it all right so let's get everything set up i'm going to drop down a geometry node here and then i'm going to go and create a tube and this tube is going to basically serve as our mesh and i'm going to put it onto the let's put it on the z-axis here and let's make it a little bit taller and add a couple more rows basically these rows are going to become the splits in the main panels and then these columns are going to basically serve us for the smaller detailed panels all right so with that all done let's add some normals to it so we can use them later on in the graph here so let's set it to points so we have some normals very nice all right and then what i need to do is i need to basically set an id per row here there's a couple ways to do it so you could go and drop down a wrangle node so i'm going to call this set id and you could you know basically create an id based off of the primitive position in the z direction so basically i would do something like this i would say i at id is equal to rent and we're gonna basically round to the nearest integer we're gonna round the z position uh let's do times two and let's make sure we cast that to an int as well all right so now you can see we have this id value so if you have your geometry spreadsheet open and i need to actually run this over primitives let's set this to permanent so now we have to have this id per primitive and we are getting negative numbers but that works just fine basically the whole idea now is that i want to be able to roll through each one of those rows based off of primitive name and that name is going to be this id for in this for loop here so i can just replace name with id and if i do a single pass you can see now i have you know each row separated out now you don't necessarily have to do this particular technique you could always do it a different way so we could always do group right by range and then we can use the rows and columns up here to actually just create a selection where we select every other ring basically and so to do that i'm just going to get the number of columns here i think i just need that and then if we just put in that same number up here and then we just do times two we'll get every other yeah so we'll get every other ring right there and the way you could split it up and create this id right is he could do a split so let's just do let's create um a group name up here that we can actually split on so let's do even and we'll split on even up here so let's go split even and then let's just merge them back together and the reason why i'm doing that is because i can then use an assemble node so we use an assemble node here this will actually go and create the the name attribute for me right so now i have this name attribute so if i were to drop down that for each uh named primitive here you can see by default it's looking for name and this assemble node creates this name attribute with a a unique id in this case it's a string the one that i set up was in the wrangle node was a an integer so it works both ways right so far to plug this into this for each node here and uh yeah it should already be set up so now we can go through each one so a couple ways to do it right so i'm just going to leave it on my wrangle node solution here the one thing you have to keep in mind when using this particular technique is to basically do it on the direction that you're looking for so this won't work in all cases it does work for this particular tube though so all right so with that all set up let's move on to the next step so now we've got each ring basically separated out and we can loop through it so let's set back up that for each named primitive here and in this case i'm not going to be using the name attribute i'm using my custom one called id and again this allows me then to loop through each one of those particular rings so this represents the larger section of your spaceship if you will what i need to do now on each one of these is determine a procedural way to basically break it up into smaller panels all right so let's walk through that now i'm going to make myself a little bit of space here and what i'm going to do is i'm going to drop down a wrangle node and i want to create a weighted grouping in here and so i'm going to run this over primitives and so the first thing i need is a seed value so i'm going to drop down a seed value and this is going to be equal to a float channel so chf or channel float and i'm going to call this seed all right so this will allow me to get different results per pass so per loop through this for each loop here and then i'm going to get a random value so i'm going to call this my rand val and this is going to be equal to our rand at premnum so num and we are going to add on our seed value so basically every single time we for every single ring in our loop here we're going to generate a new seed value and we're going to get a different random value to use all right so the last little bit of information we need here is our weight value so this will determine how much is selected all right so we're going to say chf and we are going to do weight just for the name and let's create all those spare parameters here by hitting this little button right there all right so now we've got all these values here and i'm just going to initialize my weight value to 0.5 you can put your seed value to whatever you want all right so this is really easy at this point all we need to do is say if our rand value is less than our weight value then we're going to select your your primitive so we're going to say i at group that initializes the group for you so we're saying it's kind of a shorthand for creating a group in vex and the name of the group is selected so if you prefix your group name with this iac group it will create a primitive group in this case because i'm running over primitives all right i'm just going to set it to 1. the other way you can do it too here in box is to set a prim group so you can use this and follow the instructions here so give it you know your geo your string name the value you want and then set basically so that's quite a bit extra to type so i tend to use this iac group more often all right so with that done let's see what this gives us so i'm going to call this my weighted grouping like so very cool all right let's turn on our groups by hitting this little guy right here so you can see now if i go up to my wrangle node i can quickly go through here and we can also change our weight value so this weight value gives us a great way to go and select just kind of random primitives based off this weight value all right so the next step in all this to get our paneling done is i use the group expand node so i basically use this as my initial selection to say hey i want a smaller panel here and then i expand it to give it just a little bit bigger of a look right and so all we need to do is look for our group so we want to get our selected and then i want to basically expand it and so i need to decrease my weight here a little bit and there we go so we also need to put in the uh selected for the base grip so now you can see if i change my steps i can expand the group into smaller panels or larger panels whichever you want or i can come up here and i can also you know create this kind of effect just by using my weight value yeah i think that'll be cool right there maybe a little bit less so the less weight you have in there the more panels you'll end up with very cool so then i just need to split on that again here so i can split it up into different pieces this way i can work on each individual panel so i'm going to split on selected and then just merge them back so we'll just merge back here and the reason why i'm doing that is because it'll separate it out so when i merge it back the vertices won't fuse together and that's pretty much all we need to do there the last thing i need to do you'll notice that if i were to turn off my single pass here and take a look at my grouping you're going to get the same grouping for each one of those rows all right so we need to go and create a meta import node here and i'm going to call this loop data there we go and inside of our weighted grouping what i want to do is i want to control this weighting right here you could also go and you know change the c value might actually end up just doing both so i'm just going to do a fit and i'm going to do a rand we're going to do a detail and i want to get the iteration value from my loop data node so inside of this particular node here if you were to go to the detail option you can see that we have this iteration detail attribute that we can use to generate a random number from and so we're going to look for that so we say iteration 0 and i want to fit this between 0 and 1 because the rand function is going to return a number between 0 and 1 and i want to fit this between something like 0.01 and let's say 0.5 as our max like so and so you can see now we're starting to get some random paneling designs right like so and maybe that's a little bit much let's say our max is like two five something like that yeah so we're starting to get something there let's also just do a rand let's actually just copy this right here don't have to type all that in anymore it seems to do random function or a random value from this detail iteration value and that gives me kind of this staggered look right and so now we can go and change you know our selection values but at least that gives us a nice way to split this up into smaller panels and you can play around with your weighted grouping values as well maybe like 0.1 0.01 was fine maybe just 0.2 yeah really depends on the look you're going for all right so with that we now have our panels to work with so let's move on to the next step let's actually put some net boxes around these guys and i'm going to call this my setup and this is going to be called our grouping so do our grouping like so very cool all right so with that let's move on to the next step all right so now we need to do is make our panels because we pretty much have all the groups and stuff that we need so i'm going to do a poly extrude here and this guy is going to then inset a little bit like so this basically is the paneling of thickness so the panel lines thickness i would say very cool and i want to output the side here so i can go and split that away so let's put that and we will split that on our extrude side here and then i'm just going to invert it because i really just want to give my paneling lines just a little bit of a depth to it now we're also going to have to fuse these guys here so i need to uh fuse this in order for this to work there we go and uh then all we need to do is go and give this a little bit of an insets maybe like .005 and then just a tiny bit of depth and basically this becomes your paneling lines this works really well for normal maps stuff like that you'll play around with that even more really depends on the look you're going for you can also round it out as well if you want to create more of a rounding effect i'm going to actually leave it this way it'll give it a little bit more punch in the normal map all right so with that we can go then and merge together our base panels so these are our base panels and our paneling lines so let's turn off our grips and attributes there take a look so now we got our panels now i just want to put the bolts on this all right and so for that we're going to go and inset from our panels so let's take care of that so i'm just going to do a poly extrude here and inset those guys just a little bit let's turn back on our wireframe on shaded there by hitting shift w and then let's just middle mouse click and drag use the increment ladder here and pick a position here and i don't need the side for this very cool so now that's basically where all of our bolts are going to go i'm going to create a group node and get the borders the border edges all right so i'm just going to call this borders and set this to edges and we are going to basically do it by unshared edges that basically gets me a group here that i can keep right and what i want to do is i want to get rid of all the other edges all right so in order to do that we're just going to use a dissolve node all right and inside of here what i'm going to do is i'm going to say exclamation mark borders and what's that saying is we want to keep everything but those borders or we want to actually it's the reverse of that we want to delete everything but those borders and i also want to uncheck our remove inline point so now you can see we have just a perfect outline for our paneling right very cool so what all we need to do now is just extract curves out of this so let's just use a carve node for that so i'm just going to do that and in this carb node i'm going to set the first units to zero on the second you to one and we're just going to basically cut it all internal u break points and this will give me primitives for all that stuff super cool so now i've got curves right so there's no more geometry here and then from there we can go and fuse everything because i just want to get these back into single primitives here so i can basically resample it so i'm going to fuse all those points together and then use a polypath node to turn those back into just regular curves that we can use to resample so now if you look at your premiums you can see you have curves for each one of those panels super useful it's actually very useful for a lot of different things this whole technique here it doesn't have to be paneling all right so then at this point let's just resample this this will give us our points to copy to and i want to resample a polygon edge if you don't have that on you can see you get these corners here now you might want that i don't know it really comes down to what you're modeling all right so now we've got a bunch of points along our curves here and so i'm going to set this to like .05 for now actually let's do point yeah that looks pretty spaced out cool and that basically gives us our points now we also are going to need our normals and so we need to track back into to the point where we actually lose our normals which is at the carve node here so let's do an attribute transfer here let's just do attribute transfer where are you there you are and let's do that sweet and so inside of this attribute transfer we really just need to transfer the end all right just so we just we know so with all that information now uh let's go and create a sphere this is going to become our bolt so let's go and create that and set this to polygon and let's make it kind of smooth here the final mesh won't have the actual bulk geometry on it then let's uh clip this in the z direction all right so let's go and do that so z direction the reason why i'm doing in the z direction is because it's going to whenever we copy to a point it's going to be facing in the direction of that normal and so that is the z direction for whatever copping onto the points beautiful so now we've got our bolt uh let's actually use a transform make it a little bit flatter and now you don't necessarily have to do this but i'm just going to scale it down on z a little bit make it feel more like a bolt head or maybe a rivet head like so you can make any shape that you want there uh we can also control the uniform size of this as well which is going to be very handy for our bolts and then finally all we need to do is put down a copy to points node so let's just select both these note nodes here and feed them in to the first input and there we go so now we got bolts all over everything and let's go and scale this down until we get a nice size now one thing you might want to do is just a really subtle effect here is do an attribute randomize and randomize the p scale value so that will control the scale of all these guys and for this i only really need the dimensions of one because it's just a single scale value and let's just make it really subtle so point seven five to one yeah it's really subtle just to break it up a little bit more all right so now that we've done that um let's merge everything together yeah so let's merge our bolts in with our panels over here do a little bit of organization and there we go so now we have bolts and panels pretty cool and actually relatively easy so but that's why i really wanted to show this particular technique because it's actually not that hard um you just need a good way to extract out just the curves right so now we have control over um our inset for the bolts here by using this slider so we can inset these guys to wherever we want them to be then you have controls for the size of your paneling lines here usually keep these guys pretty pretty tight there and then you also have controls for the depth so let's do um the lines depth just so we know uh this is going to be the bolt off offset and this is going to be the lines uh thickness like so cool and then let's uh bundle all this up in a nut box here we'll call this a panel construction there we go so with that we're pretty much good to go so all we need to do now is get our color ids working and we just need to bake out some normal maps in our color map and our ao map so let's do that in the next step let's now focus on getting our vertex colors all set up for the color id mask inside of qxel mixer so i'm going to start with the bolts and that one's easy i just need to add a single color here and what i'm going to do is i'm going to assign it to my primitives and we're just going to give it a red color that's what i did for my example and i think the b scale is a little too much let's do 0.85 i just want it to be really subtle yeah there we go all right so then we need to do the actual panels themselves and so i'm going to create an assemble node here and this is actually a nice trick to get these color id maps out quickly so i assemble it and that works because these are all separate pieces of geometry they're not fused together and so now we get a name attribute per piece there so you can see that we got a per piece and then all we can all we need to do is drop down a color node here and set this to a random by attribute so i do primitives random from attribute and that attribute is this name attribute so if i just do name and it can be any attribute as long as it represents each panel right so now i have a random color for that so now when i merge these guys in here i get all my color ids so this will allow me to put like sections of paint on certain areas of the model and i have a way to mask out just the bolts using the bright red or the value of red cool so one thing we do need to make sure of is that we promote this to a vertex color so i'm just going to promote this from primitive to point and the attribute we want to promote is the color attribute there we go cool so the next step now is to generate the lores mesh and the uvs for it so let's do that in the next step all right so let's go and get our low res hooked up so i'm going to utilize an object merge node and i'm going to grab the tube before we cut it up so i'm just going to call this get low and with this selected i'm going to come up to the top here and one thing we should do is actually just put down a null node here we'll call this our low mesh just so we can represent quickly so let's go select our object merge node again and i'm going to drag and drop that null node right into that object one right there and then turn off our transform information because we don't need it it's being created inside of this node and so the transform information is already there so now we have the low mesh right it's just the tube before we cut it up which is going to work perfectly in this particular instance all right and so in order to create nice seams for this i need to figure out how to get or select i should say one of these edge loops here and so i want to do a procedurally i don't want to do it by hand so i'm going to do another group by range here and all i really need to do right set this to point so let's set that to points there and i need to get the number of columns because i want to select one point out of every single column here all right so to get that number of columns we go up to the tube here i'm going to get the column value i'm going to copy that parameter and i'm going to then paste this into this guy right over here so we're going to select one of so many columns right so one of 49 in this case that leaves me with this one point but you'll notice that for every single row it selects one so one of every 49 points there right it selects it now one thing we should do now this will totally work right off the bat let's actually roll through this process before we split this i actually want to split it into two just so i have more space on my texture sheet all right and so i'm going to call this group my seam points like so and i need to do a group promote because our uv flat node works with edges all right and so i want to get a group promote and i want to promote this point group to an edge group and the reason why i'm doing that is because here inside of this group by range there is no edge group selection there and so i want to convert from my points to my edges and the group i want to convert is the seam points the new name is going to be called seams now you notice that i get all these edges here so i just want to include only elements on the boundary that gets me a perfect seam i can use for the uv flattened node so now i can drop down that ud flatten node like so hook this guy up like that and then set my seams or my semas let's actually change that just so we're professional here all right so it seems beautiful now i'm going to save my scene go into my uv view you can see now i have a nicely unwrapped tube procedural uvs for a tube now like i said before or i said earlier i want this to be split into two shells basically and so to do that i'm just going to divide this column count so let's actually click this label here to get back to the expression i'm going to divide this by two and let's go and take a look at here and you can see that it's actually kind of offset a little bit now that's most likely because we have a odd number for our tube and that actually is not most likely that is the reason if i were to put this to 50 yeah so now you can see so so to keep that number even in this case at least not a big deal all right so now we get perfect seams there and if i were to take a look at my ub flatten i have two shelves so now we just need to do a uv layout layout node beautiful look at that these are perfect all right so i'll probably drop i just want to take up more space in there now this is the only downside to this particular technique this is totally not procedural what i'm going to do right here i'm just going to scale this on x so it fills up the entire sheet there and that will totally make it really rough to actually put decals on it so in this particular case your decals will have to be meshes that sit on top of the the little res mesh but in this demonstration it'll work just fine all right so let's um put an up box around this and i'm going to call this my low mesh and this is my high res mesh so i'll just put a null node here just to give myself some information there we go very cool and then last thing we need is our bake node so let's do labs mass baker i do have the latest version of the side effects labs tool kit so you'll need that in order to use this particular node now if you don't want to bake here inside of houdini you can always do it in substance painter or whichever baker you are most comfortable with or like the best alright so with that all done we are now ready to make so i'm going to make this to a 2k map here and i am just going to send it to wherever the hip file is saved into a render folder i'm going to leave this at default like so let's take a look at our trace distance i'm going to set this to something smaller so 0.05 i don't need to cast the rays that far and then i want to make sure i i generate my normal map my vertex color map and my ao map that's really all i'm going to need for quick soul mixer so with that i'm going to hit save to save the scene and then we are going to render this out and when that is done i'll be back and we'll take a look at the results all right so let's take a look at this looks like we need to put some normals on all this stuff so let's uh put our normals on here totally forgot that step so normals i'm just gonna make sure that this is totally smooth and for our high-res mesh we'll do the same actually i'm gonna put it above my null node there yeah so now we have proper normals for everything and i'm gonna have to go and bake this out one more time uh because we got weird normals there just because there weren't any normals present all right so i'm just going to bake this one more time all right and there we go much better so make sure to put those normals on there all right so that looks pretty good we have a nice ao map and we have a nice normal map so with that all done let's jump over into quixote mixer and take a look at texturing this all right so let's uh jump over into quicksome mixer and get this guy textured up it won't take that long and to do that we actually need to get the fbx file out here so i'm going to drag and drop a rop fbx output node here and i'm going to delete this export obj and just wire in the low res mesh into the fbx node here and i'm going to call this my whole panels 002 because i already have one created so i just want to make sure i can find this particular one so with all that that's pretty good pretty much good to go let's do a save to disk and let's jump into quicksole mixer here so i've gone ahead and created a new mix inside of a new project and i'm going to go to my setup tab here and go to custom mesh for the model settings and that particular asset is right here so it's probably going to be in a different location on your machine so i'm just going to load up the fbx file so that way i can see my glorious tube here let's go and load up our normal map so let's go get our gnome up here i'm going to go into where i saved those guys so now i have my normal map that's looking pretty good let's load up our occlusion map there we go i'm just going to increase the intensity on that it's looking pretty nice so far yeah and then finally we need our material id so i'm just going to turn this guy on by loading up the material id texture as well cool you can see it's already automatically gone and isolated out all those colors for you so if you you know want to you know specify your own colors you're going to have to do that inside of houdini but that's why i use this assemble that assemble node technique so let's go back to houdini here really quick and take a look at that that's why i do this so it's really just an assemble node and then a color node with random from attribute just really quick way to generate a bunch of different uh color ids all right so the first thing i did here in my local library i just went to metals and i plopped on this iron first i kind of blended two metals together so right off the bat that gives you a really cool look um the one thing i do need to do is go to my placement and turn down my scale to something like point one and you can also scale up your models inside of houdini by just putting a transform node that actually looks pretty good yeah and then i i went and put on an illuminate on top of this just to blend them together again i need to plop the scale down to like point one because i like the the different scratches there so let's do 0.05 okay it's pretty good and then you go and you know mess around with all these values here to get the look that you really want it really shiny it's pretty cool right there all right so one thing i noticed you know about the starship spacex starship is that the aluminum and you see this quite often is kind of wavy right it makes it look kind of fragile but um it is pretty strong so what i did is i um went and turned on my smart materials and they actually have an aluminum foil yeah so i put this aluminum foil as my base there and right off the bat it's going to be way too strong and so one thing i don't want is any of that displacement i don't care about any of the displacement for this particular model all right and most of the effect is coming from this folds right here and so i'm going to pump up the radius so it blends nicely and then for the scale i'm just going to find a good location for this i really want to make this kind of large and i also want to kind of pull back the the normal so i'm going to go to the normals here just pull the normals down a little bit that just gives it that kind of cool look for these different panels yeah very nice alright so the next thing that i did is i went and created a solid layer over here and is did i just put that in there yeah let's move this up and out of that group so i created a solid layer this really is acting kind of like a dirt all right and all the defaults are pretty good here i'm just going to go and make this like a dark brownish color like so i'm going to go and add a mask stack to this and the thing i want is curvature all right and the levels i'm just going to tighten these guys up here a little bit so you can see it's already starting to work pretty well something like that yeah and then i usually take a noise through that right so i add another noise to this like a simplex noise change the frequency uh the amplitude could be changed to it really depends i'm actually going to leave it i do need octaves though and we can up the kind of noisiness of it and then just multiply this over and this kind of breaks it up yeah allows me to break that up like so pretty cool uh one thing i need to do is let's turn off our metalness there we go yeah it just really kind of highlights those paneling lines ah you could do whatever you know there's a lot of different things you could do here all right so then i went and created another solid layer and basically this acts as like the paint and so i'm just gonna pick like a dark i think i did like a black color here and i'm just gonna use the add id mask and just start picking random colors from here until i get something that i like yeah maybe not that one that's kind of cool yeah it just kind of lets you explore you know different looks got a really tiny guy right there yeah and that pretty much was that all right you know you can go and mask all that stuff out if you want some like noises and stuff actually what we can do is just copy this mask stack and let's paste it onto our paint that's going to get rid of it so all we need to do is just invert it yeah it's not picking up the curvature stuff very cool all right and that is how we create procedural panels inside of a houdini you can always go back and change um any of these values up here all right so if you were to change you know something like the the rows you get different paneling looks paneling designs really depending on the mesh that you want then you can also go and you know add another channel here to change all of your weight and your seed values so you have control over that and then just uh re-export easy peasy obviously you know this is working well for a tube if you have something like a boat hull or like an airplane i'm sure you're gonna have to you know find a couple other tricks but that is the the core idea right there that's the core concept behind extracting out these paneling lines and uh creating a cool textures form all right thanks so much you
Info
Channel: Indie-Pixel
Views: 5,529
Rating: 4.984436 out of 5
Keywords: Houdini, Houdini 18.5, Procedural Modeling, Quixel Mixer
Id: iOifn7eAIZc
Channel Id: undefined
Length: 36min 17sec (2177 seconds)
Published: Sun Dec 27 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.