SideFX Houdini - 9 tricks to master procedural environments

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hi guys welcome back on my channel where we experiment cg workflows to make cool art you are probably aware that side effects organized past month the martini challenge a daily competition in which you could win some prizes rules were simple everything had to be hundred percent made inside hooding it so no external models omega scan just texture files are a load every day started with a new theme and you had to work with that even though i was super busy with work i tried to participate a few of these days mostly the ones related to environment since it's what i like the best that was a fun exercise that really forced me to shoot straight to the point and deliver one art in a day maybe you know that i use a lot procedural system which can definitely make things tricky for such shortened projects but it was totally doable and today i want to crack open my scenes and show you some cool tricks i applied for each one of my contributions without further ado let's dive in modern stone for this one i actually already released a full breakdown if you're interested the main approach in a nutshell was to extract geometry out of my drawing with the moon the rock and also the wolf geometry and what i'm doing with those is scattering points in there and as soon as i plug this point cloud in the second input of a voronoi fracture it's fracturing this wolf into different pieces and i can control the amount of stone that's going to be generated with the scatter node it's pretty straightforward and to have more control i use a add node to manually add a point and manually place them to really control where i want some particular fracture it's pretty cool to move around and see how it interacts with the other point and fractured dimension to some very cool pieces and we also have different fracture on the moon and on the rock the main challenge here is to get variation with the size of these rocks to do so i controlled the scattering of my points with an attribute called density to generate this attribute i extracted the borders of my drawing with a poly wire and generated this mesh filling it with a black color and on the original drawing i'm using an attribute transfer to transfer the attribute cd which is the color you can use the blend width to add more or less of this color and same here i'm basically transferring and filling the area around the wolf and as soon as we use this density attribute inside the scatter it's gonna add more or less point based on this attribute let's visualize the result in the voronoi fracture and increase the amount of point just for the sake of demonstration so we do see that we get bigger chunks around the borders and some smaller one closer to the wolf so that's a pretty cool result that you can get by tweaking this density attribute at this point i'm remeshing extruding distorting my pieces to make them look like stones and as you can see we can still iterate on this density attribute and get different result so that's pretty fun that's the benefit of using procedural in this case mardini mod for this one i went for some african mod structures and the tricky part here was to get a lot of variation and chaos to really sell the look of this building this one will be more difficult to break down since it was so rushed to deliver the final image in this case the use of loops and vex expression was key to bring the chaos that was required i basically started with a line with a lot of points to represent the different section of my wall the pawn jitter in this case is here to break up the length between each points and what i'm doing with this curve node is i'm extracting one primitive per edge basically so we can see now that we're getting some primitive on each edges instead of a long one so that's very important because it allow me to loop inside all these primitives so in there i'm replacing the line by a box of the same length and this attribute wrangle here it's basically extracting the iteration attribute of my loop so it's actually pretty important to bring randomness as you can see i'm using this detail function to basically grab this iteration attribute and i'm using a random function to randomize my iteration variable that i fit between a minimum and maximum value in the end this minimum and maximum value will dictate how many times i want to duplicate this floor in height i use the boolean to insert this window and i'm also adding some lines based on this window position that will dictate where i want to add sticks on this building and basically at the end of the loop we should get some random kind of variation in terms of floor numbers the shape of the windows so everything was designed in a way to kind of really get randomness and chaos so as you can see you can always tweak the amount of floors etc so it's always using the same trick with the iteration and randomizing it so in here we got all these lines and i want to replace that by some sticks and planks and all that stuff so i'm using a loop to loop through every primitives and i'm basically replacing that by a line that's going in the normal direction so that's cool at this point i'm using a pawn jitter just on the last point that i call end in my group and i'm looping through these two primitive to scatter the same amount of points it's the same amount of point but they don't have the same position and i'm using this seed attribute to basically randomize the seed of the scattering so this way we still get the same amount of points but with a different seed and this one is basically controlling the amount of point for all those two if that makes sense so as you can see you can increase that and we're getting more points fun stuff and if we want to connect those points we can use add sub and use by group by attribute and let's call the attribute id that we defined by id equal adpitinum and that's what we get we can also use a curve sub to limit the start and end position of those points if we go through all this loop we see the result and we're getting very different results sometimes we're getting one blanks well one line two line three line etc and we can start meshing those i'm using a sweep sub to get those planks and it's pretty straightforward stuff but we do see some pretty interesting result that seemed to match my reference that might be by far the most tricky one i had to do martini river for this day i got inspired by germany's devil's bridge i think it's called rocket spruce sorry to my german friends and to do this scene i used a bunch of different kind of tools and techniques like for the forest i used my scatter system that i developed over the past year called al advanced scatter which allowed me to deal a bit more easily with instancing so i created this tree with the side effect slabs and basically use my tool to instance them for the iv using iv timing which is a nice little plugin i like to use and i'm mostly gonna break down this bridge setup so what we have here we got half circle you can sweep it and start doing some extrusion for the sides of this bridge using a knife to kind of cut some sections and this will also define where i want to start my basalt formation so at this point i'm splitting into two sections that will be for the basalt area this section of the graph is more for the bridge itself so i'm using the vulnera fracture again which is great to achieve stone look could use an explode view with a very low uniform scale to visualize the chunks and i'm using a loop to loop through the connected pieces and remeshing them with a vdb vdb from polygon i'm smoothing this volume and convert it back to polygon then i'm re-merging with the original geo to get something kinda closed and applying some volume displacement i'll show a bit later in this video how i'm doing volume displacement but moving on to the rest of this setup for the basalt area i'm starting by extracting the bottom geometry and remeshing it using the divits up allow me especially if i'm using compute dial to convert the faces into some hexagons so that's pretty nifty to get some basalt look and can control the density with very mesh so actually it didn't go through this group and same trick then with the stone day i'm using an attribute transfer transferring some colors to define some attribute that we control the height so the height in this case is controlled by this slider and i'm also like doing some turbulence manipulation stuff inside this verb looping through every primitives and extruding to get this column look and the extrusion is defined by the attribute height i created in my wrangle and the base of this attribute of course is these initial colors that we are transferring with the attribute transfer this is pretty nifty stuff and uh can cache the final geometry with all the displacement and uh yeah because it's uh doing the job yep moving on the tower here it's same principle i'm using a circle as a start as you can see i kind of messed up the orientation um yeah so same principle with the loop extrusion and volume up to bring some fine details displacement let's actually go through this volume verb it's super simple super simple i'm using the position and adding some turbulence to the position and feeding this position back into a volume sample file and just making sure primitive name is density and that in my vdb from polygon the distance vdb is density or yeah that actually should work and doing some vdb combine operation to kind of get rid of the interior and get this cute little door and twisting the final geometry to make it look a bit more evil that's a bit too much i guess 360. you don't even see the door anyway but well why not yeah so that was the kind of reference i used with raccoon thanks germany for that [Music] mardi wave this one was a trippy fun one inspired by chicago's aqua building and the setup is super straightforward as you can see like super small and starting with a grid with some extrusions like basically two layers of extrusions and then a copy super simple like duplicating the different floors on the other hand we also take this grid and add a lot of points smoothing the borders the the corners i mean and that will constitute the base for our wave structure i'm copying with the same kind of parameters and the windows and stuff and at this point i'm creating two level of sweep one that's very thin and one that's very wide cool so now it's just a matter of mixing them with an attribute just one trick here you could still play with the distance and everything would be affected on this side as well so it's important to keep things procedural in that way and how i'm doing that is using this copy which is a reference node ctrl alt shift r and drag and drop so this way we got the perfect same copy and as i said we are mixing two geometries that are exactly the same just with different width one thin one large it's important they exactly have the same amount of point and primitive if we want to mix them so i'm mixing them with a point verb you could also do the exact same thing with an attribute triangle i just like this little setup with the import point attribute where you can just grab the first input second improves mix that and plug your attribute in my case i called it displace and this attribute was generated here down the line we had different noise that were mixed together with unified noise basically so we don't necessarily need that many it's just to have different frequencies for such a big scale and exporting that with a bind export exporting a float called displays also note that it's animated and to do some animation you can use the frame function here multiply it by a parameter that you would call speed and plug that in the offset of your noise you have to convert it into a vector though that's just one trick and yeah you can control the speed and get some very trippy animation so yeah that's a fun little exercise for this one it's pretty classic stuff just a terrain the setup itself is super simple very small graph that's a nice change and we are starting with height field generating a mask adding some noise in this mask and starting to kind of distort it and basically distorting with different frequency one that is pretty large and let's say a medium layer of distortion at this point it's ready to start some erosion and we are getting some interesting features already but we need to oppress so first thing i keep doing some distortion and i'm multiplying the density by two with the resample and then i'm doing another erode to get another layer of breakups height field slump it's always pretty useful to kind of get some interesting stuff happening in uterine i'm using the height to drive this and it's basically feeling a bit some of the cavities so kind of help to make things a bit more natural in my opinion but well moving on generating a mask at the base of this valley to kind of start bringing some more extreme distortion like so and another erode this one kind of helped bringing some debris accumulation at the base of the volley so it kind of helps breaking up a bit more those shape and make it look more natural then i'm doing an overpass of a press with a resample multiplying the resolution by two and starting to do some more erosion so this one is focusing more on precipitation so it's great to get some cavities flowing along the valley in terms of settings we increased okay precipitation probably change the density water absorption and repose angle um moving on i think we are pretty much there and i'm just generating some mask at some point using my mask builder tool that is available on game road and using this slope feature to generate some mask this one is based on the height and creating those attributes kind of help me to prepare my shader and basically i'm using those masks to blend different materials in my shading network so i imported different mega scan materials using the quick cell bridge and i'm importing the attributes with the error scalar user data as you can see this one is importing base so just to show you the process i'm gonna break down this material blender if i simplify and reduce just to the base we have a rock surface kind of thing it's just here to bring some wide frequencies of bright and dark tones then the second layer is basically adding some more high frequency stuff well we can barely see it in this case and the third one i think i was starting to add more sand in this case yep we start to see the sand layers that's accumulating on top of the rock and if i visualize the last one we got some kind of absorption of this sand so in some areas getting kind of polluted or affecting by the weather so that is not too perfect so that's pretty much it for this guy death in grass so here i wanted to make some wheat which i'm not sure we can really consider that grass but whatever was fun to do i'm using my advanced scatter to scatter a bunch of different with model i created so we're gonna see in a sec what's the procedural setup for that so if we go back to the wheat with a it all starts with a circle and a line that i'm using to generate a model with a sweeps up so getting a nice seed for wheat and you can use the scale ramp to control the shape actually so doing some uv operation in there and extracting this mask using an attribute transfer like we did on the stones etc so it's basically extracting these lines and doing a sweep and transferring this color and here we go so i'm using that moral in shader i guess and here we can copy this seed on the lines so we're gonna see a little bit how this is set up so it all start with a circle with five divisions and using it as a cross section for a sweep of the stem well it's not really the stem but it's like the area where we have the seed and using a bend to distort it so the sweep is getting thinner at the tip and we are basically using copy to point to copy all the seeds to this geometry this sweep geometry and then we can change the amount of division if we need more seeds revolving around the stem thing can also control the length of course if we need something that's taller shorter could almost animate it actually that's fun stuff um this copy to point i'm not sure what this is here for i don't remember but well at this point i'm extracting the lines i added on the seeds and distorting those using a sweep to kind of shape those lines and merging that back with the rest so in this case i'm going for a full-grown type of wheat but if we were looking for something younger we would want these lines to be straighter yeah this copy to point is basically copying the final position of all those seeds to the main stem and basically taking the last point and copying our seeds on these target points called end doing a bunch of operation to mesh the stem so i kind of wanted to get those breakups here in model and to do so well first we have the stem and doing a sweep and using a boolean and this what this is using as a boolean is a section of the stem that is carved using cuff node doing a resample some jitter copying some circle and i'm using the circle to slice to do so the boolean operation has to be set to shatter and not subtraction intersection this kind of thing so now we can play with those circles and it will affect the model using the peak to push the slice thing that have been generated so i'm just here generating some attributes for shadings and yeah we are pretty much done it's time to cache the final model of this wheat usually i would do a kind of hda to drive the different feature of a procedural model but i didn't have time so i just copy and paste the geometry context of my wheat and one in there changed also the features that i wanted get some different bending length etc and something i can't stress enough is of course always look at reference understand how the shapes work study that observe before actually starting the project otherwise you can spend hours doing unnecessary things for this challenge we had one day so important to be efficient and go straight to the point [Music] mardini day 14 engine for this day i decided to go for a more traditional modeling approach and try to get the temple thing so how things are working in terms of model inside of dnes actually like any software you can do poly extrude that kind of thing do some bevels so at the beginning it's kind of weird using nodes to model but it turned out actually super convenient because you can always go back to preview states and have this non-destructive aspect to control your work then remeshing with vdb is doing some displacement like we did on the river with the volume up and yeah that's kind of cool because you can always iterate on the extrude or any feature that you can expose bevels kind of thing and did the same for the columns actually it's very same principle you can always change the height etc so it's fun stuff and basically making some mini tool for every kind of elements i have in my scene to make things a little easier like this one is a smaller version of the colon and basically out of the colon height and distance i'm generating this on top of it so this is basically generated out of the position of those columns and to do so i'm basically importing the columns doing a bonding box extracting the top doing a boolean of those two columns and this way i can extract these squares here that i gonna extrude and yeah here we go we are already getting the main shapes and what's great is as soon as i move one colon this would update so that's always a nice things with procedural non-destructive workflows for this kind of lines of stuff uh it's actually super simple just extracting the borders of my geometry so to do so just to group and unshare the edges and dissolving this group so you can just extract the borders and doing a resample to add a bunch of points orientational curve and here you go you can copy to point any geometry on that stuff ornaments or whatever and control the amount of object with the resample so very basic kind of self operation really um and as you go you kind of build up different layers of detail for this one it's a little more tricky it's just a displacement on this geometry um how i set this up is basically i made a little tool fringe displays can basically control the repetition of the textures changes completely the texture if we want the displacement scale that kind of stuff and how i'm doing that is i'm looking through the primitives and for each faces i'm unitizing the uvs so basically uv flattens unfolding things and uv unit eyes is fitting the uv to zero to one doing that for all the primitives with the loop once we have this base we are ready to subdivide the model i use the divide sop get this high density thing and it's time to apply some displacement so i'm using a vertex vap in that case to bring a texture if we dive inside basically importing the uvs with a bind and extracting the u the v and multiplying those to kind of get control on the repetition using a texture note to import the texture and feeding that into a displace along normal so this node will end up displace the geometry and here we go getting some nice kind of detail for our temple got another layer of those ornaments some bigger ones this time because interesting to play with different frequencies and at this point still adding some more mesh until we get to this capital thing i'm gonna break down how i building the destructions and thing so for the roof what i would call the roof how did i do that i'm basically turning the latest element in the box extracting the top and sweeping with a circle doing some extrusion and remeshing with some volume displacement this kind of thing when it comes to destruction what i usually do is extract a geometry that will represent the area where i want to bring destruction in this case it's the borders of the roof so if i'm increasing the amount of points we see a bit what's going on and i have a copy to point that is copying some spheres with different scale and adding a mountain to kind of bring some noise and using vdb combine as sdf difference to remove some shape out of this roof can always place with the scatter to get more or less destruction so it's a pretty nifty way to kind of quickly add detail to your model and get some nice roon kind of look so i generated different version of this top let's see yeah for the rest is mostly the wall stuff it's kind of the same operations uh with booleans and all that stuff and i'm assembling that in a way to get this wall so in the end it's doing the job i didn't have enough time to kind of push the texture or add further details i will probably rework it with less constraint maybe bring some statues from that i would sculpt in zbrush things like that we'll see in the meantime that's what i got in a few hours of work day 17 sci-fi so that was a fun one i would say the challenge here was more in terms of lighting shading kind of composition rather than modeling this because this kind of structures specifically using always the same kind of techniques the challenge here is mostly in terms of design how do you balance out those shapes to make them look massive and give this idea that it could be from another world i got really inspired by paul chaddison's artwork been working on sci-fi architectures and really i was like looking at his work and trying to understand how he's playing with negative space and shapes to design some buildings basically so i'm trying to use some booleans and extracting some areas with a knife and it's always a nifty little soap i'd like to use to kind of slice things and do some pulley extrude and things like that so can do some more booleans knife and this kind of things and you can end up with pretty intricate modeling hooding juice by doing booleans really and it's always cool because you can come back and change the models at any time change the shape of boolean or anything so this one is more like the main structure where i'm starting to block out the main shapes and remove some some areas on the side i also like to use a lot the symmetry node or symmetrize that basically simplify a bit the work so if i'm turning it yeah let's see the other side assuming your model is centered it will symmetrize your elements in a certain direction you can of course duplicate things and do some more booleans um cutting some broader shapes as well it's always great to get some primary shape blocked first and so i was actually pretty happy with that um at this point i just wanted to see how it looks with panels and who knows might just be enough to sell the look of the structures so i'm using dvd sub to divide the geometry and auto uv the side effects lamps tool to get a generic kind of layout of uvs so that's great because we were not allowed to bring external model i had to kind of model a spaceship so where is it yeah it's a very simple kind of shape might just do the job for the distance it's ridiculous but with fog and stuff my not not just so much detail and it might be enough yeah so in terms of shading i'm using some different textures that i'm mixing with different frequencies and i guess it's doing the job could look at the aovs to kind of get an idea how this was made so that was a fun little project [Music] mardini 19. roll rural how do you say that whatever so i decided to go for rice field kind of look and i'm starting with a height field so of course gonna be the same kind of technique i showed you before to some extent main difference is i'm using the trace node here that is giving me this nice kind of undulating shapes on the on the valley so that's pretty cool then it's just a matter of making it look less procedural i guess and i'm flattening first the bottom with a remap and a mask so extending some mask and i don't know what i'm doing here some replacing some areas and most importantly is breaking up this trace with some distortion so that's the first step to kind of get something look a bit more natural and another layer of distortion but this one is more local i guess because i created a mask noise to kind of isolate some distortion and doing a resample to oppress the look of this terrain and using a mask by feature by slope actually to extract the mask of this uh where we would grow the rice basically and i'm shrinking this mask a little bit and subtracting a constant value using a height fit layer so as soon as we subtract this constant how i generate it is just with a height filter map and set the output min and output max to let's say 0.7 and subtracting this value could of course try something more extreme like 10 meters but wouldn't make sense right let's keep things realistic and i'm using my terrain exporter to export the high-res version of my terrain with some body reduce and using asset loader to finally load the final result it's looking nice and clean it's optimized otherwise would be 16 million polygons well that's pretty sweet now we also need to extract other geometries for scattering one thing i need is this little gel that represents where the rice grow and i'm using a delete soap to extract that basically i'm exporting a cache with a poly reduce to keep things optimized always this one is to grow some grass some generic grass basically and using this expression at mask smaller than certain value to trim the geos and same for the water in that case i extracted um the surface of the mask before subtracting my constant so that we can extract a nice flat layer of water as you can see it's not exactly flat though there are some areas that are a bit messy so i'm trying to do some cleanup um what did i try well in that case i'm using a for each connective primitive to flatten a little bit and it's just important that the transform got dollar c e y to center the pivot and yeah so that would be my layer of water that i'm outputting here and that would bring into another geometry context so that would be the main terrain and as you can see i'm bringing the water in this particular context so i can apply different materials and stuff and it's looking pretty sweet already i'm also using some scattering so all the geometry we extracted so this one was like the soil on which i'm growing the rice so i'm using my tools the hell scatter to instance this grass that i modeled real quick well not grass some kind of rice growth and this area is more for some grass actually uh to bring some green in between those t-rays this one is just some bushes growing here and there to kind of break up this terrace look so for this one i used the side effects labs 3 tools i'll show you in a bit how i proceeded thus those are a scattering of trees so same deal using side effects labs tool um let's maybe break down one of these so that was one of the bushes maybe let's see this one should be uh okay so i'm starting with just a trunk generator adding some branches and some more secondary branch and at this point i'm starting to add some leaves so these tools are actually pretty well done i didn't have too much time to try those yet um i think so far i still prefer like using speed 3 but since we are like limited to houdini in this challenge i had to kind of try to find a way and fully use the potential of houdini i guess pretty much it for today guys i'm kinda lacking time to develop more tutorial series unfortunately but maybe i could do a more in-depth presentation of one of the scene just one though if it's something that you'd like to see let me know what you think in the comment section otherwise i'm still preparing some more tips based on a totally different project that i have been teasing for a while now maybe next month i'll finally publish a video on approaching victorian architecture [Music] thank you for watching i hope this video was useful if it was please consider subscribing and i will see you guys in the next one
Info
Channel: Adrien Lambert
Views: 14,498
Rating: 4.9481268 out of 5
Keywords: sidefx, houdini, tutorial houdini, tutorial houdini environment, houdini masterclass, houdini tips, houdini tricks, houdini for environment, houdini scifi, houdini heightfield, houdini terrain tutorial, houdini environment tutorial, houdini environment masterclass, houdini ricefield, houdini grass, houdini greek temple, houdini ruin model, houdini procedural model, houdini tutorial modelling, houdini tutorial procedural, houdini noise turbulence, houdini wave, houdini chaos
Id: JXdUmuoxoJc
Channel Id: undefined
Length: 42min 43sec (2563 seconds)
Published: Mon Apr 26 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.