Getting the transcript
Reading the captions from YouTube. A video nobody has opened here before takes 10 to 30 seconds; this page fills in on its own.
Getting the transcript
Reading the captions from YouTube. A video nobody has opened here before takes 10 to 30 seconds; this page fills in on its own.

Kenan Proffitt · @KenanProffitt
Where viewers went back to watch this video again, from YouTube's public Most replayed graph, lined up with what was said at that moment.
Most replayed moment #1
20:292.3x the video's typical replay level
right here from our previous level so let me grab all of these nodes and just drag this out I can take the output from this set position node and feed it right into this instance on points node down here and if it helps to organize all of these a bit more to the
Said at 20:23
Most replayed moment #2
13:182.2x the video's typical replay level
the base and growing to the top as well all right we need some random rotation so I'm going to uh shift and right click create a point here just to give ourselves some space and for the rotation we're going to use um a line Oiler to Vector drop that in and then we
Said at 13:11
Most replayed moment #3
0:432.0x the video's typical replay level
now let's jump into blender and make some trees inside of blender I'm going to select everything by pressing a and then just X to delete and then we'll press shift a and add in a curve and we'll use a bezier curve grab all these points and delete but with that curve selected even though there's nothing
Said at 0:37
The graph counts replays. It does not show where viewers stopped watching.
Words
6,415
Runtime
35:57
Speaking pace
178wpm
Reading time
27min
178 words per minute, just under the 181 median of 349 measured videos. That distribution comes from the 349-video hook study.
Opening (first 30 seconds)
hey everyone kenen provi here welcome back to another blender tutorial in this video we're going to create trees in blender using the power of geometry nodes you're literally going to be able to just draw a curve and have a tree just grow right where the curve is it's super super cool it's a little bit lengthy of a tutorial but if you stick with me to the end I promise you're going to end up with a really cool tree generator if you want to skip all
89 words, the words spoken in the first 30 seconds at 178 words per minute.
Free, no signup. See how the first 30 seconds hold attention, with rewrites.
What this transcript is
Every word below is the caption track YouTube publishes for this video, pulled from the video itself and reproduced unchanged. It is not Prepublish's writing, not a summary, and not a re-transcription: it is the video's own published captions. English captions, generated automatically by YouTube, in the video’s original language. Source: the video on YouTube. A channel that would rather this page did not exist can ask for its removal through the contact page, and it is removed.
hey everyone kenen provi here welcome back to another blender tutorial in this video we're going to create trees in blender using the power of geometry nodes you're literally going to be able to just draw a curve and have a tree just grow right where the curve is it's super super cool it's a little bit lengthy of a tutorial but if you stick with me to the end I promise you're going to end up with a really cool tree generator if you want to skip all of the work completely then you can uh head over to my patreon and just download the file where it has all of the different settings preset ready to go for you and you can just use it I'll make another way available to download link in the description you can check that out for now let's jump into blender and make some trees inside of blender I'm going to select everything by pressing a and then just X to delete and then we'll press shift a and add in a curve and we'll use a bezier curve grab all these points and delete but with that curve selected even though there's nothing there let's go to Geometry nodes and create a new geometry nodes Network I do use the spreadsheet but not that much so I'm going to give us some room here and now the group input is that bezier curve so if we just draw right here we could go to front view and we can draw a line and if you want to uh set this to a real world scale now would be a good time to do it so uh you know maybe you set it to metric or I'll use Imperial and then you could kind of um use a measuring stick here so maybe I want a 50ft Tall Tree just give a guide of what that would be um you know it might be helpful if you're doing like uh if you're going to be using this tree in a real world setting just to have kind of an actual scale reference that's not super important what is important is that you have a curve and that you have a geometry nodes Network added to that curve all right so now what we can do is immediately start to grow branches off of this curve there's a lot of ways you can add points to a curve in blender and in Geometry nodes but a curve actually already has points map to it and we can control those points with a resample curve node so if I just drop that in you can see I can adjust kind of the resolution of this spline just by dialing that up and then uh we can just take that straight into an instance on points node and drop that in and our curve disappears and that's fine but for now let's add in a curve line node and plug that into our instances and now these are our branches um and then uh let's see let's just rotate these by 90° just so we get you know they actually look like branches and then I'm going to set the curve line to Direction and then just drag the length out now to get this back in with our original curve let's add a join geometry node and then take uh this resample curve into that join geometry node so I'm going to grab this and feed it straight into there all right we're done so thanks for watching everyone it's been a great tutorial all right so uh this is the beginning of our tree and you can see the branches will uh move and adjust procedurally if we adjust the curve after this resample node however I do want to add in a trim curve node because you don't have to do this if you add the trim curve node in there this will allow you to make a nice growing animation so that as your tree grows you can do like a a spawning animation which is always really fun now we naturally want to give our trunk some thickness here so after the trim curve node I'm going to add a set curve radius node and put that right here and then I'm going to add a curve to mesh node and drop that after the set curve radius and now we need a profile curve to actually set the radius of our trunk so we can do that with a curve Circle node and drop that in right here and feed that into the profile of our curve okay and now the radius we can adjust right here woohoo all right there's our trunk it's beautiful thing but obviously you'll notice a problem we want the tapering we can rotate this a little bit so that it looks more like a base we want the tapering of the trunk to uh be wider at the base smaller at the top well uh good news we have the length information for our curve just automatically if we drop in a spline parameter node if we control shift and click on the factor of the node you see nothing but if you control shift and click again on the curve then you see this white to black value which essentially is uh one to zero uh value and then faded and this uh this can be used for a lot of different things we will use this value um to determine a lot of things throughout our whole tree but this is really important just to be able to know that you can grab this information inform and then utilize it in a in a way that's useful so what I'm going to do I'll delete that viewer node and I'll take the factor of that spline parameter straight into the radius that c created exactly what we want not but it did it did give us a a thicker and thinner value so we just need to uh reverse this and we can do that with a math node and set that to uh subtract and we'll subtract one and so now it's just inverted and we can actually create sort of a shape here with a float curve node and drop that in right there and so now with this node we can sort of map out a shape that looks a little more interesting so you can get some nice flare there at the bottom if you want kind of a more interesting root system um and then of course you can kind of make an interesting shape all up through here if you want the the trunk to have a little more character totally up to you and then of course adjusting how much taper we get there at the top so pretty cool that you have the control to just sort of draw and then of course you can increase the resolution of the trunk just by increasing the count here but it's important to note that that also increases the number of branches here I actually want there to be two different factors here for the branches and one for the resampling of the curve so I'm going to separate the two so that we can control them independently from one another because there might be a case where you want a really low resolution trunk but you want to have a lot of branches so I'm actually going to lift the trim curve node just by pressing alt and clicking or option on a Mac and drop it right in front here so we can still do the trim curve animation but then on this resample node I'm going to control shift d duplicate so that we maintain the connection to that trim curve node so that it's connected to the same thing and I'm going to feed this one into the points so now I can independently adjust how many branches we have here and also adjust the resolution of my trunk so this just a small little uh tidbit there you don't have to do it and there's again there's so many different ways to build a tree and blender I'm really trying to go for you know the biggest bank for our buck with the fewest amount of nodes and I will try to explain uh each note as we go so that we don't get lost in the shuffle but all right that's kind of our our basic trunk setup um fairly simple we can control the shape we can uh control the curve and then we can control the amount of branches that are spawned off of that curve all right so now we just need to iterate on the branches and we want a system that will allow us to control how many branches are grown from the top of the trunk as well as how many branches grow from the in the bottom and then maybe some randomization for the probability of a branch growing on the point but before we do that let's give these branches some thickness so let's just go ahead and duplicate actually all of these nodes right here we can just shift e duplicate them now if you want to get fancy because we are going to use this exact setup right here for the spline length we can grab these nodes and contrl G and group them and then we can Tab out of that and then we have this nice node group set as the radius and remember this is just we can tab back into it this is just the factor of our spline setting up some uh length with the the exact shape of the trunk in here with a curve node so we can rename this I press in bring up the sign menu go to node and underneath properties there's the actual name of this node group so we can call this spline length or whatever you want and now instead of all of these nodes cluttering up down here we can delete those press shift a and come to group and there we see spline length that we just created so now we can grab that and we can feed this into the radius of this set curve node down here and now we can set the curve of our branches into that and then feed that back into our instances and now all of that just kind of works and we have thickness the same uh with the same radius applied as our trunk and we can take that down with this radius on the actual curv Circle so that it's smaller than the actual trunk we can also use this value right here as the scale for the branches themselves so if we take this into the scale of our branches then you can see they do what is very natural for trees which is the branches are larger at the bottom and they get smaller the closer they get to the top now depending on the design of tree you want this might not be desirable uh so if you want the ability to control this what we can do is drop in a map range node and if you set this two minimum value to one but then you can slide these values around and then you can kind of taper off that effect a little bit more I like to have just a little bit of subtlety where the branches are a little bit bigger but maybe not as Extreme as this so play with a map range value until you get kind of a tapering that feels good for your particular tree and again this is something that you'll be able to adjust uh kind of based on whatever tree you're designing now I mentioned we want to create a system to pick what branches are actually grown along the tree so let me grab all of this work so far and move it down so we can get the index of this tree by using a spline parameter node and grabbing the index right here let's feed this into a compare node and we'll set this to less than and now we can take the result into the selection and so now if you start to adjust this you'll be able to say okay we don't want a branch growing from up there maybe the trunk is too thin right there at the top so we want to adjust that take it down essentially just kind of a manual way of calling but what about the bottom if we don't want branches grown down here we can literally just do the opposite so control shift d duplicate and instead of less than let's do greater than and feed that into the selection and so now if we reverse that it's the branches being grown from the bottom but obviously we want the combination of both of these so shift d duplicate this compare node feed both of these into here and we'll do equal so now you can adjust the branches growing from the base and the branches growing to the top of the tree now what about some randomization some just random calling well we can use this pick instance node and feed this into a random value node and uh by default mine went to Boolean if yours doesn't just choose Boolean and now we have this probability Factor it doesn't make sense right now cuz right now at zero all the branches are grown you turn up the probability to one all the branches disappear so we can get the exact opposite of that by doing a Boolean math operation and setting this to not so now zero no branches are grown and one all the branches are grown and then if you dial it back it'll just disappear random branches and you can change the seed of this too so this is a nice way of just randomizing your branch and it'll take into account what you've done here with the branches growing from the base and growing to the top as well all right we need some random rotation so I'm going to uh shift and right click create a point here just to give ourselves some space and for the rotation we're going to use um a line Oiler to Vector drop that in and then we can drop this into the rotation of our instance node all right now the factor of this we actually want to be the length of our curve because if you look at real branches the branches lower down will be stretching out further than the branches at the top typically so the branches at the top typically sometimes can be straight up because they're uh trying to find the sunlight the branches at the bottom go out further because they're also trying to find the sunlight so we want to uh utilize the spline parameter length value once again feed that into the factor here and everything is all over the place so let's drop in a map range node so you can see I'm adjusting these from minimum to Max values and now we're getting something that looks a little more organic where the branches are sort of fanned out the branches near the top are kind of peering upwards a bit more the branches near the bottom are sort of reaching out and we're getting that nice classic shape of a tree this might be a good time to sort of play with the actual length of the branches the actual size with this minimum and max value because remember we're adjusting this based off of the size of the tree as well so that the branches near the top can get smaller that takes care of the initial sort of angle of the branches but what about the actual rotation around the tree because right now it just looks like a mohawk we can drop in a random value node and set this to vector and we'll feed this right into the rotation of that that align Oiler to Vector node and then we can you can actually just zero out the X and the Y and then just start spinning the Z something that resembles branches growing off of a tree which is pretty cool you can go to top view if you want to spin this more to get some nice randomization uh and then you could of course randomize the X and the y a bit if you want just to get some more variation just be careful about going a little too crazy with that uh cuz it might throw off the actual angle that you set up right here now we can start sort of testing everything that we've done here if we want to increase the total number of branches we can resample this curve that they're grown off of and you can see that it adjusts now where the branches are along the curve so now we can adjust how close they get to the top of our curve with this value here and we can adjust the probability uh we can of course adjust the rotation and the alignment with these values here you can also test what this looks like if you were to draw multiple trees and if we've done everything correctly it should just keep repeating the process of spawning different branches on that curve and now you can see how we're getting that cool customization where you can draw any shape and it'll start to make a tree so one really obvious problem is these branches are far too rigid we need to add some bending here so we can do that right at this curve line before we do any of the actual converting it to a radius and the way we can do this is with a rotate Vector node so I'm going to drop in a first set position node to set the position of it and then I'm going to do a rotate a vector rotate node which will require a vector I'll feed this into the offset I'm sorry I'll feed this into the the position of our sub position node the vector we can grab from a position node and feed that into the vector of our Vector rotate and now we just need an index of this curve for the vector rotate to rotate based off of a point on this curve so we can get that with just an index node and feed that into the angle in order to be able to control this let's add a multiply node and choose an axis we'll choose Y and now we adjust this value you can see it's uh not doing anything and that's because this curve is essentially just a straight line I don't know if you can see that but there's no points in the middle so uh we need to resample this curve to give us some resolution and now you can see we're getting kind of that weeping willow effect and we get some Bend so if you want your your branches to bend that way Bend upwards got nice lots of nice control here we can also adjust the length of our branches with this node so now it's really starting to look more like an actual tree which is pretty neat we'll get into adding more Distortion to the branches and the trunk as we go but I don't want this node setup to get any more confusing before we start generating more branches on top of these branches so what I'm going to do is frame up these nodes that make up our trunk so I'll grab all these nodes shift p Just organize these by naming them and I'll give them some color and I'm going to grab these nodes right here shift p and I'll name this Branch level one so hopefully this doesn't get very confusing this is just all of our trunk setup right here and then this is Branch level one and of course if you want to download this file to reverse engineer it link is in the description all right so like I mentioned we're going to add some noise and Distortion to these branches but I wanted to start building out the the next couple levels of branches before we get to that part so the good news is we can actually duplicate and reuse all of this work the bulk of the hard stuff is all done so I can grab all of this right here and I'll grab that instance note as well and I'll shift d and duplicate it I'll name this Branch level two give it a color now we got to think about this for a second because what we're instancing is actually going to come right on top of this curve right here particularly after the bending so if we view the seos node you can see we're bending that curve and then we're adding the radius and then we're instancing that on the trunk which is what's happening there and then we're joining all those instances with the trunk itself so what we need to do on this level is create another level of instances right on this curve right here so that we can add radius to it and join it right in here before it is instanced on this level so if that's as clear as mud then I'll show you what I mean we have all the setup here for an instance node we just need an input for points well we want to grab this curve right here from our previous level so let me grab all of these nodes and just drag this out I can take the output from this set position node and feed it right into this instance on points node down here and if it helps to organize all of these a bit more to the side you can do that as well so now we're instancing points on this curve right here and what are we instancing uh a brand new line that also has the same bending the same angle and map range in the same radius set so if we view this you can see we're getting another level of branches being instanced on that curve and we'll probably want to adjust all of these settings in here so that it doesn't just mimic the same angle and everything so for starters you might adjust the length of these branches but really all we have to do now is take the output of this instance and join it after this level already had the curve radius applied and the reason is we're going to want to adjust the radius of the next level of branches independently from this radius so that's why you join it after this node and not before so let me delete my viewer node and I'll add a join geometry node right in here we can move it up here I'll take the output of this instance node and feed it into that join geometry node and now you can see what we get we have another level of branches instanced on that first level of branches so now all these settings uh just kind of work here you can adjust the alignment of this level of branches and of course you can adjust it independently of that first alignment more importantly you can adjust how close they are to the base or the tip of the branch so if you want them getting closer to the the trunk of the tree and you want them getting further away can do that as well uh you can increase the probability and then of course adjust the length of this level of branch you can also very importantly adjust the radius now you'll notice what you can't do is adjust how many of the this level of branches there are because if you adjust this res sample curve all that does is increase the resolution of that iteration you can adjust the bend here on this level but you can't adjust the the total amount you can adjust the probability but not the total amount and that's because right in here we actually need to resample this curve in order to get another value for how many points we instance on that curve so let me just drop in a resample curve node right here and now we can increase the total density of that level of branches we can go really crazy here and you turn the probability down and remove them from the inside of the tree so that they're gr more toward the outside and now if we go all the way back up here to our trunk if we look at our trim curve animation it is now broken so it looks like I got that mixed up we need to actually have this after our two resample curve nodes because remember this one's going into our trunk this one's going into our branches so I had it right the first time this we need a trim curve node for each of these but obviously we don't want to um adjust the factor of both of those so we can use a combined XYZ node here and feed that into the end value of each of those and now this is our Factor there we go brings back our growth animation we get that nice Branch creation which is pretty awesome uh and now we can move on to our next level of branches and it's just the exact same story everything we've done just duplicating however many iterations of branches you want uh that's how many you can make so uh for our is I think we'll just go one more here so let's do um let's give this a color and I'll adjust this color and I'll do Branch level three and uh everything should be set in place we just need to make sure that we grab the curve coming in from this set position node so the previous curve and this goes into the points on our instance node so again it's kind of confusing because you're sort of working backwards in a stair step all the way to the top you just think of these as the iterations of Branch splitting here so now we can take this instance node and feed it into a join geometry node right here with this curve and now we have uh kind of a layer of Twigs right there on the end so this very last level of branches you can decrease the radius and then of course you'll want to adjust uh the density so another resample curve node right here and you can adjust how many Twigs show up on that final level of branches they go all the way to the end which is what you want you might want to have them go a little bit closer to the base but that's looking pretty natural that's looking like a tree right there and then all of our other settings uh the rotation the angle the bend you can adjust all of these things if you want to kind of save RAM and make this be uh less resolution then just take down the curve line for your twig and then you might want to make this curve be a bit smaller if this is where our leaves are being grown off of all right so before we get into adding the final step which is of course the leaves uh I want to go back up here and work on adding some noise to all of these levels of branches so I'm going to add some noise to this curve and I wanted to affect the curve uh before it gets the radius applied to it and before it's spit out to the points here I'm actually going to add it right here after the resample curve node so I'm going to press shift a and just like we did with the bend on the branches I'm going to do a set position node and I'll add a noise texture node I'll take take the factor of this into the offset and now if we wiggle this around you can see some noise Distortion in there but you can see it's offset from all of our branches so to fix this couple things we have to do first a vector math node set this to subtract and subtract by 0.5 so that gets it back in alignment and now we can uh if we adjust the resolution of the tree you know say let's crank this up to 50 we can adjust the scale of the noise and we get some Distortion in there let me just view the trunk so we can see what we're doing here we don't just want the noise on one axis though we want it to be on uh the X and the Y control shift d duplicate those just giving myself some room here and I'm going to do a combine XYZ node right here and feed this into the Y and now if we move if we adjust the scale on the Y if you look at from Top View you can see what we're doing how we're distorting the curve along the Y and the X so that it's moving in two different directions get a little more Distortion and obviously this is totally to taste however much you want to work with here it's just a nice subtle amount all right I'm going to do the same thing we did earlier with the spline length I'm going to group all of this along with the set position position node contrl G Tab out of there and I'm going to name this group noise so that we can reuse this uh on all of our branches I'm also going to take this output and feed it into the resample curve node that's going into all of our branches and you can see the difference there because right now we just have the input fed into there and it changes the position of the branches slightly when we add in that noise so now they stay locked to the actual trunk of the tree better and now if we want to adjust the noise we can of course go in here and adjust it but it's helpful to have that value be able to be adjusted from the group input so I'm going to grab this group input come here to group and add two new sockets for the noise scale of each of these you can add the detail too or however many settings from here you want so I'll name this noise scale y all right so now you don't have to dive in in there to adjust the noise scale for these two AES which is cool so now we can use that same noise group right here after the instances and this is convenient because what we can do is just grab our noise group that we just created and feed that right into here and you'll notice that it's not really too exciting if we slide this around however if we drop in a realize instances node in front then all these instances become realized and now the noise pattern is way more interesting and so you get kind of a global jittering of all of the objects here so this is obviously to taste however much or however little you want to do there's a lot of different ways of adding noise to a tree in this case um or in a case like this but that was just kind of a a quick and easy way that I found all right now let's move on to the final iteration which will be the leaves we're going to do similar a similar setup as all of this but we don't quite need all of these so I'll just go ahead and Shifty duplicate this setup and then we'll just kind of delete what we don't need so I'm going to give this a nice green color and we'll name this leaves and once again the same thing that we've been doing we're going to take the set position node of this curve into the resample node and that's fed into the instance on instance on points node so I'm going to set this to one and remember we're essentially uh the little twig that was instanced that's what we're going to grow leaves on here so instead of a line we're going to delete the line and delete this res sample we're actually going to delete the all of the bend as well we don't need any of the curve or the mesh we don't need any of these nodes we can leave the scale node for now and then our picking instance nodes are fine what we really need is something to instance if you have a leaf sitting on your hard drive then you can grab that I'll make this leaf available to anyone regardless of if you're part of my patreon or not uh but it's just a simple Maple Leaf object and it's actually a front and back material but again you can um drop in any Leaf you want whatever works best for your scene so I'm going to grab our object here again and what I can do for our instances in this case is just grab that leaf right into our Geon noes Network and now we have this geometry output we can feed right into the instances we just need to take this and instance it right back on just like we've been doing the join geometry node grab that previous curve uh and then oops and then we'll join that back up and I don't see the leaves so let's check our probability here we go now we can start to adjust how many leaves are on that twig iteration and they are far too small you can use the the scale where it's trying to make them a little bit smaller closer gets to the top or we can just unplug that have them all share uh the the inherited scale so we don't actually need this value anymore and now we can crank up the scale of these leaves a little bit I'll just give this Leaf a viewport color make it a little more exciting and so now you can see the final effect or tree really starting to come together and of course you can change the uh random rotation of the leaves if you want them to kind of uh fan a certain way and what we'll need to do is set the material on each level of branches here so after the trunk I'm going to do a set material node and grab my bark material that I just appended can see that sets that to the nice brown color um and I'll make this material available as well okay so set the material after the curve to mesh and before the join geometry that's where you want to do it where it won't stomp over the leaves so on each iteration after the curve to mesh before the join geometry that's where you set the material for your bark now of course to make this into a tool what you would want to do is connect up all the settings that you would want control over on the side panel right here so if you want control over over the animation you feed that into the group input and now you can see we have a value here that you can label on this node right here or I'm sorry if you go to the group node then you can label that input uh this Z value you can say growth animation and now you have a nice slider for the growth animation right here which is pretty great and that would be the case for any setting you want to adjust so say you want to adjust the bending of the branches which this one is uh this is pretty touchy if you want to make this a bit less extreme uh something we can do here is uh shift d duplicate that math node and set this to a different uh form of measurement so we can convert to radians and now that makes this a little bit less extreme with the bending but then you could take this value and feed it into a group input node and you could call this for example Branch one bending and now you have that slider right here where these branches are bending and you can adjust it like so I'm not going to do all of the settings I'll certainly make my tree available where this is all finished out if you want to download just that you can check that out in the link so there you have it making a tree in Geometry nodes where you can draw trees just with a simple curve adjust them in real time go to rendered mode as long as you have materials set they should look pretty awesome well that's it for this video thanks so much for watching everyone if you're a member of my patreon shout out to all of you I really appreciate it and like I said at the beginning go grab the file if you want to reverse engineer it you can check out how to make this tree link will be in the description thanks so much for watching everyone I'll see you next [Music] time
The words are the caption track's own and nothing is reworded or re-transcribed. Paragraph breaks are placed between sentences so the text reads as prose.
Free tools for your own script. No signup, no login.
Paste your draft and see where viewers are likely to drop off, with a rewrite for each weak line.
Paste the first 30 seconds of your own draft for a hook score and rewrites.
Check your draft against YouTube's advertiser-friendly guidelines before you record it.
Read this channel's public videos and transcripts, and download a writing brief for it.
Sentence shape
| Measure | This transcript |
|---|---|
| Sentences | 1 |
| Average words per sentence | 6415.0 |
| Longest sentence | 6,415 words |
| Questions asked | 0 |
| Sentences containing a number | 1 |
Most used terms
Filler phrases
143 in total: uh 59 · kind of 21 · actually 18 · like 16 · um 12 · sort of 9 · you know 5 · literally 2 · I mean 1.
A literal whole-word count of the same phrase list the Prepublish browser extension uses, so a phrase inside another word is not counted and a phrase used in its ordinary sense still is. It is a count and not a judgement.