Blender 3.0 tutorial : Frozen World | Environment modeling - Procedural with GeoNodes

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hi guys welcome back to my channel where we experiment cg workflows to make cool art [Music] [Applause] [Music] i'm finally in vacation oh it's amazing now during this time i really wanted to try blender's geo-node chill out i'm not stopping hoodini tutorial it's still my favorite software in the whole flat world okay so i fold around with blender to create this illustration [Music] the robot's asset were created by daniel bishtek if you're not familiar with his work definitely check out his portfolio some really amazing stuff in there you can also find his scene wanderer on blender's demo files today i wanna share the modeling process of this environment in terms of reference this was based on the ice castle that you can actually visit in salt lake city [Music] quick disclaimer i'm not a blender expert by any means nor have i used it in production before i'm just using my own experience with all the 3d package to bring some insight how you can use some tools to create environments we'll go through some basic modeling some sculpting to prepare the base mesh for our ice castle thingy and then we'll use the geo nodes to really shape those ice formation and sprinkle it with bunch of details i won't talk about shedding an atmospheric today that would be for another video also note that if you're interested in getting the final procedural setup you can actually get it on my gumroad if you don't have this software no worries you can download it on blender's website for this tutorial i've been using the version 3.0 alpha so an experimental build and let's dive in all right the first thing we'll need to do is create a base mesh so let's start with a cube and we'll do some basic polygon operation such as extrude insert loop and move all those vertices around to shape the foundation of our model at this point we really don't care about detail or even secondary shape we just want to block out the proportions of what will be our iceberg or whatever so i'm really going for very simple shapes very simple operations moving stuff around always the same thing and once it's done i'm heading to the modifier tab and let's add a remesh modifier so what's great with this modifier is that it re-mesh our object with a consistent density of polygons and you can adjust the size once you're happy hit apply or ctrl a we now got a decent base to start sculpting time to shape this guy a bit more one pretty awesome thing about blender is that it offer a bunch of sculpting tools so now when i'm using blender i don't even switch back to zbrush because all i need is very simple brush like clay like standard cutter smooth this kind of brush so you can adjust the size using the shortcut f and shift f for the intensity so it's very handy actually and if you press alt click you will dig into the model now there is also a brush called scrape yeah i would be in zbrush the equivalent of the trim dynamic which is super handy because it gives this very organic rocky look because it breaks up the edges and smooth them as well so it's one of my favorite brush and it's great that we have that in blender now you're probably thinking what the heck is still looking like a third fair enough but we just need a touch of procedural magic now so let's head into the geometry nodes layout so it's pretty optimized for procedural we have on one side the 3d view on the other we got the spreadsheets that contains all the data of all vertices uh the faces edges and so on so all of this is actually super important because it help us actually see the values stored into each point that kind of thing so let's click on new and as you can see it's adding a geo modifiers that basically contain this network with group input and output so we're gonna start doing some operation using the attribute vector and we'll use this node to manipulate the normal to extract a snow layer so let's use the normal as input a we're going to change the operation to dot product and in b we'll use a vector that will basically drive in which direction we want the snow to be applied in that case that would be in the z direction so let's store the result into an attribute we could call it call but doesn't matter you could call it snow would be the same let's create a point distribute actually to visualize this attribute we'll use this point distribution let's increase the density so that we can see a bit better and in density we're gonna call our attribute so i call it call so let's bring it in here and as you can see if i'm changing this vector it's changing the direction of our snow so i think it makes sense to keep it to one in z and we can actually remap this attribute so using a color ramp as you can see we can limit the surface on on which the snow would be spreading that's pretty interesting i'm gonna leave it as it is and let's increase the point density quite a lot so from there i'm gonna remesh those points to create a new layer of geometry that will represent the snow so let's add a point to volume that basically convert all this point into a volume we can change the radius it's like creating a tiny sphere for each point and voxel amount would define the resolution of this mesh in the end so volume to mesh would convert this volume back to a polygon mesh i can use the threshold to say a limit of this density attribute but in that case i'm mostly going to tweak this voxel amount which drive the density of this of this mesh and i'm pretty happy with that let's actually create a frame in which we'll put all those nodes now you're gonna say adrian is pretty cool but we kind of lost our initial mesh but that's okay we can use a joint geometry and basically merge the group input back without snow layer that's pretty neat and at this point i also want to assign some materials so we now have in blender 3.0 this assign material node which is super convenient because it wasn't there before so we can create several material in that case i'm calling one like snow another one for the eyes and we'll apply that on our different branch of the graph so let's visualize the shading so my bad actually that was the snow and let's copy paste or recreate another material assign and let's call this one the ice so that kind of give an idea of what's going on here can increase the radius to kind of exaggerate this snow layer and what's great is that we can always go back to the sculpting mode and really shape our model in real time with this snow on top so that's pretty neat so that's one thing i love about blender is the fact that you can mix all those techniques to really art direct your model or your scene and to be honest that's one thing i really miss in houdini is just the fact to have at least some very basic sculpting tools that would help a lot i think sometimes but of course you have like crazy procedural tools but at the same time i'm really missing or directing my model this way and it's already time to tackle the stalactites just like we did before we need to distribute some points for those stalactites so this time it will emit from the snow layer so let's create a pawn distribute and increase the density now that's great but it's scattering all around what we want to do is something a little bit more optimized and will create an attribute proximity node so this node is actually very handy because it will create an attribute for us in that case i'm going to call it distance and it will basically create data based on the original geometry as a target so as you can see now if you try to remap this attribute with the color ramp just like what we did earlier with the normal for the snow and i'll call this attribute distance now what's interesting if we try to play with those values is that it's going to either increase or decrease the amount of point based on the distance that is set in the target into the attribute proximity node so all the points that are further than original cliff are going to disappear so it's just a way for us to get the static tight position in the most exposed areas now i'm going to rename this cube ice cliff because well it doesn't make sense to let it as a cube and now we're going to create a stalactite mesh which is as ben wyatt would say it's about the cones and that couldn't be more true so let's create a cone and rotate it in the proper direction and we'll play with the radius so this will just be a base to distribute on the points so i know for a stalactite it's looking a bit too simple and i agree with that but no worries we're gonna fix that in the procedural setup so back in the geometry nodes layout we're gonna insert a node called point instance what it does basically gonna replace all our points by a custom geometry in our case the cone pretty sweet now we need to deal with the orientation it's looking a bit weird like some kind of cactus and hopefully the align rotation node should help us fix that let's orient in z and minus one in the z vector the factor would basically mix with the original rotation so i'm just going to leave something like 0.99 just to get a bit of chaos now that's great but they are all looking the same what we want to implement is a function that control let's say the scale depending on the height of those points so the attribute separate is actually super handy let's say we want to separate the position attribute as you can see in the spreadsheet we have the position data of each point in x y z and we are interested in the z data because it controls the height of those points so in brazil z we're going to create an attribute called height so what it just did if we visualize this node and let's switch back to point it created a height that is exactly the position z that we had in here so if you check it's exactly the same data so what we will do shortly is manipulate this height attribute to control the scale but first let's do a pass of randomization of the scale to do so we'll use an attribute randomize here we go let's grab the scale attribute that store the scale data of all those stalactite so we could do a minimum of 0.4 something like that and change the seed you see that we got plenty different variation now we gonna use an attribute vector math to implement the function where the height will control the scale as well one detail i didn't notice is that we actually converted or scaling to a float so let's check out this node if we go back to the point cloud sheet we see that the scale is just a float if we change it into a vector we now have control over x y and z which is a bit more convenient because i don't necessarily want the base of the stalactite to get wider maybe i just want to randomize the z-axis actually i will just leave that to 0.5 in min and 1 as a max um let's see what we have in terms of data if we check out the scale we have some proper random values happening in there um now we also want to implement the height as i was saying so we need to add the height in b for now i haven't stored the result so as you can see it's not changing anything in the scaled data um one thing to mention is that the height is a float but we want to combine that with a vector which means that we need to convert the height into a vector as well otherwise it would convert the scale attribute into a float and we don't want that so let's store the result into the scale now and we can finally see what's going on so it's obviously way too big and also i think yeah my pivot shouldn't be in there let's move the object by -1 and apply the transform in location here we go so now the position of those stalactite should be correct in terms of scale it's getting way too big at the top so we're going to need to remap the height attribute that we created so let's use an attribute map range here we go now we want to manipulate a vector and the attribute is height and we'll override the output of this operation into the height now if we start playing with the from mean and from max we can see that we can really control the scale of these static types so mostly we want to control the z component of the vectors so that's why i'm leaving that to zero and just manipulating the z all we just did here is say to blender from a height of 0.3 meter this height attribute should reach a maximum value of 1 and add it to the scale if we reduce this value the height attribute gonna reach faster this value of 1 and therefore apply a bigger scale to those stalactites anyway time to clean up this graph i like to shift right click to create some points to reroute my network and actually control left click would remove connections that sounds a bit better let's move all those geometry to the right side right i'm gonna create a material assign for the stalactite on which we'll apply the ice shader here we go and ice we'll connect this little guy to the join geometry so that we combine all our geometry together we can display the shader see how it looks still looking pretty lame so far i guess the problem is even though we have some randomization happening in the scale is still looking the same everywhere and also the cone is sticking out in the snow layer so it's a bit weird so let's first fix this sticking out problem to fix that let's use a transform node and we'll translate the stalactites in z in minus d to be accurate so something like that helps already and it's looking a lot better now when it comes to the scale of those stalactites we have some scale based on the height some randomization but what could help as well would be some randomization based on the noise so i'm first going to clean up a little bit and separate this graph into different kind of network so that would be your scale by height and this section here we're gonna move it and make some room for the scale by noise attribute sample texture is the node we need to bring some noise into our network so we'll create a new texture and we'll probably use a type like cloud maybe distorting noise would be pretty fitting so for now nothing's happening because we need to define a mapping we could use the position otherwise if you have uv on your model um you could use uv map well we don't have any of these since it's made from scratch so let's use the position and store the result in an attribute we'll call noise a so the result of this attribute is a color which is similar to a vector that's why i'm using an attribute vector math to combine the scale and this noise a so you can see on the side of the attribute if it's stored on the point if it's a vector a color this kind of information which is pretty important the result is here stored into the scale and now if we play with our texture map size the type and so on it will help us to drive the look of the scattering so we are looking for some nice breakup i'm gonna try playing maybe with the contrast and most likely the size yep something more like that i'm liking those variation much better already yep sounds about right let's try a bit bigger yeah i think for that scale that would work now if we compare before and after we do get some more interesting breakups happening in the scale now if you remember i'm not a big fan of changing too much the radius of my stalactite just want to affect the length that's why you're going to use an attribute vector to remap the noise a and start the result in noise a as well and we'll set operation to multiply and if we multiply just the z-axis we basically got the multiplier for the length and 0 in x and y basically won't affect the scale the radius of our cones basically it's a pretty simple trick and yeah something like that i think the overall length is a bit too much yeah probably reducing to something more like that would help so you know what we're gonna take a step back and set the final output to zero for the scale by height and scale by noise just so we can focus on the initial values that we had into the attribute randomize at the beginning so probably going to set that to zero and let's see if we start integrating this height function probably could play with the minimum value as well it didn't touch it too much i guess it depends if your model has got negative values too all right and actually let's see with this one i'm gonna increase the length based on the noise and pretty happy with that i'm gonna create a frame for this three guys here we're gonna call that scale by noise all right nice let's also rename this one snow setup so hopefully it's clear enough and for this one and this one we're gonna call it density stalactites so hopefully that makes sense all right it's all nice and clean now i guess we could make those stalactites a bit more sexy to do so we're gonna remesh them using those three nodes we created in the snow setup with the point distribute point to volume etc out of the box it's looking super blobby because the values that were for the snow we're going to need something much more subtle like a radius of 0.01 or something like that and increase quite a lot the point density so we start seeing some things happening but we could also increase the voxel amount to get more resolution and decrease the radius so that's still pretty blobby but i think at this point it's not looking too bad so what's cool with this technique is that it's actually merging all the stalactites together and getting some more interesting transition between them from there i guess we are ready to detail this guy a bit more time for passive procedural details first thing we want to create is some extra element that we could scatter on the snow surface so that would be some kind of snow clamps i'm first using a nycosphere and applying some displays so for now the display doesn't have any texture let's create one and we're gonna apply some noise like a voronoi maybe i'm gonna play with those features see if we can get something interesting also we could probably change the distance metric to another type so we got manhattan and chebychev might be a good candidate actually yeah i'm gonna go with that and scale a little bit this fear in x and it's get the all noise and all that thing um so i'm actually going to apply a remesh and another displace on top so we could this time apply distort noise it's looking kind of crazy though so we're going to the strength in the modifier yeah maybe something like that um so since we scaled the model we didn't apply the transform yet but we probably should so i'll transform now the texture is not scaled just the model so that's pretty cool um kinda yeah i guess could look like snow maybe playing more with the size or cloud texture yeah really looking for this kind of snow clumps that we could scatter and randomize on our model yeah that's not too bad i guess i'm gonna fine tune a little bit maybe adapt the mesh could do a subdivision surface to smooth things it might make things pretty heavy in the end depending on your hardware so keep an eye on the polygons too i'm gonna rename this guy rock a well it's it's not a rock but well you get me right and this one we could call that rock b and we're gonna do some like modification in terms of scale and apply this transformation and we already get something pretty different i kind of want to make things a bit more different though so i'm gonna adjust the noise textures that we have in this place it's kind of looking like a pancake like a snow pancake that could be a interesting effect we'll see how it goes um yeah something like that if you contrast it let's say i'm happy with that okay so what the heck the name is wrong here let's fix that and yeah that's two elements that we will scatter on our snow so as you can see our surface so far pretty smooth we kind of want to break up that with some noise as well on top of the geometry we just created so first i'm gonna subdivide the snow there's no layer and we're gonna save a state of a new position i'm just adding the position and the normal attribute and store that to uh the position again just for the sake of demonstration and as you can see it completely inflated the model because we just added the normals um so we're gonna store this result into position b and we're gonna do an attribute mix let's mix the position with position b and store that in the position attribute so as you can see we can mix those two states of position usually in unreal engine or houdini we call that a lure now what we need is an attribute that will drive this factor that basically mix those two position so this attribute we're going to generate it through a noise texture just like what we did with the stalactite so let's drop an attribute sample we'll use the position as mapping and result into a noise b attribute let's load a distorted noise and let's see how that would work let's load the noise b here and here we go we are now mixing those two position problem is that it's a little bit too extreme so you guessed right or maybe not we need to remap this noise b so we'll store the result in noise b no reason to create a new one and the max can reduce that to 0.1 and it looks already much nicer so this is the effect of our noise i think before it was just way too extreme so that we can see the potential of this noise and we can also create another layer of noise so i'm going to create a new texture and we're going to load another kind of noise maybe a cloud yeah something like that we're gonna store that in noise c but we're gonna need to combine it with the noise b um so let's use an attribute math for that since it's to float we can just use this node and store that result in noise b so noise b will combine the original noise b and the noise c if that makes sense and i'm gonna also remap this noise c just like we did for noise b and we can also introduce some negative value for the minimum output so that it dig the model instead of just inflating yep so you kind of get the idea so something subtle like manual 0.05 and can increase the subdivision to get more detail well that's up to you depending on your hardware and yeah i think with the subsurface scattering and everything that will look pretty nice at the render at this point it's already looking much nicer isn't it all is left to do we're gonna grab these nodes and pack them into a group using control g you can press tab to go back to the main graph moving on it's time to scatter the detail we've been creating so what i'm gonna do i'll drop a point distribute just like we did for the stalactites and we'll also add a point instance so same deal but this time we'll pick one of these rocks like rock a or rock b let's randomize the scale so at this point you should be familiar with the attribute randomize and we're gonna randomize the scale let's set that to vector just so we can control every axis independently and i'm gonna reduce the scale well will depends on what size you've been creating your elements but for me it was pretty big let's not scatter that too much yeah something like that so kind of help bring some breakups and we will copy this setup and we'll do the same but for the rock b let's not forget to join that to our geometry and in the point instance we will pick another rock element let's change the seed and we can play with the scale as well but when it comes to the orientation of this particular model i kind of want a different orientation let's say we want to align that in z and kind of make it a bit flatter actually i kind of like the pancake shape that i was talking about earlier and i want those pancakes to kind of sticks out out of the out of the snow and they will also emit some of those stalactites so we'll need to implement that as well so fine tuning a bit the scale um i think that could be a pretty nice option if we emit some stalactites out of that so let's make some room i'm gonna move all those nodes and actually this part right here i'm gonna move it up and i wanna combine that with the stalactite area so we had this point distribute and we'll do a separate scatter for the stalactite emitting from this rock so let's drop another point distribute i'm gonna try a density of two and join the geometry so we're just gonna merge those points together let's see there's something wrong here okay my bad this pointing stencil should go here and i actually didn't apply any material so that's good so now we got stalactite emitting from this rock as well cuckoo cool now we can always play with the density and the seed to get different result so i think i'm gonna tweak this one instead here we go so there are some interesting things going on it's pretty neat look a bit too simple so let's replug this um remesh setup and i think the radius is way too big right now yeah probably more like this even lower yeah getting some more intricate stuff going on and later we'll apply some displacement on this guy as well first i want to apply this group we created for the displacement on our original geometry so it's kind of hidden but well at least if we see it there's some detail now i'm gonna disable this modifier for a sec and just play a bit with my sculpt see if we can get some more interesting things going on if i maybe adjust this area so let's go back to the geo node and activate it so the more complex is your procedural setup the longest it might take to cook especially if you have remeshing operation time to expose some parameters to make our setup more user-friendly so first i'm going to duplicate this displacement group for our stalactite right before the material assign and after the remesh so right now those values are way too strong but we're gonna adjust that so instead of changing values inside the group we can expose parameters by connecting the group input with the parameters we want to change and expose upstream so now we got the mean max values of the remap of noise b and c so we can play with that in here without affecting the displacement of the other groups you can see these node groups as some kind of mini tool to facilitate repetitive node operation within your graph and i think that's extremely interesting i wish there would be more ways to kind of customize the ui of those things but well it's already pretty good to have this kind of control and now we could also do the same kind of thing with our geo nodes themselves and expose whatever parameters we want to expose to the modifier tab actually so what we want to expose is for example density control for the snow clumps element we created and distributed on the geo we also want to expose the scattering of the stalactites so let's expose the one on the rock the one from the original geo and let's see well whatever you feel like you would need to actively change you could expose it and then rename those parameters otherwise gonna look all the same so that would be density for rock a then we would have another density for the rock b this one was for stalactites so we can control those parameters now from the modifier tab which is pretty great we don't necessarily need to dive into our graph now one thing i want to implement is a proxy switch so we have two inputs and we can swap between them with true offals now what we need is another version of this setup that's much lighter so i'm just going to disable that to make things faster and i'm going to take all the elements before we divide them or remesh them it should help us get a faster feedback of what the procedural element would look like especially for the stalactite if you have a lot of them and also depending on your hardware can be pretty heavy with the remesh so i'm connecting this john geometry to our switch and we can also expose the switch parameter like so i really have to find an overweight to connect these group inputs it's not super user friendly um but yeah the switch we're gonna call it switch simplify for example and you want to use it more or less depending on your hardware um if we switch that to one okay so we don't have material so just gonna fix that real quick and copy the material assign here we go so i think that one would be snow and let's see okay so something wrong with the material i think that's what the wrong material yep much better so that would give us an idea what the proxy would look like now we also need some of the rock element let's do a joint geometry and we'll combine this layer of detail together like so and let's connect that to the join geometry of the proxy we can create a frame to kind of make a distinction between what's for the proxy what's for the high res so proxy geo here we go so hopefully it's not too confusing and let's see what we have so that's the proxy so yeah if you want to tweak this base mesh and get some thing like a real-time feedback of the procedural i'd rather use the switch simplify so everything should run pretty smoothly yeah allow us to kind of tweak the models and really see what the shape could look like in the end and once we're happy we could just turn switch simplify to zero to see the high risk model one new feature inside blender 3.0 is a delete node let's see how we can use it so all those stalactites are all over the place right now let's say we'd like to our direct at which height we want them to appear we could use an attribute separate and just like we did before to control the scale by height we'll use the position attribute and split it especially the result z we want to export that as a height attribute now what's interesting is that we can compare this height using an attribute math and compare it with a custom float so let's set in a or height attribute and in terms of operation we want to compare if the height value is less than our custom float we set in b so let's store the result in height which basically means every value above zero shouldn't be deleted so we'll use a daily geometry and call the height attribute now as you can see every stalactite under this b value is gonna get deleted it was pretty simple we also could have set that into the density attribute but it was just a nice way to show what we could do with the daily geometry so i'm creating a parameter to control the height in here as well so i'm calling that min delete and we can control that from here so yeah we may not necessarily want that stalactite at the very bottom so that's an interesting feature to have let's switch to the full version it's looking pretty sweet now that we have a setup ready we can use it to generate assets so this is the library of models i end up making out of my little setup so we see that we have a broad range of shapes and stuff happening in terms of setup i exposed a few more parameters as you can see just to offer some extra control over the scattering the scale rotation and all that good stuff now there is also an extra kind of layer of stalactite well that would be stalagmites i guess it's those that are pointing up at the top here so in some reference i had we often found some kind of stalagmites going in kind of random direction so instead of having the static mites aligned to the z-axis i kept some kind of random rotation here and end up with that effect so some extra tips i can give in terms of procedural model is to use some simple deformers such as bend or twist to kind of improve the look or make different models so in that case we could try a twist and basically twist this simple shape and try to get something more intricate out of that let's see how it looks with the geo nodes so it's pretty interesting i guess it would be harder to sculpt this kind of twist so often using simple deformer can really bring some very cool effect to your models let's see i'm going to play a bit more and maybe it's changed to a band should probably change that to y here we go that can be a pretty interesting shape to have would also depend on your shot and that kind of thing so you can always r direct your model let's see with the full res model here we go so yeah that's pretty fun stuff now if you have some brand new object you want to create let's say out of taurus or whatever we're going to do a try real quick just so i can show you the workflow let's uh rotate this guy that would be some kind of arc a giant donut it's not really an arc but and let's add some subdivisions some displays maybe that could help breaking up this perfect shape here we go let's add the texture we'll add some distorted noise increase the size that kind of thing and yup that sounds about right let's go in the modifiers and now let's say we want to apply this geo we have to control click and copy to select it now it copied the geo node but it's in the wrong direction because we need to apply those transformation and here we are we end up with a iceberg donut kind of thing harvard blender user like to make donuts so sure why not can make iceberg ones too so yeah fun stuff now out of these models it's the goal is to create a scene right so let's see what i end up with so this is a scene uh i created with blender 3.0 as well you're reusing the same models in some cases i disabled the visibility of the geo nodes but they are actually um tagged to be rendered inside the modifier so if you just leave this camera on it will still render the effect just for visualization purposes it's not always useful to have it on um really depends but yeah otherwise in some cases i actually baked the geometry into proper polygon and apply the decimation kind of process so as you can see this is a model that's been completely reduced in terms of poly count same in here so all the background stuff basically i usually go inside the modifiers add a decimate reduce the ratio and end up with less polygon so just a nice way to optimize the models and make sure the scene doesn't get too heavy that's pretty much it for today thank you so much for watching i hope you had as much fun as i had playing with the geo nodes and yeah i can't wait to experiment more with blender and see some more updates on the version 3.0 now for the next video i will show some exciting shading and atmospheric trick that you can use on your project so if you don't want to miss that definitely subscribe and i'll see you guys next time [Music] you
Info
Channel: Adrien Lambert
Views: 14,305
Rating: undefined out of 5
Keywords: blender 3.0, blender tutorial, blender geo nodes, blender geometry nodes tutorial, blender geometry nodes, blender procedural modeling, blender procedural modeling tutorial, blender environment modeling tutorial, blender iceberg tutorial, blender frozen world, adrien lambert, blender environment workflow, blender illustration tutorial, blender modeling, blender sculpting tutorial, blender sculpting, blender point instancing, blender scattering, blender attribute tutorial
Id: -OzjQsJfDhA
Channel Id: undefined
Length: 47min 57sec (2877 seconds)
Published: Sat Jun 19 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.