Transcripts
1. Introduction: Welcome to the Geometry
Nodes beginners course. In this course, you will learn everything about
manipulating geometry to create beautiful and attracting shapes and
animations by using math. Today, I will give you an introduction into the
field of the geometry notes. So what it is and
how to handle it. So at first, what are geometry notes or what
is geometry nodes? So Geometry notes is a
modifier in Blender. So for example, a modifier Here, like the bevel modifier, just modifies the
geometry of the object. In this case, creating
bevels along the edges. And just like the
Babel modifier. The geometry notes modifier is a modifier to manipulate
the geometry of an object. So let's just add the
geometry notes modifier here. As you can see,
nothing happened, and the modifier menu
here is pretty empty. That's because you have to build your own modifier with geometry notes.
That's what's it for. To do that, you have to open
the geometry notes editor, which is here in this list
of many window types. It's right at the beginning
here, and just click it. After you change this window to the geometry notes window. You can either create
here or here a new yeah, geometry notes group or a
note group for your modifier. And here is your modifier, how it's currently looking. Currently, it's taking
the original geometry, which is the geometry
of this cube, and modifies it along this path, which is no modification
because it's just one line, and it ends here in
the group output, which is the geometry
you can see here. So currently, this
modifier does nothing. But let's just talk about the controls in this
note menu here. In this area here, you can maneuver by holding the middle mouse button
to drag your view, and with the mouse wheel, just the scrolling motion, you can scroll in
and scroll out. So by this, you can
navigate in this window pretty nicely and just look at nodes and
zoom out, and so on. Furthermore, you can
move these nodes just by grabbing them with your mouse with the left mouse button, or press G, when you
have something selected, just like in the three
D viewport where you can press G to grab objects. Here, it's the same thing. You can just grab them or can
select multiple nodes with the selection rectangle
and just move them with G. It's the same thing as
in the three D viewport. Just like in the shader editor, this window here is two dimensional and
not three dimensional. Which means you have
a coordinate system, like in every other, two D coordinate system with the x axis here and
the y axis here. So when you want to, let's
say, scale them together, that they get close
to each other, you can just scale them with S, like in the three D viewport
to scale these two nodes. So you don't change
the size of them, but the connection between them. And with S, you can just
scale them closer together, or if you want to bring
them on the same height, so let's say they are
connected like this, and you want to bring them on the same level that it
has a nice overview. Can just select them both, press a for scale, and then y for y axis. And by this, if you
can just type in zero, then you brought them
on the same height, on the same y value. Okay, furthermore, you
can rotate them with r, which is seldomly of use, but just for the completion
of the shortcuts, it's the same thing like
in the three d V part. G for grab, R for rotate and
as for scale. All right. Now we will come to the basics
for the geometry notes. So as you already know, a modifier modifies the
geometry of something. So let's take the same
example as before. I will just take
a Babel modifier and just make the offset here. So what you can see here now, this modifier is
currently active, which means you're
seeing here a preview of the geometry how it would look
if you would apply it now. When you go to the edit
mode, for example, you can still see this
orange air points and edges and faces, which is the former geometry or the current geometry of it. And the modifier, which
is the gray part here is just the preview of how it would look if you
would apply it now. So let's apply it, and then the new geometry
was applied to it. That's how modifiers work. And exactly in this way, the geometry nodes
modifier work as well. So let's look at
the modifier here. So it's the simplest
modifier you can have. It's just the connection from
the input to the output, which means nothing
happens here. This cube is still the same
cube before and after it. So yeah, if I go
to the edit mode, you can see the cube has
the same geometry here. So now let's change that. You can disconnect
these connections between nodes by just plugging them out at the end like this, Or yeah, the easier way
would be to cut them, which you can do with holding control and holding the
right mouse button. And by this, you have the
little knife tool here, and you can a make cuts here. And you can cut
these connections. And then yeah they're
gone as well. So that's the most easy
way to cut them actually. You just hold control, and then you hold
right click and just cut these connections here. So now after we cut
the connection, you can see that the
geometry has disappeared. So that's because the
new group output, so the geometry you
can see has no input. But when I go to the added mode, my cube is still here. That's because this cube
geometry is the group input, and the group output is what's left after you
modified it here. But since we have
no modification, and we just cut the
line between them, we have no output data. That's why we can't
see anything. So the output data
is just nothing. If I would apply
the modifier now, Yeah, I would have deleted
my cube, basically. I deleted the cube geometry. So now, yeah, let's do
something with it. All right. We can, like here in
this three D viewport, with the ad menu, you can
add geometry primitives. There are mesh primitives like Corus cube, monkey, and so on. And you can do the same thing in the geometry Nodes editor. You have the same ad menu. Well, it's not the same, but
the same shortcut Shift A. Then you have your
window for the nodes, and you can here select
mesh primitives. And then you have yeah primitive three D objects here two. So let's select, for
example, the cone. And yeah, nothing happened yet. That's because you have to
connect the geometry line, the geometry data path
to the geometry output. Green means geometry. This is a geometry data. This, for example,
is a Boolean data, which is either
positive or negative. This is to select
the sides here. For example, the top
size, the top area here, the top phase, which is not existent here
because it's closed. And the bottom area or
the side area here. You could select them basically. But let's just keep it simple here and use only the mesh data. And here you can see when I use this mesh
data from the cone, I created a cone here, and this is now the new
geometry of the object. And the coup thing, it's
totally yeah procedural. You can addit this live, so you can change
the vertices for the side area here
or the side segment. Maybe you can see that
here, the side segments. So how many loops
you want to have around the cone and
the radius of the top. Maybe you want to make it to a almost cylindrical object or the radius of the
bottom, and so on. So you can change the shape
of this here with this node. And now you changed
the output of it. The input is still the same. The input is still
the cube here, but in the modifier, we just ignored the input. So we have no connection
from here to there, which means the input
just got deleted, basically, and we just created a new geometry and
used that for the output. That's why we only see
the cylinder here. And that's the trick
for the geometry notes. You just use the input geometry, for example, and modify it. But that's not necessary. You can just create
a new geometry here and just work with this, and you can ignore this. You could delete this to with X, you can delete notes or
right click, delete. And then you don't
need the group input, so the cube, which was
this geometry, has no use. You can leave it or
you can delete it to. In the edit mode, then
the geometry is deleted. And then you can just go on with the new geometry you created
inside of the modifier here, of the geometry Nodes editor. And that's the whole trick for
the geometry Nodes editor. You can just manipulate
geometry and everything else. Of course, in this case, for the beginning here
in the introduction, I keep it pretty simple
with just primitives. For example, let's
select something else, UV sphere and just
disconnect this And use this instead. Now we have a UV sphere. We can change our
segment, count, and ring count, and
so on and the radius. And then we can just
use this geometry here. You're totally free, and
if you want to change it, you can at any
point cut the line. And if you want to
apply the modifier, which sometimes you
want to apply it, but Often, you don't want or
you don't have to apply it. For example, when you
want to animate it, you can't apply the modifier because then the data is lost. But in this case, let's
say I want to apply it, then in the edit mode, you can see I have no geometry, but when I just apply it
with exactly this tree here, Then I have my new
geometry here. And the thing is
about the modifiers. Let's just add another monkey. Since the geometry notes
editor is a modifier, I can use any geometry here and add the geometry notes modifier, which I just created
to turn this into the same thing because my
modifier now, currently, which is a very basic modifier, just turns everything
into this cone thing. That's because I just changed
the input data basically. So when I just create
the group input again, which is nothing currently. On this here, it's
a monkey head. So when you look at it, and I just create, let's say acrete a
sphere and a taurus, and I just put this let's do it. This Domes modifier,
every one of these, so now they have exactly
the same modifier here. Let's delete this one. And if I change
something here now, just like on the materials, you can see on this
three here that this modifier is used by three different objects
which are these here. It will change every object
when I change something here. For example, currently, I
use the original geometry, which is exactly what
you can see here. But if I change everything to a cone by replacing
the geometry here, everything will be a cone
because the geometry which they had from the start
or the former geometry, plays no role because
there is no line here. So I just override the data basically with this cone on
every object where it's on. So just keep in mind, it's a modifier, and you can work with it
like a modifier. It works the same
way, and you can, of course, create individual
modifiers or alternate this. For example, let's say, I name this here. Con maker, and yeah,
leave it like this. It turns everything into a cone, and then I create a copy of this and call it sphere maker. And now I can disconnect this
and make it to that one. And now I have a let's
look at this object here. I have a sphere maker. I have a cone maker. And now I have two
different modifiers here, one which turns
everything into a sphere, and one which turns
everything into a cone. And yeah, now you
can work with it. And that's how geometry
notes are working. Exactly like this. You
just modify geometry. And of course, this is
not an elaborate tree. But yeah, let's continue in the next videos
in this course with more complicated trees with
more complex manipulations, and then you can
learn how you can modify all your nice
geometry in a very cool way.
2. Basic Transformation of Geometry Nodes - Part 1: Welcome to the Geometry
Notes Beginners course. In this video, I will show
you the basic transformations inside of the Geometry notes editor and how to work
with your first notes. So to start, open the
Geometry notes editor. Here. And instead of creating
a modifier for your object, like we did the last time, you don't have to
do it actually. You only need to create
a new group here, it's called a new modifier with a new geometry note group. And when you do that, the
new geometry modifier will be assigned to
the object as well. So you don't have to do
the modifier itself. You can just open the
geometry notes editor, and just create a new group, and then you have it
automatically. All right. So in this video, I want to talk about the object transforms in the geodes editor
because that's basically the first topic you will encounter when you
modify the geometry. So let's just add the node here. We just press shift A to add A or to open the add menu here, and you could search for all through all of these different
options here to add. Yeah, for example, geometry, something here, or if you
know what you're looking for, you can just s here
because you have, many nodes here, and you don't have to remember where
exactly a node is. Although they are, of course, sorted here by categories. But, for example, if I know, I need the transform node, I can just hit the search
bar and type in transform, and then I got it, and
then I can add it here. That's pretty easy
and comfortable. All right, so just
click between them to automatically create a link
here between these two nodes, which is the group input, the original geometry here, and the group output, which is the result after
the modifier. So the transform node here, may be a bit familiar to you
because you saw this node, basically, many, many times here in the object properties. Because when you pay
attention to this part here, you can tell this is basically this part of
your object properties. It is the transform
information about the object. So for example, if I want to move my cube here
along the x axis, let's say I want to move
it positive on the x axis, which is this direction, I can just dial in a
positive value here, and then my cube will
move to that position. So you can do the same
thing here, like this. So it's basically
the same slider. And of course, with all
the other things here, like the y transform or
translation and so on. And the rotation like
this, and the scaling. So it's beyond one. So it's pretty much
the same thing. And in the geometry nodes tree, you can use this information to proceed with the
geometry later on. But in general,
you can just move your object without using the actual transform and
only in the geometry notes modifier or in the
geometry nodes tree. All right. There is a little thing you have to know about this transform node, which is let me show you that. Let me create a second cube here to show you the difference. So this one here is
our geo nodes cube, and this one here
is the other cube. Let's make it a bit bigger. You can see which is which. So the big one is now the normal cube
without any modifier. So when you move in
your geometry notes, editor with the transform node, you can just, for example, move it on the x axis, and then when you rotate it, you can see that the
origin moved with it. You can see that because the
rotation center is now here. So you can rotate your object, and the rotation
center moved with it. And when you scale
it, for example, let's rotate it by 45 degree. And when you scale it
then on the x axis, you can see that the scaling is in this and in
this direction. So the origin rotated too. So you basically take the origin here with the
geometry when you do that. And it's so you can imagine it like exactly when
you change it here. So for example, I move The object here,
and you can see now because here you can't see
it because it's a modifier, and of course, the origin
will stay in the center, but here you can
see it actually. So you move the origin
with the object, and then you can
rotate it like before, and then you can scale
it while it's rotated. And so the scaling axis will be, of course, the rotated axis. And yeah, that is
how you can imagine this transform node just like moving and
rotating and scaling. So yeah, transforming an
object in the object mode. That's what the node
basically does. But there is one thing about it that you
have to be aware of. For example, let's say,
I want to move my QP, then rotate it a bit, and then scale it like this. Now, when I want to rotate
it now along this axis here, it's not possible
anymore because I moved the origin with it and the
origin of this geometry, basically, the center, the origin of this
part is now here. So I can only rotate
around this one. But if you add a second
transform node here, the new transform node will
have its center back here. So the moved center, the moved origin for this geometry is basically
only for this node here. So let me show you that. As you can see, I can rotate it only around its
moved origin now. But if I just add another
transform node right behind it, which doesn't change
anything since it's on zero, zero, zero now currently. And if I change it now, so let's say I want
to translate it, I just keep adding the
translation data to it, so I can of course,
move it here and there. But when I rotate it now, you can see, now it's
rotating around the center. So the second transform
node basically resets the origin back to
the center where it was. Yeah, and it's not
the world origin, it's just the object origin. So of course, I can move it on here and then
this is the center. Don't be confused. I just, keep it in the center because
it's there by default, but it's the object origin where it's going to
be all the time. Same counts, of
course, for scaling. So when I scale it
now, not on this axis. So here, for example,
you can see that I'm scaling it now
around the origin. So just keep in mind
that the transform here basically
changes the origin only for this transform node. If you add another
transform node, it will reset the origin, and then you can work with it. And for example, if you
want to do it like this, So let's say you want
to move it on here, rotate it like
this and scale it, and then you want to
let's say you want to animate the rotating
movement he around this. Then you can just add a
second transform node and then you can rotate
here with this slider. And then this motion would
be possible by this. Just want to know that you
heard of it and you saw it, so it's basically moving
the origin for this node. And then when you
add the second one, it will jump back on here, and then you can
proceed with it. So just that you
saw it once, right. So let's proceed
with the cube here. Another very, very
often used node, which is one of the
most important nodes is the join geometry node, which joins two
geometries together. So it's a bit like
the join tool, which you know that you can join two different objects
into one new object, or you basically add one geometry data into
the other object. But here, you can join multiple
geometry strings here. Yeah. So let's say, for example, let me just cut that and add a cube that you can already
see what I'm doing. So let's say I have a
cup here with the size, and then I want to add
another mesh primitive. So I want here on
mesh primitives, and let's say I want
to add a cone here. And when I add the cone, you can see that
you can't see it. So it's just not there. And the reason is, of course, it's because it doesn't or it isn't connected
here to the output, and you only see the output. And so this data now is just disconnected from everything
and doesn't exist. It only exists in this tree and it is not
connected to anything. And if I now connect
this here, then my Cube is gone. And if I want to see both strings
at the same time, I have to join them with
exactly the join geometry node. So before I do that,
let me just move my one cube here a way that we can see
both at the same time. Let's say I want
to move it here. And now I want to join them. So I go back in my editor. Shift A for the menu, and then you could search
for it where it actually is, or in my case, I
know where it is. It's here in geometry. But for the comfortable usage, I can just type and join, and then you can join
strings or geometry. In this case, I want to join geometry and just
connect it here. And here you can see it has
an input and an output. And the input is, yeah, not really a circle. Yeah. And that's because this is an indicator that you can plug multiple
geometries in here. This is a plug for
single string here. So you can only connect one
single geometry stream. So I can do this or this. Yeah, single use. But for these more
capsule shaped inputs indicates that you can connect multiple geometries
here. So let's do that. I just connected here. And now you can see that my cone appeared here
in my three D viewport. And that's, of course, now possible because I join this string together and
this string together, and here they form a yeah
common geometry here or a connected geometry so that you can now modify
them at the same time. And of course, you can see
them at the same time, too, because now they
both are plugged into the group output over
this join geometry note. And now with this here, with this transform note, I can still move my cube around because you have to
read these trees. Yeah, so it's called
a tree because it has branches, here,
these connections. You read it, I would
say left to right, in this case, yeah,
because here's the output. So you read it from
input to output, so you read it like this. And because of
that, you can just tell my cube is
getting transformed, then joined, and
then in the output. And because of that, you can now choose where
you want to place, let's say another
transform node. For example, if you
want to move the co, so let's say you want
to move the coin a bit down to the same
level here of the cube, Then you can just add another transform
node after the cone, but before the join geometry, because here they're
already joined, and you will transform them
both at the same time. But in this case, I want to
have my cone here generated, and then transformed
on the z axis here. It is exactly minus one unit, and now they are at
the exact same height. And now they are
joined after that, and then the output
here is created. And for example, if you want
to move them together now, then you can create
another transform node. And then you can rotate them
here around the origin. Of course, the origin
is now in the center, and the cone is
exactly at the origin. That's why it's not
moving but only rotating. But this is how it's working. So you have your cube and
your transform for the cube. Then you have your cone and the transform
for the con here. And then you join these
two geometries together, and then you can create
another transform node, for example, here in this case, to transform them both
at the same time. This is how you can
build your geometry nodes tree with
operations like this. This is, of course,
again, a very simple one, but it's enough to explain
it that you can combine different geometries together to form a mutual shape or
something like this. So, for example, I want
to add something else. Let's say I want
to use a sphere, an cosphere, like this, that I can just connect them. Here. And it's then, of course, in the center, which is
moved here at the top, so it's this here, and then another transform node here to move the cosphere. Now you can see what I'm doing creating cosphere,
transforming it, join them together,
and then in the end, of course, they are again
transformed together. And maybe this can be a bit. I can delete this. Maybe
this can be a bit. Much when you have
complicated trees. And because of that, you can, for example, frame them. By framing, you
just create a frame around it and create something like a
visual group for it, and you can name it too. You can do this by just creating
a frame node like this, then selecting all of these, and then press
Control P for parent, and then they snap together, and then you can right click
rename or press F two, the shortcut, and then
you can name this cube. Group or whatever. And then you can
see what this is. The faster way
would be to select them and press
Control J for join. And then you can do
exactly the same thing. So I press F two. This
is the con group, and then here, Control J, F two, CO sphere group. And then you can have
your groups here, and then you can
move it as a group. And you can keep
the connections. And it's, maybe
easier for you to see what you're doing
with your geometry here. Yeah. And then you can
organize your tree in a nice way that you keep the overview and keep
it tidy and everything. And yeah, that's how
you can organize your tree as a very
simple approach. You can try it out, create
simple y mesh primitives, combine them, join them. And then you can
modify it a bit and play a bit around with it that
you get familiar with it. Don't forget, if you
want to cut something, control, right click,
to cut a connection. For example, if you
want to look at one single node tier or single output,
you can at any time, just connect it to
the output to preview only exactly this t because everything else is
then disconnected, and you can only see
this selection of yours. And this is how you can preview things before or
after certain nodes, for example. That's
how you can do this.
3. Basic Transformation of Geometry Nodes - Part 2: Welcome to the Geometry
Notes beginners course. In this video, I will continue with the transform
note and show you how to modify the values in the Geometry notes editor
in a procedural manner. Well, you already know
the transform node since we handled with it
a bit in the last video. And here I will continue
to use it to show you how to modify different values
at the same time. All right. So at first, let's select the object and open
a new window here, which we're going to change
to the geometry notes editor, and then create a new group. And then we already created a Geometry notes modifier with this group selected
to save some time. All right now, we want to add a transform note as we
did it before as well. So just search for
it, transform here, and then just put it in between
the input and the output, and by this, you're
going to modify the geometry data
with this note and the output will look
different than the input. Currently, our input
is this cube here. But yeah, we can leave
it like this or you could delete the input
and just create a cube. Geometry node here and connected to the transform
node, and by this, you now have a more
procedural and dynamic cube, which you can change
all the time without effort in the geometry
notes editor itself. All right. So you can see that my cube here
is in the center, of course, because it's
scaled from the origin here, and my origin is in the center. And when I want to
let's say I want to scale this cube
upwards, like a graph, like something like this, Then I have to move it upward somehow and
scale it upwards. The problem is with
the geometry nodes, with the transform node here, when I scale it on the z axis, you can see that it scales on
both directions, of course. Because the scaling center
is the origin here, and then it's scaled
in both directions. And this is with
every axis here. It's going to be scaled in every direction if you just
slide this up and down. If you want to change this, so let's say you want to scale this only in this direction, only upwards, then you
have to do something, which is at a second
transform node. Here. Because maybe you
remember from the last video, the first transform here only affects the
geometry basically. Because if it leaves
this transform note, the origin will be set
back to where it was. And because of this, we can now move this e here on the z axis by
exactly one unit, then it sits exactly
on the floor here. And now when you scale
it on the z axis, you can see that the geometry
is moving only upwards. And why is that so? This is because the center, the origin is here, and
the geometry is here. When we now move
this by one unit, and it leaves this node, Then my origin is still here, but my geometry is now here, and I scale it with the
origin as the center. But the origin is now at
the border of the geometry, and this means that the scaling towards the center or away from the center now is only one directional
because my geometry is exactly at the origin
here with one edge. If we would increase it a bit more like this
and scale it now, it will increase the gap here. So you just basically, you just take this part here, and just scale it up. So then it's like
this, for example. But the gap here got scaled too, so the gap will be like
this, for example. Then it's going to be like that. But if you don't have a
gap in the first place by just scaling it
perfectly at one unit, that you don't have a gap, and you can scale the cube infinitely just
in one direction. That's how you can
handle such a problem or such an approach. All right. Now you have two
transform nodes, which is this one for the movement and this
one for the scaling. And if you want to
now, yeah, let's say, Modify these values
at the same time. Then you have to build
something here in front and connect it to this part and
this part at the same time. And when you change
something here, it will change this and
this at the same time. This is how you can
build these things. You just connect a kind
of value to these plugs, and then they're going to influence them at the
same time. All right. Speaking of the plugs, you can see the color
here is different. For example, this is a green
plug, which is geometry. You can read this here, and the blue plug is a vector. And a vector, you can generally identify as a three value plug. So a vector is basically something which has
three values in general. So, of course, in this case, these three values represent
the three axis here. So this is the x axis.
This is this one. This is the y axis, this is this one, and the
z axis, which is this one. But, for example, you could interpret a color as
a vector as well, because you have
yeah three colors, basically, which you just mix, which is r for red. G for green and B for blue. So when I just add a color here, a color note and I click
on this color button here, then I can select something. I can select the
color I want to have. And for example, on the RGB, method here, I have the
R value, the G value, and the B value, which
are three values, so you could read them
as a vector as well. If I would change the color type here to hue saturation value,
I have a vector as well, which is red as is
the first value, which would be the x, the
saturation would be the y, and the value would be the z. So it's basically just a value. A vector is basically just a
combination of three values. So let's delete this. And yeah, because you have here three different values,
this is a vector. And if you want to change now, a single part here, because the problem is you have only one plug for
three values here, because this is the vector plug, it has already three values. But if you want to change
every value individually, you have to do something
because I mean, we could just make it very simple and just
use a value node, which is just a slider
with an output here. And we could just plug
this into the translation. And when I increase this now, this moves very strangely
in a direction, and it is direction upwards.
Let's put this to one. So it moves
diagonally somewhere, which is exactly the x
direction, the y direction, and the z direction
at the same time, because this value here now is basically the value for every single vector value here, which means increasing this to, let's say three, is the same as increasing every
single value to three. That's why it's
moving upwards here. So it's moving on the x, y, and z x at the same time, and by this, it moves
this diagonal way here. So if I'm just picking all of these You sliders at the
same time and move it. It's exactly the same motion. So this is why it's
moving this way. So to fix this problem now, we have to split this up into a vector or better to say to
combine it into a vector. And we're going to use this
by combine X Y Z node. This node here combines
three values into a vector, which we can then use here. And this combined X Y Z
has three single inputs. So it's basically a
translator or something. So you could translate three
values into one vector. So and here now. So basically, this is
exactly the same as this. This here is the
same as this here with the difference
that you have here, three single inputs. So I'm just going
to connect it here, and now I can move it
to here on the x axis, y xs z axis. It's
the same thing. But now I can connect this
value node to the x input. And now I can use this here as the value for
the x direction, which is then the
translation here. And to make this what it's about here on this video to modify
multiple values at once. Let me just move this here to the different transform note because we want to do it here. Because here I want to have my upward motion 0.5, that it's Perfectly at the ground. Now it's one, so like this. And now you have
something like this. And now you can, for example, just copy this. And here, I want to use this for the z value and use
this for the scale. And what we have now here, I have to put this on one
and one because scale on zero means gone,
basically, disappeared. Scale of zero means delete
this axis visually. So now I have created something, which you can see here
when I slide the slider. So you can see now that I'm changing here two
values at the same time. And the nice thing about these note trees is you can
always see what's happening. So I have a value here. Let's say I put it on two. And this value is, it goes into a combined x
y z node as the x value, which is then the translation. So the movement. So this is now the x
movement of this KO per. And at the same time, this value note is the z value of this vector,
which is the scale. So basically, this value
here is the x movement. And the Z scale, which is upwards because the origin is here
at the bottom. And by this, I move it
to the right and to the left at the same
time as I'm scaling it positively or
negatively because then it's a negative
value on the z axis. And now you created
something which has now a dynamic
animation, basically, if you slide this,
you can animate it, and then you have something like a graph animation
or something. And this is just an example by creating a simple tree like
this with a transform node, you can modify the values of different properties
of an object. For example,
translation and scale. Of course, for example, I could just copy
that too and then take the y and put this
into the rotation. So now when I scale it, I have created here, a y rotation as well. Yeah, which looks pretty funny. So you have a
rotating graph now, which is the y rotation as well now as it's the z scale
and the x movement. Yeah, and by this, or
you could at any time, just change the plug here, and now it's rotating
like this, and so on, so by changing the plug, you can just create multiple value changes at
once with just one slider. And this is the concept of proceduralism to control
complex setups with many different information with small controllable
pieces that we as humans can control them very easy and
comfortable and nice, and yeah, control complex
patterns or whatever. So, this is what
proceduralism, basically is, I have now one slider to
play this relatively simple, but let's say it's a
complex animation, and I have just one slider
for it, and that's it. And now I can go on with it. So that's how you can do things
like this and build trees with small inputs like one value slider and many outputs like
three different motions. That's all for this video. Thank you and see
you at the next one.
4. Vectors and Calculations: Welcome to the Geometry
notes Beginners course. In this video, I will show you how to work with vectors and how to calculate with notes and values in the Geometry
notes editor. So at first, let's open
the editor itself by opening a new window here and selecting the Geometry
notes editor. Then you can click on new
to create your note group, and yeah, then we are
good to go. All right. So now we currently
have the input output, so we haven't done yet, but now we are going to. So since this video is about calculating, let's
calculate something. Because in the
geometry notes editor, it's basically all about math and calculating values
with each other. So let's yeah, do
this by, for example, calculate the z
position of this, y, which is the height of it, the z location of this cube. And we will do this by adding a, let's say, transform node,
place it in between, and as you did it already, you can now just slide in the value which
you want to have here. All right. To now going
into calculating, we will add a
combine x y z node, which you already know
two and connect this here that we have now this
isolated three axis values. And now we want to
let's calculate the z value here with
two value nodes. One and two, and a math note. This is now new for
you with a math note, you can calculate numbers. You can open this menu and have a lot of mathematical
operations here to select. The most prominent
ones, of course, add, subtract,
multiply, and divide. There is another version of it, which is the vector math. It is ops. It is the
same node basically, but it's a bit different because it
has two vector inputs, and you can calculate two
vectors with each other. And you have a couple of
different operations here. For example, a distance
is only possible between two vectors because a value has no position where we can calculate
the distance, but with a vector, you have a position, and then you can
calculate distances. But yeah, we will
use this later. For now, this will
be sufficient, the normal math node, and let's just add these
two values together. And the result of the adding
here will be the z value. And now we can, for example, increase this one here or
this one or decrease this, and now we're just
adding these two. So if you have a negative
number and add it, it will of course be subtracted. And for example, you can
have here one and one, and then it will be moved one. And two then, so it will be one plus one, yeah, basic stuff. But of course, you can have different
calculations, for example, a multiply, if you have here
a zero on one of the values. It doesn't matter what
you put in here because everything multiplied
by zero is zero. And so you can, for example, have here a pretty small
number, for example, 0.001. And now this number here, can be very high and it
moves only a little. And for example, here, you could move it a
very tiny portion. You can see I slide
and slide and slide, and it almost doesn't move. And that's, of
course, because here, I have a small value, which is then multiplied
by this big value. And then you can
have your z value be very sensitively moved,
by this, for example. So that's how you can just calculate numbers
with this mouth node, which is used very,
very often. All right. Then let's continue
because we're going to make something
which you can look at, which will be a
different object. Let's delete this
one or the geometry, I delete just the geometry, and I want to create an cosphere geometry
in the same object. So I just have now an
cosphere geometry here. And what's important
for you to know is that every point
of this cosphere, and not only of this cosphere, of every object has a number, which is called the index. And you can see it if you
enable it in the edit mode, overlays here,
indices, you have to enable the developer
information, which is just in
the preferences. But here you can check that, and when you select something
or just select everything, you can see the
indices of the object. So every single index
at the point position. And here you can see that it starts with zero
here. So the indices Start with zero. So for example, a cube which has eight corners, eight points, would have
the indices 01234567. These are eight points
for eight corners, starting with the number zero. On this cosphere, you have 42. If I'm not wrong,
you can check that with the statistics, vertices, 42 here, starting with
zero and ending with 41. And every one of these
points here has, of course, its own normal
vector, for example. The normal vector looks
away from the faces, as you know, but the points
have normal vectors as well, which look away from the average vectors from
the adjacent faces, so this vector will look
like in this direction, for example, and you
can look at them here. These are the phase normals. These are the phase
corner normals, and these are the point
normals. Increase this. So now you can see
the point normals are looking in these directions, and we could now just move every point to its point normal. The point normals
or every normals have one unit distance,
one unit length, and then you could just move every point along its
point normal by one unit. So this would be moving in this direction and this
and this and so on. So they all would move along their normal. Yeah,
let's do that. So you can do this with another
node, you will learn now, which is very important,
the set position node. A position is always
a point position. So don't be confused. Location means object location. So it's a single value, and a position is a multi value for multiple
points because in this value, you calculate every
point position at once. And that's why the plugs
here have different shapes. For example, these one
look like a diamond. But the transform
input is a circle. So circle means,
that's only one value, and a diamond means
it's multiple values. So in this case, it's 42 values you're calculating
at the same time, and a diamond with a
little.in it like here means they are potentially
multiple values, but currently only uses one. That's the diamond
with the point in it. But yeah, that's very different, and you can't plug one
thing into another. For example, if I take the
object info node for this per, which contains just information, for example, the location,
rotation, scale. And I can I could
plug it in here, this one, because I have here a single output and here
a single input as well. That's why it's working here. And here, if I try to
connect it to here, it works as well because it's possible to have only one input, which you can see with the stot. But the position, for example, has only multiple values. And when I try to
connect it in here, it turns to that diamond thing. Yeah, you see that. It turns to the diamond with the point, which means it's only using
now this one value here. But, for example, let's put
something different here. There is a position node, which is basically just the
position of every point here. And yeah, for example, here, you have the position. That's just because by
default, it's like this. It's just not showing it. But if you have no
position not connected, it still is secretly. But that's why it's
named like this. And if I try to connect no a multiple value
into a single value, the line becomes red and
it's just not possible. Because you have
here many values, and here is only a single value, and they are not compatible
with each other. All right, so now
let's continue. We don't need this, we
don't need this. All right. So now let's use
the normal vector, which is just the normal node. This normal node contains the normals of these
points, for example. And yeah, the offset would
be what exactly we need. So we have the position, so let's put this again here. So the position is
just the position, for example, This one, this is the position vector, and now the normal vector
would be this one. And then my point, which was here is then here. That's connected. Boom. Okay, I was a bit short, but in general, it's like this. My point now is here. And yeah, it's a bit a
large, but it's all right. And you can mute a node with M, so you can see the difference. So what we did here is
basically just the blow it up. So it just got bigger, which makes sense
because the normals are facing straight away
from the points. And when I move these
points along the normals, of course, it just
getting bigger, when I do it uniformly
with everything. But let's do something
different here, Let's multiply the index
number with the normal length. And by this, we have different
lengths now, for example. Let me just mute this
one, that you can see it. All right. For example, This
one here would be a ten. So it would be multiplied
by ten, the normal vector. So let's say this is
the normal vector, and then this would
be multiplied by ten, then it's this long. And this would be
multiplied by 38. So it's very, very, very long. And for example,
a smaller value, which would be like
the five here, be multiplied by the
value five, and so on. By this, we have a
different length for every point normal
where we move them. And yeah, then we have a non uniform movement of the
points. So let's do that. That's not very hard. You only need to let's
put this ebit down here. You only need to do a
another calculation, where we need the index. Yeah. This index note contains the data of
the indices here. And the color is green
because it's an integer. Yeah, because nedcimal
or something. A integer is a whole
number like zero, one, two, three or thousand
three or something. Whole numbers. And of course, the indices as you saw
are all whole numbers. That's why it's a green output. This just means it's no Decimal, it's just an integer number. So to do that, let's use a vector math node because we want to calculate
this vector here. So and just use a
multiply operation and then multiply the index of
each point with its normal. And this is then the new offset. Of course, this is now very, very large, and
that's why I want to, yeah make it a bit smaller
with another vector math, or we don't actually you
could just make it like this. Multiply it with a smaller
value here like this. Or by the way, if you
want to delete a node, you can delete it with x, and then the connection
will be lost, or you could delete
it with control x, then the connection
will remain here. So I deleted it. And for example, you could
do a vector math here, or because we have this
integer numbers here, We could use a normal
math node here. Of course, instead, it would
be the same thing with a small amount or we use a
divide with a large amount. Let's say I want to
divide it by ten. So the index numbers
here, for example, 123 4567 are now divided by ten. So 0.1, 0.2, 0.3, and these little
numbers, let's say 0.3, is then multiplied with the normal vector,
which is always one. So I would have a 0.3 unit. And then this would
be the offset on the normal off the points. So let's look at it like this. So for example, let's
take this one here. I think this is ten. So
this would be a ten. And then the index
would be a 10/10, which would be a one, and one multiplied by
one would be one. And this would be then
a one unit scale here. For example, for this point, or it's not a scale, it's a repositioning, so
you're moving the point. And yeah, this point moves here and this point
moves here and so on, so you can actually
see where it's moving. And yeah, now you have
this non uniform thing. Maybe let's increase this to 15. It's a bit smaller or 20. So now you have this
non uniform yeah, cosphere, or former cosphere, where you can see pretty well which yeah index number
it once had because things which are far away like
this or this or this have high index numbers because they're getting scales
pretty far away, and things like this, which
is on the inside here. And here, these have pretty small index
numbers because they're not getting
moved that far. And to make this a
bit more visible. I can show you something, which you don't have to
yeah recreate or something. It's just for you to have
it visually there for you. I can make the index
visible basically. For that, I have to go to the material viewport,
a material view, and then just put the
index in the output, and I want to make a map
range in between to remap it. As I said, it's not important
for you to understand. I'm just doing it
for you to see Now, I'm mapping the indices
0-42 to zero to one, and then change the
output to a color here, and then name this. Index, R, go to the Shader. Use this attribute index R as the color. And
now you can see it. So now the dark spots
are very low numbers, which means they were
very low indices, like, for example, zero, one, two, 345, and so on. And now you can see that the dark areas are
all caves here. And all the white spots
are on the far side here, which are far away
on the outside. This is how you can for example, form something like this, just using a bit of math there. It was pretty simple what
we did here actually. We just took the
indices of the points, just the numbers of them. Yeah, this is 0.0, this
is 0.1, this is 0.2, and then just calculated it, divided the number a bit, by 20, that it's not that big, and then just multiplied it with the normal vector and
used this new vector, which looks then like this, for example, just used this to move this point here to this new position with
this set position note. That's all, a bit of math. And then you can create this, I don't know what
this is, but yeah, it looks a bit weird. And you used just math and
a bit of geometry nodes. And I hope you now understand a bit how it works with
the geometry nodes to calculate values and vectors with each other to
create shapes like here, for example, and the cool
thing about this, of course, is you can just dynamically
change every value here. This is a live node tree. You can at all time put
another node in there and then change everything.
That's not a problem. For example, a very
other prominent note is the random value node, which just randomizes
the values. And for example, if
we put it in here, random value, and then use another math note
to just, let's say, multiply a random
value between 0.8 and two with these values here, and then use this instead. You are randomizing
the distances, of course, because
you are randomizing the numbers from the indices. And you can change it here, and you can of course
change the seat, which is just the random
distribution, basically. And with this lighter now, you can just create a shape you like,
and then you got it. You just choose your
randomized pattern you want to have for your shape
here, for your object. And then you can use that. That's an example how to use this mathematic operations in geometry notes to create
shapes like this. I mean, it's a
pretty simple shape. And now you can experiment
a bit or a lot, basically. Geometry notes is, of course,
about experimenting too, what you can make
up in your mind and how you want to move
the vectors and so on. And then you can create
shapes like these, which are dynamically
changeable. That's all for this video. Thank you and see
you at the next one.
5. Curves: Welcome to the Geometry
notes beginners course. In this video, I will talk about curves in combination
with geometry notes. So let's start with a curve. You can add it with shift A, and then select curve. And just for the presentation,
I will use a path, which is a nerves curve where you have just the
points without any handles. It's just a bit easier to use. All right, so now you can
in the edit mode drag around these points here, and your curve will
follow its form here. Your curve has a resolution, which you can set in
your curve tab here, where you have a lot of different controls
for your curve. And here you have
the resolution. If I decrease it, you
can see it is very g. And when I increase this value, you can see that it gets more
and more points in between. And yeah, until
it's pretty smooth. So this is the
resolution of the curve, and you have different
other things here, which are not that important
now because we have to concentrate on the geometry
notes aspect of a curve. All right. So let's start with opening the
geometry notes editor. And creating a new
group here that we can work with the
geometry nodes tree itself, let's just make this ab
smaller and this a bit larger, right, so let's continue. You can use curves just like any other three D object
with the geometry nodes. You have to take care that you're working
with a curve here, which is a different data type. So for example, if I just
create a mesh object like a Q, I have a mesh output here. So this will be mesh data
when it comes out of here. If I'm creating a curve, or you can just find
every curve node here under the curve category. And under curve primitives, you can even create a curve inside of the geometry
nodes editor. So for example, let's
create an arc and exchange the type
here, the output. And then you can see you
have created something like this like a circle or something,
which you can adjust. So this is a curve two, and you can already
see that you have here a mesh output and
here a curve output, which is a bit different. Yeah, just because it's a
different type of object, just like in the
normal added mode, when I change something here, so let's say I add a cube, and then I add another curve. When I go to the edit
mode, the mesh object, I can move around the points
of the smash, for example. And when I go into the edit
mode of the curve object, I can move around the
control points of it. So in general, they are just
different types of objects. And that's why in the
mogen nodes editor here, you have to process
them a bit differently. Okay, but for now, let's continue with our
own curve here. So let's Go back to
here. All right. So now we have
this curve object. And what is really nice
about curve objects, and often is very
cool to look at is when you instance
something on these curves. So then you would have
objects along this curve, and when you move the curve, the objects will a
follow then here. So that's often used. And a, one of the main things to do with a curve is
instancing things on it. In order to do that, we
have to use some notes. So let's just start
with the instance. On points just like before
with the mesh object. And then we need
something to instance. So let's say I want
to instance a cube, just the basic thing, and then let me reduce
the size of it. And you may see now that
something is different. Because when Imute
now the nodes, you can see that the points or the cubes in this case
aren't on the path. So the path is here, and the Cubes
aren't on the path. That's because when I
go to the edit mode, you will see where
the cubes are, the cubes are on the
control points like this, and they're not on
the path itself. And this is because the
scroup output here, as say the group
input is basically the point positions
here for this curve. So it's the control
point positions for now. If you want to have something
actually on the path, you have to put something
in between here, which is a curve Two points node. And
when you do that, you convert this curve
data to point data. So you're changing
the data type, and then you have points
on the curve here. And on these points, you can now then
spawn these cubes. So now you have what
you looked out for. When I just mute this, you
can see now the cubes are actually on the path itself or the curve
itself. All right. And yeah, you have
something very convenient here
because you already have the rotation output here when you have
to do with curves. And this is basically the rotation of the
instances along the tangent. So, for example, the
tangent here is, let me just mute this. The tangent here is this
line or this vector, looking just along
the path here. So the tangent would be here, so it's only touching
it in one position. So the tangent is basically
the rotation along the path. And it's very convenient to have this rotation data already here in this node because
you can just plug, for example, the rotation in the instance rotation
here of the cubes. And then when I increase
the ear point count here, you can see that the cubes are already pretty nicely rotating or get rotated along the rotation of the
path tangent here. Yeah. So you can
extrude, for example, the path to create
a shape, like this, and then you have your
cubes scattered on it, and then you can adjust
the count and so on. So this is how you can
do something like this. Yeah. Pretty nice,
and very easy. You can see, it's just
a couple of notes, only curve to points, and then instance something and just take the rotation here of the path on dispositions to the
instance points rotation, and then you pretty much have something like
a snake here already. And because it's so easy, let's just build
something with it. So at first, I want to exchange
the instance object here, because a cube is a bit
too uniform and simple. I want to create a chain, so I want to have a
chain link there. You could create this
in geometry notes here, or you could just model it since we're not
going to change it in the animation or on the model itself,
it doesn't matter. And you can do it pretty fast, so let's just add a cube
that I want to delete. These walls here, then
make this a bit smaller, like that, for example. And then I will just
add this solidify modifier to increase the
wall thickness like this, and then maybe a babble
a bit Babble modifier. Like this, for example, and then just apply them
from top to bottom. You can quickly apply
modifier modifiers with control A while
selecting them. And while hovering over them, and you can quickly
apply modifier. So now we have this chain link. Maybe I want to make it
a bit more like this. Yeah. So this is
fine, in my opinion. So like that, and
let me just scale it down a bit like this,
so this is fine. It's a pretty thick chain link, but it's all right
for this purpose. So now we got our link. Let me just rename
this here quickly. Now let's put this
into the tree, so let's delete the cube. Exchange it with the
chain link geometry and just use this instead. And now you have this. I mean, it's a bit large, then that's why it's
overlapping here, so let's decrease the size. You basically have
these chain links here like this one
after another. And now it's already
looking pretty fine here, so we have this number
of chain links, and they are almost
rotated correctly. So yeah the main rotation here, which is the direction
of the curve is correct. What's missing now only is
that every other chain link, so every second
chain link should be rotated by 90 degree that
they fit into each other. We will do this in a second, but for now, it's looking okay. So we can move this, or let me just shorten
this a bit, delete these. So now we can move
this around and could create a nicely snail
chain here like this. So before we go to the rotation, I want to fix the count here because you can
see the count is 36. And when I decrease or
increase the length, you can see that it's stretching or getting
compressed and so on. So I want to have the amount of points calculated
automatically, and I will just do this with some information
about the length. So let me just search
for the curve length, like this, then I will just
plug my curve in here, and then it will give me the
length of the curve here. And then my chain
looks like this. And the only thing I
have to do now is to adjust the length here in
this area with a math node, because then it will fit
every length because yeah, it's just then calculated here, when I change my length, it will adjust the
count tire properly. So let's add a math node with a multiply operation and just multiply it until it
fits here inside. So let's say this is fine. And now when I change
the length here, you can see that
it's always fitting. It's changing a little bit
maybe, but not really. So you can't see it. So now my length
is always right. Maybe let's increase it even
a little bit, like this. So now my length is all right, and we can continue
now with the rotation. After that, we are pretty
much done because now we have the alignment to the curve
and the amount of the points. And what's missing now is
only the rotation basically. So to do that, we have to
calculate a little bit, but it's not that hard. Because we can solve this problem with one
mathematic operation. So here you can see. Let me just disable this
one chain link here. So let's see. So you can see so. Every instance here
is, of course, has an index starting
with a zero, zero, one, two, three, four, five, and so on. And when you have
these numbers here, You can already tell
that you basically need every other number to
be selected for something. For example, for a rotation
node. That's how you do this. So they have numbers here from zero to whatever
value comes in here, from the length calculated. So let's at first
add a rotation. Yeah, an instance rotation, ops. Sorry, rotate instances. This one. And now you can
rotate these instances. So let's say along the z axis, and then you can rotate the instances along
the curve basically, because it's along
their local Z axis. All right. So now, this
would be fine if we do this for every
other chain link by 90 degree like this. Yeah, so zero would be that. At 90 degree would be this, which would be then
exactly fitting in there. All right. And how to do this. Here is a selection plug, and here we can select certain instances to be affected by this
rotation instances node. So let me show you that, for example, we need the
index here of the instances, and then let's use a
compare on integer, where we can compare values. So let's say we use the
index here, and we say, please only rotate the instances with an index greater than zero. So these are all the instances because they're all above zero, except for this
one, which is zero. But if I increase
now this value, you can see that here zero, one, two, three, four,
five, and so on. When they get selected by this, so their index is
greater than one, then they get selected here, and then they start to rotate. And now we only need to select here with some
mathematical operation. Every second instance, and
then we're finished here. And we can do this with
a modulo operation. So let's put this back on zero, with a modular operation, you can select certain
remainder of a division. This is often used, for example, in video games, when you
collect something, for example, Super Mario, you
collect 100 coins, and then you get one
up, so one life. This works like this. For example, when you
have ten divided by, let's say five, is two. So the result of the
division would be two, but the result of a modulo operation would be zero because there
is no remainder. So, let's make this differently. Let's say 5/2 is it's
not a whole number. So you have a remainder here. In this case, that would be two, and then with the
remainder of one. So the remainder would be one. And this would be
the modulo result. So the modular result is always the remainder
of a division. And we can use this
here very nice because, as you know, the indices
here are numbered. From zero on, one, 23, four, five, 67, and so on. And when we divide
every index by two, and then With a
modular operation, get the result of that. So with the remainder, so you get the remainder
of that division. The result of the division
itself is not relevant. It could be two,
three, five, ten, 20. It doesn't matter. What matters is only the remainder of it. And it will be every
second chain link. So, for example, let's say
this is chain link eight. This chain link eight, nine, ten, 11, and we divide every
single one of these by two. The remainder here
would be zero. The remainder here would be one. The remainder here
would be zero. The remainder here would be one. So you see that and
when we have 12, divided by two, the
remainder would be zero. And 13/2, the remainder
would be one. So what's left is
important here, and it's just an
alternating pattern here, zero, one, 01, 01. And this is our selection, because in this selection here, in this pink connection, one means positive and
zero means negative. For example, Yeah, basically, everything positive
means positive, so two or three
positive as well. But let's say it's zero and one. And then you can have this rotation on
every instance here, which is there where a
one is here at the end. So every second one. So let's just make this. It's just another math node in between here with a modulo. And we want to do modulo two. And now you can see, we can put this on
equal, for example. So now we have to look,
we take the index, make a modulo two, which means divide
every index by two, and then look at the
remainder of that. And then we check if this
result is zero or is not zero. And when it's zero, I want to rotate
it by 90 degree. So now you can see the result already
here on the left side, every second chain link, is now rotated by
90 degree because every second chain link has a remainder of zero when you
divide its index by two. That's what we did here. Index, divide by two, and look at the remainder. And if that's zero, select it with this
rotate instances, and this is the whole
magic behind it. So it's a bit
mathematic as you saw. But now you can have
this chain here where we already made the length of
it automatically adjusting. So now you can just
move it and you can see the last index here is always alternating
now, so you can see that. So now you created a chain link, or a chain out of
chain links with automatic length adjustment for the count and automatically, yeah, adjusting the
rotation basically of every other chain link to have this look like a chain at all. And now you can see
here our chain, which is on a curve. And this is yeah, how to use, for example, a curve as
a chain with instances, which is pretty nice,
and as I already said, often used there because
of exactly this behavior. Now you can at any time, adjust this for your model or whatever, you
can wrap it around. I don't know your
character or whatever. Yeah. So let's say
from the top here, you can just wrap it
around something. And then, for example, move this with the
proportional editing, with connected only
upwards like this, and then you could wrap it
around something like that. So that's very handy
and very easy to use, and that's why it's
used so often. That's all for this video. Thank you and see
you at the next one.
6. Instances: Welcome to the Geometry
notes beginners course. In this video, I will talk
about instances which are cloned objects on a certain area or on certain points
in the three D space. So without further ado, let's open the
Geometry notes editor, and then let's add something with a bit of
geometry, for example, in cosphere here, and then click on New to create the new
Geometry notes Tree. But at first, let me show you what instances are and how to work with it in
blender in general, because it's not limited to
the geometry notes editor, you can use instances
without it, so just with the instances tool in blender or the function. To do that, you need at first a base object or geometry
like this cosphere here, and then you need an instance, which you can then copy
on certain points. So to do that, let me just add something,
for example, a Q. And make it pretty small in
the edit mode like this. And now we're going to instance this cube on every
vertex of this cosphere, which are these points here. And then you can see a little cube on every
one of these points. And to do that, you go to the object properties
of the cosphere. And then you enable the
instancing here on vertices, which means, yeah, clone
something on my vertices. And yeah, now you can't
see anything because this instancing is limited to
the children of the object. Children is basically
an object which is bound to the parent
object in some way. For example, copying its
location change or whatever. Let me just disable
this for a second. If I want to parent this as
a child to this as a parent, I just select both with the
parent for the active object, then a hit Control P for parent, and then just select
sat parent to object. And now you see a
dotted line here. This is now the child, and this is now the parent, and you can see the child
is following the parent. Like in the supermarket. And now, what you
can do with this since it's parented
to the cosphere. You can just tell the cosphere, please instance my
children on my vertices. And now you can see
what's happening then. The child becomes the parent, but with a cube on every vertex. Yeah. And this is
basically instancing. You copy this cube on
the points for this. And you could theoretically, just do this again with another
object like a cylinder, make it even smaller, like this. And then you select this
as the parent, control P, set object to parent, and now
you select here this two, and now you created that. But, we did a little mistake. We set the sphere here
because you can see that. The selected cubes here, this is the child. So this is then the
parent object to. So you have to select the
child here as the parent. And when you do that,
you That's just enable the instancing here
on this child object. And now what you
have done now is you created a cube on
every point here. And then you created a
cylinder on every point here, and because every per
has eight points. So you created eight
cylinders for each peer. And you could, for example, change the scale here
of this child cube and you can see the points
moving here like this. So this is basically instancing,
which is just, yeah. Let's say copying objects
on certain positions. But so much for the theory. Let me just delete
that one and that one. And now let's do this on the geometry notes level or
in the Geometry notes editor. This is actually pretty easy because you
can buy some notes, just define the vertices
of this object as points, and then just select an
instance for these points. And you do this with
the following notes. You need a mesh two
points note, for example, that would be, as
you can see here, these little diamond objects
are not real objects. They just display that here
is a point, basically. So When I mute this note, you can see that the points, for example, this one,
this one, this one, or this one, just become points
then the former vertices. So you can just turn this into
a little air point cloud. This is a point cloud
now with some points. And now with another node, which is instances on points
or instance on points, you can now put some
objects to the points. By the way, the points
now disappeared because I changed the type
of data basically. So let's go through this. Here you have geometry, which is this cosphere. Then you basically convert this geometry into points here. So here you have a mesh object. And at the end here, you have only points. So now what comes out of here is no anymore
a mesh object. So it's not a three
D object anymore. It's just an accumulation of points on the former vertices, but the vertices are
gone at this point. And that's why this
now disappears here because we convert
here points two instances. But we have no instance, but the points are
still gone then. And now we can select an
instance with this plaque here. So we can just select
something with geometry. So let's just select a que. And connect it here and
maybe rescale it like here. So what we have done now is, maybe I could enable the edit
mode, and you can see it. So now what we've done is yeah, put a little cube on
every vertex here. That's, that's
instancing basically. And you could now change
this in different ways, for example, you could change the distribution of the
instances here or the points. For example, let's just
delete this note here. By the way, you may notice
that I deleted the node, and nothing happened here. That's because if you just put geometry into a points plug, Blender just assumes
that you want to select the
vertices as points. So this note was only
for presentation. You could just do it without it. And then it will work as well. But for example, you could use a distribute points
on faces node. What this does is it distributes the points on a pace and not on the
vertices or something. So let's jump into
the edit mode again. So what you can see
here now is when I increase the density
here of the points, that it gets, yeah,
scattered with points, which has not really something to do with the
vertices or something. It's just on the surface of
the object or the faces. And yeah, you have a density
slider here on this one. You can get pretty dense. Yeah, let's say, 1,000 density, and then you have a cosphere
looking point cloud, or you could use
the Poison disc, which is basically a more
controlled distribution because you can select a minimum distance
to other points, which means they can't
overlap so easily. So, for example, let's just increase the density
here too, like before. And now we can
tell this geometry notes editor to keep a minimum
distance to other points, so let's select 0.1. So now this distance here, we can see it from here
to here is now about 0.1, and by this, you can
increase this to see that. And now you have a yeah, pretty even distribution because it tries to achieve
a very high density, but you set a distance limit. So every point is now roughly 0.23 units from another
point. All right. And now we can just unmute
this little note here and just reduce
this or maybe just just go back to random
and put this a bit lower. And now you can have
pretty cool shapes because you can just scatter
this object here with cubes, which this solely creates
an interesting surface. Lo get this. It looks pretty
alien like or something, or like a like a crystal, which grew that
way or something. Yeah. So you can create
interesting shapes with this, and you have here a little thing which you
can use pretty nicely. Let's just reduce
this a bit like that. So you can see the
rotation of the cubes is a The same for everything.
That's just because the cubes just normally
spawned there. But you have here some vector outputs,
which is, for example, the normal vector,
and the rotation, let's call it vector as well. So the normal vector is the normal vector at
the point position like this pointing away from the surface like every
normal normal vector. But the rotation here
is not really a vector. It's the uler value, so the rotation angle
to rotate something looking on the normal vector or looking along the normal
vector away from a phase. So for example, with this
rotation slider here, you can rotate the instances
every single one at once. So just a uniform thing. But as I told you in
the previous video, this little diamond
shaped plug means you can feed it with
multiple different data. So you can just put every single cube isolated
there with its own rotation. And for example, if you would plug the normal
rotation in here, you can see that it's
not really working. So the cubes aren't
looking Along the surface, that's just because this
is a really vector, which looks somewhere,
and this is a rotation unit with degree. So the unit is just different. It's a different data type.
That's how you can tell it. This rotation value is
not really a vector, but a rotation value, and this rotation value as well. And when you connect
this here now, You can see that the cubes are more looking on the outside. I mean, it's not perfect
because as you can see here, the ball wasn't round at
all, like the cosphere. If you just take us
different object, let's just delete this and
use a UV sphere instead, then you can see it's more accurately because the
cosphere is pretty edgy. So now you can just
increase the density here, and you can see that now every phase looks
in some direction, and the cubes follow
this rotation. And by this, you can
have your object with the correct rotation at its
spawn point, basically. Every cube now looks
in the correct way, let's say correct way because
let's say we want to, let them look in the
normal direction. That's how you can use it. So that's just a
practical tip from me. Use eight distribute points
on faces, instance something, and then rotation into rotation, and then it's the
same unit here. And then you won't run
into problems here, so you can just play
with it basically. And of course, since
it's the normal vector, if you change something, so let's say I want to let's put a subdivision
surface before that. So let's say, I want
to move now something. Let's say I want to
move these parts here. You can see that the normals are flowing
pretty smoothly here. With the cubes, of course. So when I disable it
for a second, this one, you can see that now here the normals are
flowing over here. So the normals are
flowing like this. On this curved area here. And when I now make my a
cubes enabled again here, the geometry notes edited, you can see that it's
working pretty well. So with this small method, you can already do
pretty cool things here. Like I said, it's just a
distribution of some kind. There, you can use eight
distribute points on faces to have many instances on the surface here
or just leave this out and just use
the points itself. So when you do this, the points
here are the cubes then. But you may see here that the Rotation then
is not correct, which makes sense because
we used this data here to feed the rotation value. So this is not much of use now. If you want to do
this, you have to do another thing. Let
me show you that. So how to get y, the different
rotation values then. If you don't want to do
it with a distribution, you can just take them. Because we can just use the normal vector here.
So you can see that. With this, it's of course wrong, because this is a vector
looking a direction, and we need a rotation, so the unit is different, but you can basically convert
it into a rotation with the align er to vector when
you just put the vector, Here in the vector plug and then reduce
the rotation here. So you can see you have a vector input and
a rotation output, so it basically yeah
converts it loops. And then you can
use that instead. You can see that the cubes now looking
on the outside here. So the top of the cubes
are all looking upwards. And this would be the, I would say, best
way to display this. And with these points here, you basically tell which side should look to the
normal vector. In this case, it's not a
big difference because it's a cube and the sides are all looking on the
same directions. But for example, let's
say we don't have a cube. So let's just quickly create
something for ourself. Let's just use this.
I will just model a little arrow that you can see in which direction
it's looking. So we have a little arrow and now we will just
use this arrow here. Let's just rename it and delete the cube and
use this instead, and maybe scale a bit down. So now we can actually see
the way or the direction. Okay, and now you can see when I change
something here now, you can see how it's changing. So basically, what
this here tells you which axis should look away
from the normal vector. And yeah, in this case,
it's pretty easy to say, it should be the z axis
because otherwise, this axis here would look to the outside or
this or this axis, but there are no
use for us because an arrow is pointing
upwards here in this case, so we want the z axis, which is the upwards axis to be aligned to the normal vector, parallel to the normal vector. So we'll use the z. So just, for example, use a vector here, and then you just tell
blender which object axis should look in that
direction of this vector. And then you just connect it
here, and then you got it. So in this case, as
you can see, normal, then convert this
to a rotation for the z axis of the object
here, and then you got it. So that's how you
could do it without the distribution here,
just with the points. And then you can have it. So this was the
instancing video, how to use it, and how
to control it a bit. And now you can
experiment lots of different things and just
play around with it. It's a pretty nice tool to yeah put small bits of geometry on, for example, large areas to
create something like this, which is actually pretty cool. You have some cloud of arrows
here pointing outside. So as you can see, it's pretty easy to create cool
shapes with instancing just with their
simple inputs like my little example arrow here. That's all for this video. Thank you and see
you at the next one.
7. Curve Instances: Welcome to the Geometry
Nodes beginners course. In this video, I will give
you another example for a curve in combination with instances in the
Geometry notes editor. For this example, I will use a photo I took myself
of this fence here, which I want to recreate in
the Geometry notes editor. So what I basically want
to have is a, let's say, constant bottom line here, which is the end of the fence or the bottom
end of the fence. And at the top, we have different heights here. So some of these planks are
higher and some are lower, and some like this, for example, are rotated a bit. So they were cut off, a bit crooked, or yeah,
not horizontally, perfectly, but a bit, yeah, like this, a
little diagonal. So that's what I want to have. A pretty irregular
fence with yeah a bit randomized planks on
it. That's what I want to do. So let's start to do this. At first, I want to start
with a curve where the fence will be on later and
yeah just I don't know, move it around here like this
and maybe extruded a bit, so that this will be the path of the fence
then, like this. I want this to be the top
end of the fence here. So we can put this around
on the same height here. But not that uniformly. So at first, the theory,
how I want to do this, I want to create a line, which is randomly
rotated a bit like this, for example, and then I want to extrude this line downwards, like this, for example,
and here and so on. So different rotated lines which are then
extruded downwards. And when I have this, I want to extrude them in that
direction as well, that I have these three
dimensional planks, and so on. You get it. And when we got this, I want to cut them off, or basically scale
the bottom part here to the same height, to the same value, and then you will have this and you will have
these a bit crooked planks. Like this, and they will
end up at the same height, and then you can
have the fence here, and of course, every
one of these will be instanced on the
points of the curve. And by that, you have
this fence here. So that's the theory. And now let's do the
real thing by opening a new window in the Germetry notes editor.
Create a new group. And now we can start with building the
actual tree for this. So at first, I want to put
a curve two points note. As in the video before, you saw that you can
create some points here by this note
or with this note. And after that, I want to
use an instances on points. And for the instance, I want to use a mesh line. I can quickly show you
the mesh line here. It's basically just a
line with a start point, and end point, and points
in between, and so on. In this case, we only
need two points. Where this is the first, and this is the second one, and it should be exactly
like this. That's fine. So I want to use
this as the instance here that we have these mesh
lines then on my curve here. So now I want to rotate them
accordingly to the curve. And as I showed you
in the video before, this can be done very
conveniently with this rotation output in the rotation input of
the instance on points. And here you can see when I
may be mute all of these, that it's along the
shape here, yeah. So along the path, you
have now the curves. It looks a bit weird because
the lines there are so long, but that's fine for now. So at first, I want to make
this a bit larger like this that my fence is has
a bit more length here. So then maybe let's
just enable that. So that's about what I want
to have, maybe a bit larger, and then you can see that
the relative size of these mesh lines
decreases when I increase the length or the size here of this whole thing in general.
And of course, you can Put this as well in
between curve length like before to have this here. So now the curve length
adjusts the amount of points. When I increase the length, I will just add more mesh lines. You can see it barely, but they have gaps in between here. So now we have
automatically updating y. Point counts here. So, all right, let's continue, maybe tidy this a little
bit up here. All right. And now we want to continue
with a rotate instances. Like I said before,
I want to rotate them in their local space, so then rotating
around this axis here. And I want to I mean, you could just see it when
I use the x slider here, for example, and you can
see how they are rotating. And I want to do this
with a random value. So I add a random value note. And I want to use a vector
because I only want to do this with one yeah of these
values here with one axis. So let's just put
everything on zero for now. And let's say I
want to have zero, so negative 0.5 to positive
0.50 0.5 on the x axis. And this I want to use on here. And now you can see
that I have, yeah, these randomized rotation
values on my mesh line. And if you don't
like this pattern, you can just change the seat, and then you can have another
randomization pattern on these rotating values here. But let's just stick with seat
zero, and let's continue. All right. So maybe
move this a bit. Here. All right. Now I want to extrude
these values, but in order to do that, I
have to realize them at first. So we have to use a
realize instances because now they
are real geometry, and I can properly process them. So now let's just
use an extrude mesh. With this node, you
can extrude geometry. In this case, I want
to extrude edges, and you can already
see what happened. I mean, the angle is wrong, but in general, this
is what's doing. You can just extrude certain
parts of the geometry. In this case, the offset shouldn't be the
normals or whatever, but just the z x is here. So it's just it's
supposed to go down. And because of that, I will
just create my own vector. Which has a negative value here. So like this, a negative
value or the z axis, and just use this vector for everything in
the same manner. And now you can see my vector now extrudes it exactly
along this thing here, so I can basically
leave this on one, for example, and just
change the vector. So it doesn't really matter. So this is just the factor, how the length of the vector. And then this is
the offset scale, so they're just going to
be influencing each other. It doesn't really matter
which one you change here. Let's just take this on one and use this one here instead. So I think that's okay. And now you can see these
extruded little plays here. All right. So let's
continue after we did that. I want to scale basically the bottom parts here
on the same level, on the same Z hide. And to do that, I have to use
a scale elements like this. And with this node, you can
just scale certain things. So for example, this
would be just everything, but I want to do this only
on the on these parts here, and you can do this by using
these selection things. So for example, if I'm
extruding something, so let's say, let me just
give you an example. Here, you have a top and a side. So the original mesh, you can view as the
bottom basically. So let's say I
have here a plane. So this is the base. So let's say this is the base. And when I'm extruding this now, these are the sides, and this too, and this
is the top, like this. So when you're
extruding something, the sides are these faces, and the top is basically
the same base. You just extruded just on a different place with the
sides connecting them. So this is how this
selection works. And I want to scale, since as you see, this
edge here is my top. Now. And what I want to do is, I want to scale now my top, which is this edge here at the bottom at a
certain Z height. So what I have to
do here is to just select only the top
parts, which are these. And if you now look, what I'm doing here, it's doing nothing because it's on uniform. So I want to put this
on a single axis value, which is the z axis, like you can see here. And when I change
now the center, Of this z scaling to the
exact vector position here. So this is the center
of the scaling, and you can see when I now reduce this to
zero, for example, and of course, change this
to edge, can now see it. So let me just show you that. Basically, this is on one,
this is on how it was before. And when I reduce this, you can see that they
get the same level, because the center
is at this vector, which is exactly on this height. And when you scale, only
these Only these edges here, and you scale them to zero
with this as their center, then they're going to be
leveled exactly here. So this is how you can achieve the base at the same level
for every of these planks. And now what I want
to do is I want to extrude them again so that they get thickness
because for now, they are only flat
planes, basically. So let's just extrude it
again, extrude mesh. Here. So in this case, I
want to extrude, everything along their
normal in that direction. So this is correct, basically. So this is fine. But you have to take care a bit because let's just look
at the phase orientation. Here, you can see
what's happening here. Because when you extrude phases, the base gets lost
here, basically. So you don't have the base. Let me just disable
that for a second. So you can see they are
now hollow basically. You can see better here. So they're now all hollow here. They have no back. This is normal if you're just
extruding faces. And what you can do to
avoid this or to fix this, you just have to
connect this again. So because, as you maybe know, this is your base, and this is then
the other parts. So basically, you need this
and this at the same time, and you can just do
this by joining them, and you can just join them here. And then you can have both. So now you have the space and
this extruded part at once, but you have a wrong
phase orientation here. And you can change that
by just flipping it. So there is a flip phases note, and you just put it here, and now you have its
y, nicely done here. The only thing is
they're not connected. Yeah, because joining just means put them they're in
the same object, basically, these geometries, but they are not connected yet. But that's very easy how
to connect geometry, which basically is
almost connected here, when it's at the same position
with a merge by distance, you would connect them usually, and you can do this
exact same thing here. There is a merge
by distance node, and now they are connected. Yeah, so the edges
basically touching here. So this edge And yeah, these edges here,
they are touching at this point and this point and everywhere else, at the corners. And because of that, you can
just use emerge by distance, which means when
they are very close, they will just merge
into the same point. And yeah, because they are at
exactly the same location, you can use this to
really connect them to a common point together. So now it is almost finished. You can, by the way, here, just change the height
with this vector, for example, how
long it should be. And of course, with
this extrusion, you can reduce it a bit
because it's pretty thick. So you can reduce it to,
let's say, I don't know. 0.24 or something. Then this fence is like this, and then you can make it a bit. Higher like that, and
then you can make this whole thing a bit
larger. So like this. And now because you can see that you can now choose
with this curve here, the Yeah, basically
top end of this fence. And the bottom is the same
for every one of these. So now you can
basically, I mean, maybe I could just turn
this off for a second. So you can see now
this curve here defines the top
end of the fence, and you can now build
your fence with just this one curve here,
which is pretty nice. Like that. And if
you want to have more differences on the height, because currently they are
only have different rotations, but they have the same
height for everything. But the rotation is different, but the height is the same. And you can fix this by just moving some of these
mesh lines up and down, before extruding them and so on. So let's just go back
before we did that, so we could sneak it
in here, for example. Let's just move these
parts a bit away. And just use a trans
late instances, which means moving them, and the translation should
be on the z axis basically. So when I put this on here, sorry, not on the local space, on the global space. So the real z axes up and down. Yeah. So you can move
them up and down. And when you want to make this
random for everything, y, you see that diamond input, which means you can feed it with individual values
for every instance. So let's just use a random
value node again on vector. And then, for example, you could use here
the zero to one, on the Z axis, and then you can have multiple
different heights. And if you want to increase it, you can see this is now the value for this
randomized pattern, how far the range is basically. So some are translated
by zero units, and some are translated
by 2.3 units, and a lot of them are in
between of these two values. So, for example, you can put this very high,
let's say on five, and then you can have this pretty yeah alternating pattern here with this fence. And that's basically how
you can build this fence or these kind of randomized
fences or shapes like this. You can just start
with instancing mesh lines on a curve like this and then
just process them. For example, as I did it now, extruding them and
rotating them, and so on and translating
them randomly. And then you can
have these planks basically up and down and so on. And to finish it, you can just let me just switch
to the perspective you. Maybe that's looking
a bit better here. So maybe you can just
use a bevel at the end because they're pretty sharp here without the
bevel, you can see it. So that's not really realistic. I mean, it's all right, but it's not very realistic. You could just give
it a bit like this, a little bit of a bevel
around the edges, and then the reflection here
looks way more realistic. And by the way, if you
want to make them here smooth because the reflection currently is on
these faces here, which is the flat
projector of the normals. You can just use a
set shade smooth, and then they are
shaded smooth really. So now you can have your
planks like exactly this. And that was the fence
building example. It's a bit more complicated
than the chain, for example. But yeah, you can see how
you can treat your curves and instances that you can achieve things like
this, for example. It's pretty nice. Now you can just extrude your curve
wherever you want, and you can have
unlimited and perfectly fitting They are planks
around it like this. This was the example
for the fence. I hope you did a good job, recreating it and had fun, and of course, learned something that's the important thing here, what I can deliver. That's all for this video. Thank you and see
you at the next one. T T T T
8. Noise Textures in Geometry Nodes: Welcome to the Geometry
Nodes beginners course. In this video, I will talk
about using textures in the Geometry notes editor and what to do with it when
you have them in there. All right. So at first, I want to show you in general, what, for example,
a noise texture is in blender and how
it looks like. To do that, I want to open another window and go
into the Shader editor, and then I want to look at
my peer in the Rando view. So now I just want to get rid of this and use a noise texture, and I want to use the factor of the noise texture for
a principled volume, so you can see it in three dimensions like
this in the volume, and then I want to have a math here to just increase the
strength of the noise. So now this is how noise looks like, basically
very dense. That's just because it's
extremely dense here, and the differences between low and high values are
not really visible. So let's change that
with a color ramp. And then we will put
this in between here, and then we start to
see something here. To make it even better to see, let's just switch
this to constant, then we have always
a hard transition from black to white here. So now you can see, let's say clouds or
something like this. So this is basically a noise
texture in three dimensions. So it is a mixture
of values 0-1. And where a high value, in this case, a one is, there will be the density. Yeah, the density there
is pretty high then, and then it's visible as
these particles here. And where you can see nothing. So where the holes are in this, sponge like looking cloud, there are the value
is pretty low. And how it's created. So a noise texture is basically. So let me just show you
this pretty quickly. It's basically if you just have your
coordinate system here, you have certain areas where you cross the x axis,
for example, here. Like this, sometimes you go up and sometimes
you go down here. And when you got
this, then you just basically connect these parts
here that you have this. Kind of randomized pattern, but it's not really randomized
because you're creating islands because the values are going up and are going down, and they're not
totally randomized. A totally randomized value would be to have one value here and one here and one here and one here and one here
and here, and so on. So this would be totally random, and then it would be
like this or something. So it's not very random, but it's random enough
that you can display certain things like rust on metals or whatever
or clouds like this. So you have areas
where you have values. These are, for example,
these areas where you have these material here or whatever
this is here, particles. And you have areas where
you don't have something that's the areas where the
noise value is pretty low. And with a noise texture here, you can read these noise values
in the world, basically. So you can imagine it like this that in the whole
world here everywhere, are these noise values
floating around, and you can read these noise values to
use them for example, for the density here,
and you can read these noise values with
this noise texture here. And for example, if you
can increase it here, then you just increase
the let's say, the magnifying glass
where you look at them, and that's why they get smaller. So if you increase the window
you're looking through, then the things get smaller, that more things are
fitting in there. All right. So let's go back
to the Gemetry notes editor. So you can now
imagine it like this. Yeah. Just your whole world
is full of these values here. Let's jump back now, and we can use these
fields of values. So let's add the geometry notes editor here and add a new group. And now I will just
delete this geometry here and cut this
here, doesn't matter, and I want to create
my own geometry, which is this grid
here like this. Let's just define a size, let's say three by three. And now I want to instance
something on these points. Yeah. The points in this
case, are the vertices. So if I'm enabling
the wire frame here, You can see the points, so the points are here, here, here, here and here, and of course, in
the corners too. So I have here these
nine points, basically. But of course, I will
change that later on. So let's just use a
instance on points, and then instance
something on it. For example, a cube
like this instance, and then I will have a
cube on every point here. And of course, I want
to scale them down. Like this, and then you can
just increase the count here. So let's increase the grid here, 20 by 20 meters, and then let's just increase
this to 300 or something. Maybe that was a bit too much. Let's and then let's just
decrease the cubes here. So let's go 02, and then let's just increase it to that one that we have
little gaps in between. So that's about right. So now we have a field
full of cubes here. And now I want to create some waves on it with
the noise texture because every cube here has a different noise
value at its position. So as I told you before, The whole world is full of these noise values everywhere
are noise values here. And of course, at a certain
position of this cube, for example, it has a
certain noise value. And this Que per has another noise value in this
cube and so on. So every Que per just has a different noise
value at its own position, and we can use this noise value to move it upwards, for example. So to do that, I will just use a translate
instances, like this. And then I want to
use a noise texture. You have textures here as well, just like in the Shader editor. And now let's just take this, use a combine X Y Z to limit the value here
only to the z axis. So let's connect that here and connect that to
the translation here. And now you can already
see something happened. So we moved now
every instance here, so every cube on the z axis with the same value as the noise
value at its position is. So now, for example, you could scale the
field up and down, and you can see
something happening, especially when you have the
scale very close to zero, because then you can see the really the actual pattern here. So now you can see,
as I said before, the up and down waves here, when you cross the x axis for this axis, for
example, here, of course, in a three
dimensional coordinate system or noise texture dimension here, there you have three of
these values crossing. But in this case
here, on this last, edge here, you can really
see how it's working, so it has it was like that at. The values we're crossing
the axis on these points, and then they were connected and forming this pattern here. So that's how you can create, for example, a thing like this. And when you want
them to be more, when you want to
increase, this effect, you can just use a math
node basically at the end, for example here, because
currently it's just 0-1, but you could, for example, use a math node and
multiply the values. And then you could
increase this effect. So you can see that
here pretty well. Here, you could
use this to create this almost mine craft like looking surface
there or landscape. So very blocky and
yeah, very like waves. There, very wavy looking. And you can move now this whole pattern to
certain axis here to the y, z or x axis, because,
for example, this vector input here show looks basically at one
of the vector here. So for example, let's say, from the origin, This cube, for example, yeah, which was
lifted a bit upside upwards. So this vector, which
looks from here to there is exactly
that input here. So you could, for example, just add an x value here, just add an x
vector, for example, something like this, then
through the vector addition. This vector would then
look in this direction. Yeah, because it's this
vector plus this vector. And then the cube or the noise value of the cube would be then at
this position on this cube. And by this, you can
just move the whole, noise pattern here over
the surface of this cubes. So this input here
is the position. So it's just by
default like that. Let me just move this a bit. So it's the same if you plug
it in or don't plug it in. So by default,
it's the position. It's just not visible, but you can now use this
and then use a vector math. And then here, you can just
add something, for example, add. An x value. And you can see that
you can now move this terrain or this
noise field actually. You can move this on the x axis. And with this, you can
move it on the y axis. So this is for the x movement, and this would be then
for the y movement. And that's basically
not something very new. This was totally normal
in the Shader editor. And the third axis
here is the y axis. And with this, you can basically change the third axis of
this noise field here, which you can't really see because I have a two
dimensional grid here. As you saw before, this is
what we're working with. And the third dimension
would be that one, and you can't really see it, but you can see a
cut through of this. So when I change that, It will just move everything
in a noise pattern as well. So you can't see it moving in
one direction or something, but you can see it moving a
bit in its current dimension, which is two dimensional
here in this case. So, you could, of course, use this to rotate it, for example, or let's say let's put this vert on multiply, so let's put everything on one. You could just stretch
the whole pattern, y, so you could do this, for example, you could
squeeze it together, that you can have,
these like lines here, for example, eh, because we're squeezing one axis with this multiply
value, like this. You can squeeze it together, or of course, squeeze it
in that direction here. Oops, let's put this on one. And when you do something here, it's not showing because yeah, this is not visible layer. So rotating this texture
is possible, too. You need for that a row
tate vector here. This one. Maybe let's just put this on ad. And here you could now
rotate something here. In this case, you have
the rotation axis and the center on zero, and here you could rotate this whole pattern
around the center. For example, and move it and saw on there or
move the center, then it will get rotated
around a different center. So let's put this on one. You can see it that
it's not rotating anymore around the center here. The rotating axis is
now somewhere else. You can see that because I added it in before here. It was on 30. So it makes a difference if you add something and
then put a rotate. Maybe you can see that here. This is the center, and now I move the whole pattern here, and now the rotation
center is somewhere here. So it makes a difference. For example, if you want to keep the rotation center here, then you could do it like this. Then you rotate it
around the center here, and then you can move it
something else like that. But that's just for information. You could process it
in different ways. Here, the texture
here in this case to manipulate the shape a bit. Yeah, and you could do
this with any texture, not only with this
noise texture. It's basically for
every texture the same. Now I want to show you
something a bit different, but it's similar
to this, which is, let me just delete these
two here or mute them, not delete them, so that
are disabled for now. Because now I could do the same thing
with this grid here. But in a little bit different
way because before, there were a cubes like this, but they are not
really connected. Yeah, it's very blocky, and yeah it's not a surface. It's just a structure of cubes in cubes and
cubes, and so on. So to do that, I have to
approach it a bit differently. But we can leave
these parts here, so we can just leave the
texture and so on, like this. And the multiply, we can leave as well and
this one as well. But this year is wrong because we don't
have instances here. So let me just mute them. I have a grid, which
is a mesh geometry, and here, it's instances here, so it's a different thing. I have to replace
this basically. And I replace it
with set position. With this node, you can
change the position of the points on a mesh object. There for example, here in
this case, every point, now I can move up
and down and so on like the cubes before. So now I can delete this one
here and reconnect that. And then I can, for example, just use this in
the offset here. And now you can
see something here because I'm now moving
the points here. So every point here is now
moving or is moved upwards. By its noise value. And it's almost the same thing. Yeah, it's pretty similar.
You can see that here. Now, but now you have
a real surface here. Now you could, for example, just increase the vertex count here. If I'm increasing
this, you can see it gets smoother and
smoother and smoother. And now we can hit
the 300 or something, and we have a smooth
surface here now. You can see that.
It's very smooth now, and it's now connected
with everything. So here, for example, this
is how you could create a, let's say, procedural
environment for a level or whatever. Yeah, with a slightly
dented surface here. Yeah, with a low scale here and a low value
on this multiply. You can create infinitely
large pieces of environment which are a bit
bumpy like this, for example. And now I want to show
you the last thing, which is how to
use a controller, for example, to control the noise movement
here of this field. So to do that, I need
a controller at first. Let me just go back here, and maybe let's make this a
bit more distinguishable. That you can see the
effect pretty well. Like this one. And now
I need a controller. Let's say I want to use a proximity to an
object as a controller. So I only need an empty
object, for example, that I got something in my
space here, which is there. Let's jump that back here. Now here's my controller, and I can now pull this
controller here in this. Maybe let's call
this controller. All right. Now I got my
controller object info in my object here. And now I could just use the
position of my points here, and then just calculate the distance between the
position of this object here, which is at the origin here, the orange thing, and the
position of every point here. And I do this with
a vector math. Vector math and then calculate
the distance between the location and every
position of every point here. And the result of this. Let's put this in before. I want to multiply the result of that with the result of
my noise texture here. And what I get is something pretty weird.
But it's working. Yeah, you can see that you have to imagine the texture
here is at the bottom, when I mute that, so
it's here at the origin. So you have to calculate
Let's just switch the view. You have to calculate it
from that line basically. So this is where the line is. So when I'm enabling that, it's calculating
between this point and every point on
here, for example, So you can see now
when it's close, The noise effect is pretty low. And that's the opposite
of what we want. So I have to remap it a bit. But before I want to
remap something else, because I don't want the effect to be only in one
direction here. I want it to be in both
directions like this. And I just I can do
this with a remap. So map range to remap values, and I want the values
0-1 to -0.52 plus 0.5. And by this, you
can see that here. Now my values are yeah. Minus and plus, so
the values are now. So the center is
now in the middle, and the range is now
from plus 0.5 to -0.5, and that's what you can
see here, basically. It almost looks like a
sound wave. All right. And now let's just go in here and just take another
map range note. And then let's just change this a bit because I don't
want it to be 0-1. I want it to be from
minus one to zero, because I want the values
pretty high when it's close. So like exactly this
here. You can see that. So when the distance here from this point to
that point is very low, then I want the noise
value to be very high, and that's why we remapped
it here in a negative way. And because I want the
range to be larger here, I want to increase this
val. You can see that. So let's just put this on, let's say five or something. And now you can see, maybe let's disable the grid for now because it's a bit dark. So let's grab that one. And now you have a
controller here, where you can just control where the noise value is active, which is, in this case, just a radial proximity
to this object. And now you can still use the normal noise texture
here, like before, you can just add something to move this back and
forth and so on and rotate it or whatever or move it a bit away from its center and then rotate it around that. We just move this abit down. So like that, and so on here, so you can just move it, and the effect will
only be visible in the proximity to
this object here. And you can create emerging
effects here for that, for example, like
this and so on there, just move it around or
animate it or whatever. But that's that you
can understand it. That's how you can control. Yeah, for example, a
noise texture here, but this counts
for every texture. A texture is just a image,
basically, in this case, a three dimensional image or
three dimensional values. And this counts for, every
texture in the same way. But here on this example, the noise texture here can be modified by a large portion, and then you can, for example, limit it here by exactly this method here to use the distance to
a certain object, for example, that you can
have a easy controller. And yeah, you can control
very complex movements here. I mean, just look at
what we just did. Yeah, the procedural approach, as I told you in a video before, is to, for example, create complex
motions in this case, and then bind them to very simple controllers that we as humans can control,
and I understand this. In this case, you just bound the quite complex motion
here of this noise field, up and down movements of
every single point here to basically one
calculation, point position, Into the distance of this object is a
certain multiplication, and here it's zero, and here it's one, and so on, y, and then you can control this
with just the proximity. And yeah, that's how
you can create it, and how you can control it, and how you can process it. And now you can experiment
a bit with yeah, different textures or
different motions or whatever. E. It's actually pretty fun to play around a bit
with textures because they are already a pretty big accumulation
of different data, there and values, and so on. For an example. Let's just use a Voronoi texture and just exchange this
here to the vector. And then, for example, use that. And you can have a very
different shape here. Let's just go back. Yeah, for example, you have
something like this here, the bubbles or whatever. It's the distance output
of a Voronoi texture. And then you can use that, for example, or in
the normal case, the color value of the Voronoi, Yeah, which is a
pattern like this. And then you can have
this pretty cool pattern, which could be the I don't know, dry ground of an African country or something like this, yeah. So that's just how you can
approach something like that. That's all for this video. Thank you and see
you at the next one.
9. Material Attributes in Geometry Nodes: Welcome to the Geometry
notes beginners course. In this video, I want to talk about colors and how to apply or assign materials to the geometry and a little x
course to the attributes, which is yeah, connected
to the materials. All right. Before we
can assign a material, let's just create one. In the materials tab.
We got something here. So let's call this material red and change its base
color to red here. Right. Now let's open
the geometry notes editor and create a
new group. All right. So let's detach
the geometry input here to create a
procedural geometry. For example, a cube, which I can connect
then to the output. All right. Now we got a
cube here in the tree. Now how to assign
a material to it. So at first, let me switch to the material preview that we can actually see the materials. So currently, it
has no material, so it's displayed as white. And to assign something, you just have to use
a material node, which is the set material. He set material. Then you are connected
in between here. And now you have a
material slot here, just like here, you can click on it and just select
the red material. And as you can see now, you assigned this red
material to the cube. So let's just make
a copy of this and create a blue material, for example, and make a copy of that too and create
a green material. All right. Now we have
three different materials, and you can select them here
as well. Red, green, blue. You can switch at any time from one material to
another. All right. Now this is for a single
geometry case here. But what's about when you have multiple
pieces of geometry? Let's go through that as well. So at first, let's create
some more geometry here. So for now, let me just
delete that and use a, let's say, a UV sphere, and a cone as well. And then yeah, connect them with a join geometry node
here to the same. Path, right. So now I got this. Yeah.
Let's put that away. And I want to have a
transform note as well for every individual so that I can control each of
them. Individually. So here, now I want to move
some of them to the side that we can see them
parallel like this, and the co maybe a
bit down. All right. Now we got our three
pieces of geometry here. So now about the materials, you have to imagine it as, here the paths of the
individual geometry, and you join them, and then you have this
combined geometry here to assign the materials because if you assign the
material here, for example, so let's just do that, set material with red, for example, everything
will become red, because the geometry path here, is combined to the
same geometry, and then you assign a red to it. Now, So let's put that
here, for example, the red one on the cube
before you combine it, then you only set the
cube to red, for example. And then let's copy that
in here for the UV sphere. So for the ball, this will
get blue, for example, because you have this
isolated material here, and then you combine the
different materials. And when you set
this here to green, you can have the
isolated pieces of geometry with their
individual color. And then you mix it after that, and then they will have, yeah, their own color here. But you can overridee
all of them when you just change the material here
again to, let's say, blue. And you can override that if
you change it here to red. So you can see the
last material input for the geometry piece, in this case, every one of them, you can override it by just
using another node here. So the last material node
counts in this case. So but if you want to
have it like this, you can just assign it
before you join them, and then you will have their individual materials
assigned to them. All right, so this was the simple part of the
material assignment, where you just basically
put one note in between, and then you have your material. Let's switch to a bit more
complicated part where you assign certain points
to a attribute. And by this, you can influence their material, for example. So let me just delete
some things here because I only need the UV sphere here. So we can delete these parts. Like this, so. Now I have my UV sphere only
in the center here. All right. So at first, let me tell you a little
bit about attributes. For that, I have to
open a new window, which is the spreadsheet
where we can see all the attributes
of your points, basically on your objects, for example, on the geometry. Here on my UV sphere, where I haven't done anything, I have basically
only one attribute, which is the position
of every point on this UV sphea.
It's pretty much. I have 482 points, because 481 is the last one, and the first one is zero. So I have, you can see it here, 482 vertices or points
on my sphere here. And yeah, every position
has three values, which is the x y and z value. And by this, you have your attribute displayed
as three values. But I can add another
attribute to these points. So, for example, I want
to use a noise texture. Which I showed you
in a video before, where you have noise
values in the world. And for example, on
this point here. If the a point would be there. It will have this value of this noise field here
or this noise texture. And I can read the
noise value on the point position by just
creating a noise texture. Let's do that. Noise texture. And then, for example, let's just portray
it here with a note, with a viewer note, you can see values on points, basically. So let's connect the geometry
I want to look at and then connect the values
I want to look at, and then I want to
let's enable that here. And then it switches
here to view node, and now you can see
what the viewer sees. So basically, I can see the
geometry just as usual. And now I see the
added values here, which is here on
the viewer side. And when I now change the scale, for example, of
the noise texture, you can see that the
viewer values here change because this is
now noise texture value, basically, on the point. You can see, for example, now my vertex ten, the vertex with the index ten, which is the 11th vertex has
0.3 67s the noise value. And I change the noise field and make it bigger or something, then I changed the value of it. And you can actually see it
in Blender version 3.4 Yeah, from that on, you can see
what the viewer sees. Yeah, Beforehand, you couldn't see it on the model itself, but on 3.4, you can
see the actual values, and you can see the
noise texture if I'm decreasing it now to a
pretty small point here, so you can see this
fork here basically. So for example, This point here, or maybe let me enable the
wireframe. You can see it. So for example, this
point here has a rather low or this point
here has a rather low value, I don't know, maybe
0.2 or something. That's why it's
pretty dark here. This point here has
a low value as well. Because here's a
line between them, which means it's interpolating from a low value to
another low value. That's why you have
this line here. And this is a higher value. You can see that because
here's a contrast between dark and
bright, and so on. So here you can actually see the values of this noise field. And we can use this
information now to, let's say, mix a material
or something like that. So let me disable
this wire frame. So here you have your visual representation
of the values. And the viewer, you have
this list of values. And the noise texture just
gives you these values, basically, like
this, for example. And of course, you can just use a color ramp to give it more
contrast to see it better. So let's make this more
contrasty like this. Now you can see the
values pretty well. High value, very low value, and yeah, mid value. So this could be a one,
this could be a 0.5, and this could be a
zero, for example. And this is how the values
are displayed and written. So in order to see
the actual values, or to use them, you have to connect it to
the group output, basically this one here. So now you have a because
what the viewer sees, you can't use the dta
you can delete it, and it's no difference. It's just for you that you
can see what you're doing. But what's important
is the group output. So currently, I have a
geometry output like normal. Yeah. If I would delete it, there would be no geometry, and I have my color
ramp output here, which is a color output. And let me go back to
the geometry notes. And here now, we have our
output attributes now, which is this one here, and you can change
it when you press N. Or open this menu here manually, and then you have
to go to group, and here is your output. Currently it's a color,
but I could, for example, exchange that to a
float because it basically makes no difference since it's only gray values, so it's basically a
float value anyway. And I could rename it. For example, I could
call this noise, and now I have noise here. In this case, it doesn't
matter, but if I have, let's say 20 different
output attributes, I maybe want to
rename them that I get an overview about
them. All right. And now I have to give
this attribute a name. This is very important
because you have to reference this name later on. Yeah, for example,
we could name this, let's say, noise
value. All right. And now you can see
now my geometry got the position value
and now a noise value, which is exactly this list of values for every point
here. All right. And now we have just wrote
these values on the points, and we can use them now. So let's switch Let's switch here back to
the Shader editor. And yeah, this is our material. And we could now
use the attribute. By the way, you can see here. Here's a green color, but my object isn't green. Why is that so? Well, that's
because let's go back. I haven't assigned any
material here yet. Yeah, I deleted it before. So you could just use a set material and
just add anything. Let's say we want to use the red one and then switch back
to the shader editor, and then I want to
addit the red one. Now I'm on the correct side. All right. Now, let's use
a node in the shader ita, which is the attribute note. With this node, you
can access attributes. So the attribute I
want to access is my noise value here from the output of the
geometry notes. That's why I want to
type in here my value. Noise value. That's the attribute I
want to pull out here. And let's say I want to use the factor for the color.
And there you have it. Now my values here are the actual color now of
my principled BSDF input. So it's the base color
of the object here. Maybe we could make
this a bit more smooth. So let's go to the
geometry notes editor and maybe make a set shade
smooth at the end. So we have here this
smooth shading. And then we may want to increase the poly
count here a bit. So we could use a
subdivision surface. To just subdivided a couple of times to get more
smooth values here. So let's divide it four
times, for example, and then we have pretty
smooth values here, but it will increase the
point count as well. You can see that this
is the original one, and this is now the subdivided, but you can see the noise values are very, very, more precise. So of course, more precision
on the points here is, of course, more details. Since yeah, the attribute values are written on the point. So every point is
one value change. So let's go back to
the Shader editor. And now we have here the factor. But we can change it
for everything else. So, let's say, I want to use the factor for the
roughness, for example. And now you can see
what's happening here. Now I have some glossy
areas like here, and I have some rough
areas like here. Yeah. So, now this is basically a roughness
map for my sphere here. Just the values on the sphere
before, the noise map, the noise texture is now a roughness map for
my principal BSTF. So we just used the values of the noise value attribute on the points to define something, in this case, a roughness value. So as you can see, you
can play around very, very much with the values. And since we got
some values now, so we can do anything
we want with it. That's just the case here. You just have to
gather some values, and then you can do
everything you want to. All right. So let's just
do something else with it. We could mix the color,
for example, too. So in this case, or for now, we have only one color, but we could use a mix RGB, so we just use a mix node
on color. All right. And then we want to, let's say, want to mix a red color. With a blue color, and for the mixing factor. Yeah, so let's
connect that here. For the mixing factor, I don't want to use the slider here, but this factor like that. And now my glossy areas are red, and my non glossy
areas are blue. For example, you could do
something like this as well. All right, now, I want
to do one last thing. So for that, I just
go back to the geometry notes editor and
maybe change this a bit. I don't have that
many blue spots here, like this, for example, Yeah, that's fine. And now I could use these values
since I already got them. I could use it to displace
these areas here outwards, for example, because the
values are the same, and it's synchronized then, I could use the noise value here to just multiply the
normal vector with it, which means here, for
example, it would be zero. Here would be zero.
Here would be zero. Let's say here it
would be around 0.5. And here it would be around one, which means it would create a bump here,
basically, like this. And on every blue spot. And by this, you can create a
procedural displacement map on exactly the
colored spots here since they share
exactly the same data, or let's say the same
values on the points. In this case, the
noise value attribute. So to do that, let me just
move the things here a bit. So I want to use a set position. Because we want to move points, and you do this with
the set position node. And yeah, I want to move the
points along they're normal. So that's why I want to use a normal node here with
a normal vector output. And I want to
multiply these values with the basically output
of the color here. Yeah, because here,
it's a gray scale, so only the values 0-1
here on one dimension, basically, come out
of this output. So I want to multiply this value with this
scalar here then, and then I get my result. So to do that, I want to use
a vector math node. Here. Let's move this a bit. So the result should
be in the offset. And I want to multiply here, multiply, normal,
multiplied by this scalar. And then you have
something like this. I mean, this is pretty hard. So let's move this a bit, and we want to put something
in between here, maybe. For example, a math note, on multiply where we can adjust
the amount of bump here. So let's maybe put this
on 0.1 or something. So now I have my bump here. Yeah, maybe not that
much 0.05 or something. So like this, that's fine. All right. And now you
can see what happened. You have your bumps here
now on the same value basically as the roughness map here and the color map here. So that's what we created here. So but here is a little problem basically because when you
move this slider here up, you can see that the
noise values change. So, for example, here
when I put it to 0.63, you can see that my top here
has no blue color anymore, but it still is upwards, so it's still got some values to displace it basically with
the set position note. And the problem is when I
move these points upwards, They are, of course, on a
different position then. And by this, they gather different attribute values from their current position to
display the color and so on. So that's just because I
move the points around. Yeah. So on this position, they have exactly this
values from the noise field. And when I move them to
a different position, they have this values from
here in the noise field. Yeah, so they are
not really the same. They don't display the
same value map here, but we can solve
this problem by just gathering information from a different position
in the node tree. So to do that, there is
a capture attribute. So capture attribute note. And with this node, you can,
yeah, capture attributes, as the name suggests on
certain points in the tree. So, for example, I want to Yeah, gather information before
I change the position. So I put it in between here. So now here, my attribute
is stored basically. And which attribute
I want to gather? So let's say I want to
gather this attribute here. From the multiply node, before I put it in the vector. And when I now use this attribute output instead
of the direct output here. So let's go here back. You can see it here pretty well. In this case, it's a bit on the wrong node because the
value here is pretty low. So let's directly gather it from the color ramp
itself, like this. So now basically the value
here from the noise field, maybe let's just tidy
it up a bit like this. So now my values for the noise field come directly
out of the color ramp. Then move in that
capture attribute here. It yeah stores the
attribute from the color ramp in
its normal position, basically, without, because the set position
is afterwards that. But the attribute is already
captured here and stored, and then yeah bypassed here. It's bypassing the set position directly in the group output. And that's why it's working now because I'm gathering
the information here on the color ramp before I change its position.
Then save it here. Then I bypass the set position, and because of that, it doesn't matter where
the points are there. Then you see that it's
always like this, so the points don't change
its values anymore, although they are
moved up and down. So let's yeah, put that
here, for example, like this, on 1.3,
0.13 or something. And now you can see
what we have created. So let's maybe push
this pit to the side. So now this is a construct of the multi usage of a noise
field value, for example. At first, we created the
general noise field, and then we used that here for a movement
basically set position. So we moved the
points up and down. Depending on their values
on the points itself. And then the order is a bit
different as we did it, but for the overview, we set the different
position for the points. Then we used the attribute here bypassing the set position. Let's change it here to the
shader editor that we can use it here as the noise value output and use
it here for the attribute, the noise value input, and use the factor of it, so the gray scale
from black to white. To mix two colors
here, for example, red for the low values and
blue for the high values. And in addition to that, we use this as a roughness
map with the low roughness, which means glossy
at the red area here and the very high roughness
areas at the blue areas here. And with all of
these combinations, we created this I don't know, alien like or virus looking like thing with a procedural
method, basically. And the cool thing
about this is, and the reason yeah, you're doing this is
Now you can just change the noise texture because everything is based off
of this noise texture. Yeah, you can see that
every branch is going off and going in there and coming
in here here and here, and everything is starting basically here on
this noise texture. And because of that, you can now change here the
scale, for example, or move it with a let's
use a vector math here, like I showed you
in a video before, with the position as the input. Now you can move this map here, to create this motion here, and everything moves
automatically. So the height changes
automatically, the color changes automatically, the roughness changes
automatically. And you can add infinite and unlimited amounts
of other different values, which change
automatically when you move something on
the noise texture. So this is again, the
procedural method to create complex animations or shapes with a very
low input effort after you build the tree. For example, now, I have only to change this noise texture here, to change a lot of different points here
in different aspects, color, roughness,
position, and so on. So that's how you could build something like this
a bit more elaborate. But in this case, it's a very important lecture because here we come
into a creating a bit more complex shapes and animations with these
procedural methods where you can create, very nice geometry
animations like this, yeah with very low
input afterwards, and then you can create a lot of different
variations of it, since, as I've already told you, Since you got the tree now, you can create 100 variations of this in minutes or hours. And then you have
100 different shapes of this tree, basically, where you can adjust these many, many values with a
very low input that we humans can process it and
understand it more easily. That's all for this video. Thank you and see
you at the next one.
10. Proximity Grow: Welcome to the Geometry
notes beginners course. In this video, I want to show
you an example how to use a proximity effect with
calculating the distances between some objects to create
a nice emerging effect. With this effect, you
can spawn objects with little animations to create
its own and whole geometry. So let's get started. For this, I want to use the merged chariot from
the Lo Poli Western pack, so you can do it with the same
model or a similar model. This model was suitable
because it had a lot of, yeah, little parts like the wheels, the windows, the door, and so on, which you can use to create this
kind of effect. All right, so now to start, just open the
geometry notes editor and create a new group here. So close this and then
we are in the editor. Before we start, I want to separate this object
here in its components. So maybe let's make
this a bit bigger. When you go to the edit mode, you can see that some of
the objects geometry is, yeah, connected to
its own geometry, like this window, for
example, you can see it here. It's yeah not connected to
the wagon body, for example. So I want to separate these
parts as individual objects, that it's easier to control its behavior because they have their own
location and so on, because they are then objects and not just
parts of the geometry. So to do that, I want
to use the behavior or the attribute that they are connected to the parts here, for example, this point, is connected to that point
and to that point, and so on. So this one here, so these and to select linked objects
which are connected to other objects to just
hover over something, for example, a point and
press L on your keyboard. You can see here, this is
the select linked shortcut. Can click on something
and then go to Select, and then you can, for example, go to select Linked
here at the bottom, and then for example, select linked geometry, and
then you have it two. And when I now move this, you can see it's only
the geometry here. Maybe let's try that
one, which is a linked. By this, you can separate
it in these parts. And to do that, I want to just select
everything here with A. And now I press P, which is the shortcut
for separate. So you press P, and now
you can separate by certain attributes or
certain things they share. And here, for example, is the by loose parts option. When you click this, you create a lot of objects. You
can see that here. I created now many objects, 86 or 87 when you count this 12, which now are the connected
parts of this wagon here. Now everything is
its own object now. But when I want to calculate the distance between these
objects and something else, for example, a controller, there is a problem
because you can see that the origin here is the same for every object
because this was the origin of the
original model, the merged model here. So to change that, again, I'm going to select
it or just press A. And then you can do a
right click and then set the origin to the center of
mass on the surface level. And when you click that,
every point now will be at the average surface amount
of the object here. Yeah, for example,
so this is you could imagine it like like
the weight point of it, the center of mass. All right. So after you did that, now you are good to go, and the model is prepared now. You can see every little
object now here has its own object or
is its own object and has its own center of
mass and its own origin, where we can calculate
the distance from then. All right, so let's proceed
with the geometry notes tree. So what I want to do is, I want to give
every object here. So every little object
here, the same modifier, the same geometry
nodes modifier, because they should behave in the same way depending
on their own location. In this case, I already
did it because I gave the original
model the modifier. And then I separated them, so they have exactly,
you can see here, no matter which I choose. It's always this one here, always the geometry nodes. We could call this proximity emerge or something like this. But for example, if you haven't done that
and you separated it before or before you were able to put
the modifier on it, I can quickly show you how to apply modifiers to
multiple objects. For example, if you
have five objects here, and you give this one
here the modifier. For example, like this, and you want to give it all of
these objects here. You just have to select
all of these objects with the object with the
modifier as the active. And then you can just open
this little menu here, copy to selected, and then every one will have
the same modifier. So you could do this as well. Just select one of them give it a modifier and
then select everything else, and then they will all
have the modifier. But in this case, I added the modifier first
and then separated them, and by this, they have the
same modifier to. All right. So now let's start
with the real thing. Let me make this a
bit smaller for now. All right. So at first. So in general, I want to scale things up and down
because I want to, for example, I want to move a
controller, to the object, and when it's close enough, the objects will grow
basically to full size. Yeah, each individual. It will start with
here, for example. It will grow and then this
part and then this part and then all of these individual
things here and the wheels, and so on, everything
will start to grow at its full size. So, the motion I'm searching
for is basically a scale. So let me just use a
transform, for example. Where you can scale things. But here we have the
problem that you can see this input here
cannot be individual. And maybe I want to have
individual properties, which I want to alternate on one object or add a random
value and stuff like this, and that's not really
possible here. So to be more flexible, I want to change all
of the objects here to instances with
geometry to instance. And now they are just instances with their own
geometry here already. And now I can, for example, use a scale instances note, and here we have
these diamond plugs. And this means that, yeah, we can use multiple
values here on this plug. And so this is now, le bit more flexible here in
scaling things up and down. So as I already told you, I want to have a controller, which I can just move around
to scale them up and down. And let me just add
a empty object here. A empty object, for
example, a sphere. It doesn't matter
which empty object, it's just the display. You can change it here at any time to an
arrow or whatever. But in this case, because
we're working with proximity, a sphere is pretty
suitable because you can see the proximity with this
lines here, for example, you can just decide which radius you want to
have or which diameter, and then you can approximate the radius where you will
influence the object. All right. So for now, let's leave this at one and just out place it,
for example here, or maybe let's put up a
bit more here that we can see what's happening here when we do something
now in the modifier itself. So, now, what I want to do is I want to make a
connection between the distance of
this object here. So the empty object,
the controller. I mean, we can just
call it controller. Let me just search
for it, empty. And we can just
name it controller. And it should be
here at the bottom. And let's just drag the
object here in our modifier. Now we have the data of this object in our
geometry nodes tree, and now let's just use another object info
node, object info. And I want to use now the object info of
every object here. But the problem is they all
have the same modifier on it. So now I can't select one of
these objects here because then it will be
exactly that object and not every object itself. And for that, you can
just use a object, a self object node, and this has an object output. And this selection here
has an object input. And when you do
this, Every object now will reference
itself with this node. So for example, the
location here is exactly the location of itself because we made a
connection here between the self object node and the selection
for the object info. And now this is pretty
practical and pretty handy because now we
can just reference every object itself
within this tree. All right, now we
basically have everything, and now we can
start to calculate the distance with a vector math. Put this on distance. And now we want to calculate
the distance between every object here basically
and the location. So the location of
every object and the location of the
controller here, this one, and the value of it, I mean, we can just plug
it in to see what happens. Now calculate the distance
between every object and the controller and
just use this as a scale. And everything is very big now. So why is that so? And when I move the controller, it's behaving a bit weird. I mean, but it's not really, it's doing what
what it should be. So the problem here is why
it's looking so weird, we're calculating
just the distance and use this distance
as the scale, which means if I'm
far away, Yeah. The distance is pretty high. So let's say here the
distance is eight. And that's why the distance is so high because we're scaling
now everything to eight. And when I'm very close, the distance, for example, of this wheel is not that big, let's say it's a 1.5. So I'm scaling it to 1.5. So the further I'm away, the bigger it gets, and that's not really what I
want. I want the opposite. So when I'm
approaching an object, then it should appear. So to change that, we can use a float curve. Which is a very handy node here. With a float curve. I can just add it
the way my values here are distributed later
on when they come out here. For example, now currently, I'm on a 11 coordinate
system here, so I've just remapped it to 11 already just by
adding this note. So now it doesn't matter
which values come in here. They're going to be remapped
here to maximum of one. So now the maximum
scale is basically one. So you can see that if I'm
approaching something, it's going to scale down, and if I'm increasing the distance, it's
going to scale up, but only to one because this
graph here is only on one. And we want to edit this now that it's behaving
like we want to. So, for example, currently, I'm at this stage here
with the scale at one when I'm away and scale at zero
when I'm very, very close, and I want to change this now because I want the opposite, and that's why I will just grab these points here and
just flip them by this. And now you have the
opposite effect that you have always to imagine
that this graph here, So the length of it, the x axis is the distance. Here you have zero distance and here you have one distance. And now it's like this. If you have zero distance, just select something here. If you have the zero distance, you have a scale of one, and if you have a one distance, you have a scale of zero. But now we just changed that. So in this case now, you can see a low distance here, zero distance now means
a high scale of one. So now you can just read this as zero distance and one distance. And we are now have
this zero distance with a high scale and now decreasing the scale
as we move away. And now we just inverted
this graph basically. And now you can see when I'm
moving over my object now, now the things start to appear as I'm hovering
here over it. And that's how you can create
this effect basically. We have just added the curve now more that it's better
to use and to see. But in general, this is how
you create this effect. It's not that
complicated at all. You just have to
calculate the distance between an object
and the controller, and then just remap the float curve here
to create the scale, and then you can have
an effect like this. So what I want to do at first is I want to increase
the length here because a scale of one or a distance
of one is not enough because my object is so big
that I can't get everything to scale one at once. And so that's why I
want to increase. So let's just change it on
the x axis here to seven, for example, and then
just reset the curve. I reset the view at the curve. And now you can see the motion here from
scale one to scale zero. Let me just select this here, is now on a level of
seven units distance. Let me just go to the side.
You here you can see that. So now I have to move very
far away that it's away here, and yeah disappeared at all. So now, for example,
I could use a three 0.5 radius here that I
get my distance of seven, which I have said
here, the x value. So here is my influence area
basically of the object. Oh, no, I have to put
it on seven here. Now, that's the real thing.
That's not the radius. All right. So now you
can see here when I'm entering or when the objects here are inside of the sphere, you can see that they are now gone completely and
scaled to zero, and that's why they're
not visible anymore. But now we have a problem here. So this is in
general, very good. Now we can see where the
influence area is and so on. But you can see here that the objects are
never fully Yeah, there on scale one,
because, of course, I have to here, get to the origin. This origin here is my target. And for example, if I'm
moving to that origin, only this one object
is at scale one then. So I have to increase the radius where they are
at, yeah, size, basically. And I can do this by just
changing this graph here. Because currently they are
only at one at zero distance, which is not that helpful. For example, we could say they are already
at full scale at, let's say, 3.5 units. So when I'm now, you can see when I'm now
hovering over it, everything is at one now. And when I'm getting as
far away as 3.5 units, now they start to disappear. And this is how you can create a simple effect already
by just doing this. Yeah. So at 3.5, distance to every object here, everything will be at scale one. So now you can create
this emerging effect, for example, here, where
everything starts to grow. Basically, every part of the geometry here
of this chariot. And this is, yeah, how the simple version of
this effect would look like. You just move the controller to scale everything up
and down like this. And you can do it, of course, several directions
because of course, when you do it from the front, it will grow from here, You can grow it from the
back if you come from here, so this is directional. You can grow it from the
right to left, and so on, it just depends on
the distance here of the object or
from top to bottom, like this or from bottom to top. You just have to move it in the direction
because it's always the calculated distance between every object here
and the controller, which results in the scale of the individual
parts of this object. And if you want
to do it a little bit more advanced and
more dynamic and, yeah, cool looking, then you could make more
changes in this curve. For example, let me just
increase the y axis to, let's say, 1.5 or something. Let me just rest the view. So now what's happening here
is now here is the line. I want to hit with my final version or the
final result of the scale. So this part here should be
at this position because this is the threshold
where it's at scale one. So I want to keep this, and I don't have to
be this far away, let's say on three.
This is enough. But here should be a line
where it's on the scale one, because this is the distance, how large my chariot is about. Otherwise, some parts
would be scaled up, and other parts would
be almost scaled up and then it's not
uniform anymore. But we can fix this later. For now, I just want to
show you that you could, for example, make a
motion like this. When you start here,
If you start here, you could make a motion
like this, for example, where you go up and down and
then end up in this one, which will look like then
that the things are scaled. Too far away. So they are too big then, and then they start to
shrink again and start to grow again and shrink until
they hit their perfect size. And this motion will make them look like they are a
bit wobbly and not that hard like rubber bouncing in its yeah, static
form, basically. So let me just demonstrate that. So, for example, let me
just rebuild that curve. I just did like this
and here and there. And then here I want to keep
it very straight at the end. So I want to have
it here at one. And then let's just be on, let's say three and move, then this a bit far away, and so on, right. So and then when I'm moving
this now, you can see that. So now you can see it
here, for example, if you look at this front
part here, it starts to grow. So this is here too large. This is not a one scale. This is a 1.3 scale
or something. And when I'm approaching
it with the object, what basically happens is your Yeah, driving this
graph to the left. So it's basically
the same thing. You can even imagine it because I'm driving here from the right. So you can imagine this graph here just being driven
from the right to left. So it's starting
to grow too large, and then it's going
to shrink too low, and it's going to grow
again too large a bit, and then it's going to
be in its final form. And it's the same thing here. So I'm going to approach
it too large, too small, too large, and
then it's going to fit in at the third swing here. And by this, let me
just delete that. So by this, now, it looks way more
dynamic when it start to build, like like this. Yeah, you can just form the graph in
whatever shape you want. For example, if this
is too hard for you, you can flatten this a bit, that it's not that bouncy, and then you can always try how it looks like, this a bit more. Yeah, not that intense. So you can always approach from a direction
and to see how it builds up with this
little animations. Yeah, so this is
basically a procedural, emerging animation where things are three scaled or scaled
to the final form here. And you can add another thing since we
already built this, it's not that much work to change it because you can
just copy it basically. So let's just copy that. This whole motion here, I can just yeah copy this
and put a rotate instances, for example, and with this, I can rotate all the parts here. So when I just plug
this in the rotation, then you can see
the following here. So this is basically a
float into a vector here. You can see the
conversion happening. It's gray and then
it's becoming blue. So this is basically
pretty unpolished, and I'm converting a
value into another value, but in this case, it's not that important because
the rotation for me, doesn't matter
anyway, it just adds a little bit of movement here. So if you want to
make this very tidy, you could just convert
it into a vector with, combine X YC and so on. But in this case, which kind of rotation is not that
important in this case? I just want to give
it a little movement. So now here is my graph, and when I'm moving this now, can see that you can't see anything because this
graph here is wrong. Because in this case,
now I want to have the rotation only happening
in the last part here. So the graph I'm looking for will be look like
this, for example. So when I'm far away, it should rotate a bit, and then when I'm
approaching it, it should be rotated finally
in its non rotation, so rotation zero pretty fast. So let me just
change this graph. You can by the way delete these points here by
just clicking the X, and here I want to rechange
it into this here. Auto handle, all right, and then maybe do
something like let's say like this maybe this
is what I'm looking for. So you can see that here. The objects will rotate, and now you can edit this graph in whatever
way you want to. You just have to keep in
mind that on the right here, you are at the
high distance area and here at zero distance area. So in this case, you want to
be at zero rotation here, so a very low y well you here on this graph at about
half or something that when you're
halfway to the object, it's already rotated
in the correct way and only scaling up and down a bit in this
case, for example. And as you can see, you can create pretty
neat appearing animations already with this bit of geometry notes tree with a rotating object emerging or
spawning here in its place. And it's pretty cool, and it's not that hard
actually, as you saw here. You just have to keep in
mind what you're doing here. You're just connecting basically a distance to certain values, in this case, the scale, and in this case, the rotation. And you can use
another thing to, for example, you could let it
emerge with another scale. For example, that it's pretty distorted on the Z
axis or something, and it's going to be
scaled down when you're approaching with the
controller or whatever. But this is pretty neat, and you can play
around with it in a pretty various ways and create cool emerging
effects like this. So I hope this was very helpful. As you saw, it's not
very hard, indeed. Just a couple of
notes as always, just keeping things simple, and good luck with
your three D projects. That's all for this video. Thank you and see
you at the next one.
11. Paper Effect: Welcome to the Geometry
notes Beginners course. In this video, I will give
you an example on how to create a cool paper
effect with every object. This will be a combination of geometry notes and a bit of
shading in the Shader editor. But at first, let's do
the geometry stuff, and then comes the
shading part of it. So at first, let's select your object and open the
geometry notes editor. You can close this and create
a new group like this. So at first, because I want to create something
which looks like it's been made out of
paper, or thin cardboard. I want to create
an object which is a bit non symmetrical
and a bit off. So a bit crooked here and there. Since it makes it more
realistic because when you fold something out
of paper or cardboard, it will not perfectly be mathematically parallel
and everything. That's why I will
approach this first. And this is pretty simple. You only have to move points around randomly
a little bit. So for this, I will just
use the set position note. Which moves points
around basically. And here you can
move points now. But of course, here you can
only move them uniformly. I want to move every point
a little bit different. And for that, I want to want to influence it with
a random value note. To do that, I will
just add it and use the vector out an input because I want to
randomize vectors. And then I just want to
randomize a little bit here. To make this even because I have to use a minimum
and the maximum value, and to make this easier
to handle or control, I will set up a little
setting here where I only need to tweak one
point here or one node. To do that, I want
to use a multiply a math multiply node, like this. And then I just want to
connect the value in the math multiply and multiply
everything with minus one. And put this into the minimum and then just connect the
value to the maximum. Here, in this case, it doesn't really matter that
I'm transforming here a float into a vector since
it's totally random anyway, and I don't really care in which direction they're
going to be spread out. And when I now connect
this value to the offset, then I can change
here this value. And this value here now changes the random direction
basically or the maximum random direction
in which the points move. And here we created something where I control the maximum and the minimum
at the same time, and they are equally high. So if I tie, for example,
something like 0.003, then I will move
the points slightly around in directions
which are equally long. So when I now go
to the edit mode, you can see that I moved it a little bit here
on this corner. You can see here was
the original point, and now the point is here, and you can just tweak this value if you want to
increase or decrease it. So here you just randomize the position basically
a little bit. But let's just keep it
on 0.004 or something, where it's a little bit
visible like this. All right. So now we got our
little randomization, and now everything is a little bit off and a
little bit crooked. And now we can continue
with the real part. So to create this effect,
this paper effect, I need some edges to
be open where we can see the seam of the cardboard
or whatever or the paper. And to do that, I want
to split the edges. Maybe now it's a good
time to switch from this cube to a monkey geometry, for example, because
here you can see a little bit more
about this effect now. So let me just put some
nodes in between here, and it is the split edges node. So split edges. And with this, I just
split the edges. I just open the edges here. And what I just did now
is I split every edge. So basically what we
have now here are just individual phases which
aren't connected anymore. I split every edge. So now we have only
individual phases here, no connections anymore. I will change that later, but for now, it's
like this. All right. And now I want to
extrude here these individual faces with
the extrude mesh note. All right. This
looks a little bit messy, but it's all right. At first, I want to put this
value here very far down, let's say 0.004 or something. So you can see here now they
get extruded a little bit, and let's just keep
it all individual. In this case, it's not that important, but
later it will be. So this is basically how you can create
something like this. You now created a
shader or not a shader, but a geometry where you can see inside a little
bit of something, and it looks like you
really have something like a cardboard here where
you can see in the seams. But it's a bit
problematic that we can see every single edge here. Because, of course, when
you fold something out of cardboard then you won't
have that many seams. You will have seams
here and there, but not every single
phase will be a seam. So it would be way
more realistic if you only have like 20% of the seams actually
visible and the rest not because you often just fold cardboard and
you don't cut it. So let's say you have
something like this. Like a cube, then maybe
you only cut it here, and the visible seam
will only be here. And here on these edges, it's just folded and you
don't see any seams. So that's not very realistic, and that's why we're
going to change it now. So to do that, I
just want to select basically the angles
which I want to cut, and then I will use the split edges selection plug here to only split the
edges I want to split. So I want to isolate
basically the faces. Let's just zoom in a little bit, and I can do this, for example, by calculating an
angle because let me just show you that when
I just add a cube again, and let's say want to
have a subdivision here. The problem here is, let me just move that upwards at one thing. So the problem is, I am creating cuts as well
on these parts here. That's a bit problematic because every flat phase basically has its own cut because
every phase was cut. And it's not that realistic to have cuts all over the place, especially in flat regions. So basically, I want to have flat regions that they
don't have seams, and on flat areas, it's not visible only where the angle is
higher like this. So here, when you have
here a visible seam, it's way more realistic
than to have a lot of visible seams on this
flat face because it wouldn't make sense when
you fold something to cut through flat surfaces which
are just plain cardboard. So let's get into it.
We just delete that. And now we're going
to proceed with selecting basically flat areas. And excluding them then from the cutting process or
the split edge node. So you can do this with
the edge angle node, and we want to use the
unsigned angle plug for this. And here you can just,
for example, tell. Let me just move this
a bit like this. Here you can just tell which
angle you want to have. So for example, I will
use a compare node, and you can use here, for example, a comparison. Now you can choose an
angle here in radians, how big it should be that
the edge gets split. And when now increase
this value here, you can see that
more and more edges are not split anymore. And of course, it's
starting with the edges which are very flat basically. Because when you hit
this angle threshold, then you will exclude
this basically. So what you just built here, pretty simple is you have the
edge angle of every edge. And then you ask it, is it greater than, let's say, 0.3, and if it is, then this will be a yes. So this is either
a zero or a one, and every edge which is
greater here will be a one, and it will get split by this. So but since I want a
bit randomized pattern, and not every angle which is flat should be just
excluded from it. So sometimes I want to have
a cut on a flat surface. So it's a bit randomized, so it's just the way it
looks the most realistic, want to add another
reference where blender or the split edges modifier
operates a yes or a no, and I will just build this now. So at first, I want to use
the index of the points. And then I want to randomize these indexes or these indices. Because when they're
not randomized, their pattern is
way too uniform, and I want to be I want to have a total random distribution
on the object, and you can do this with
a random value note. On integer since
indices are integers, and you connect it to the ID, and now you can
basically set here the range for the indices. So let's put this 0-10
to make it simple. So now my indices are
either zero, one, 2345, six, seven,
eight, nine or ten. So 11 different things. We could do it like
this, for example, and then it's 1-10, but let's keep it that way. And now again, I want
to have a compare note. We can steal this from below
and use this with integer. And then ask it, for example, is it
less than or equal? And then we'll use this result? And then I want to calculate
these two possibilities, either the angle is big
enough that it gets split. And additionally, with this, I just build something where
I can decide basically, how much percent of
the angles which are sharp enough should
have a split edge. And I can do this with a math lean when you connect it here and you
connect these both results. It will only output a true
value when this and this, so plug one and plug two, when they both are true. Then it will be split. So by this now, let
me just explain that. By this, we just
built something where we can here decide an angle. So let's make this angle
pretty small, let's say 0.1. Radians. So here
we have an angle. If this angle here is reached, if it's above it, then
this one is true. Only edges which
are sharp enough or high enough will
get split at all. And all of these sharp edges
because 0.1 is pretty small, so most of them will
be selected basically. And then here have
a second selection. Of these, which have
a high enough angle, all of these now
go through this, and here they have to have an integer less or
equal than this number. And when you now increase this number, may
you can see that. Now, when I start to turn on
these numbers up and down, you can see that more and
more get selected basically. And on ten, everything will be selected when it
has the correct angle. And when the angle
is not too flat. Yeah, for example,
take this here, this top when I just I mean, currently, you can
see it's split, but when I move it
down, at some point, it will disappear because it, the angle is not high enough. So this angle here is now
below the zero point radiant. And by this, it will
be deselected anyway because this only counts
if both are true. So in this case here, you can see it's deselected, and it doesn't matter
now what index here is because it's
just disabled by this. And every other thing here will now have an integer
as its index, and here you can
now basically dial in how much percent
you want to have. We want to split
Do you have ten? Do you want to have ten
or 20 or 30 or 40 or 50? So let's say I want to have here something pretty high,
so let's say eight. So now everything will be split when it's,
when this is true, and this is now about 80%
of the points or the edges, and now you can see that
most of them are split? But not all of them,
but most of them. And when you reduce this,
for example, to four, then only a couple
are now split. So let's say five. A half are split and about half are not there,
for example, here. This is not split, this two, this two, this is here, and this is not split either. So although they have the correct angle,
they are not split. And by this, you have
a more realistic look because everything is split, which has the correct angle. And so this is way more
realistic than it was before. And the cool thing
here is you have now a sat slider here too, so you can just
randomize the pattern. When you say, Oh, it's not cool, that here,
these are selected, you can just randomize the
distribution pattern to change the assignment
of the indices, and by this, you just change the cutting
pattern basically. W I now turn this.
Maybe you want to have that here is
not that much split. You just click it
a couple of times, for example, Seat seven. I have only one split here. Maybe this fits more what
you want to see. All right. So this was basically already
the geometry part of it, and now we'll come
to the shading part, which is important too. But to be able to come to that, I just have to assign
some materials here. So at first, I want to use a set material note and
a second for later. And for example, the extruded stuff should
be the outer paper. So the parts you can
actually see very well, the surface like this
and this and so on. This should be the paper. So let me just call this Paper outside, for example. And then I want to
create another, which is paper inside, and I want to create
here, for example, or select paper inside
and here paper outside. Because, for example, the
paper inside is something like you can see where the cardboard was
glued together and so on. Yeah, so it's darker and
has holes, and so on, and the outer surface is just
the plain paper. All right. So the extruded part shod
be So let's go here. So let's just select this material for the outer
parts of the extrusions. So when you have a face
here and you extrude it, this direction, then this
here is the outer surface. So I want to have the paper outside here on
the outer surface, and the paper inside, let's go here, should be
the side basically of it. Which is here and here. So this are the sides, and this here is the top. And you want to
have the cardboard visible here and the
top visible here. Yeah, that's just how
when you fold something, it looks like that. All right. So now we assigned
everything like this. And it's not that big tree. It's fine here, so it's
not that over complicated. If you want to, you can make this a bit more easy to read. B make a little frame
around everything. So when you select
something here. Let's say I want
to select these. And then with Control
J, you can frame them. And then when you press F
two, you can rename them. So let's say this is the crook geometry with the input set position
and this randomization. And this year below would be the edge
selection, like this. And then here, this is then
the cutting edge part. Now, this is a bit more tidy, and you can read what's
happening here. In these areas. All right. So now
we can proceed with defining these paper materials. For that, I just want to go to the material viewport here, and maybe I want
to switch in EV on the ambient occlusion to see the shadows a
bit better here. All right. Now let's
proceed with the shading. All right. So yeah, let's start with the paper
outside, I would say. For the paper outside, I at first want to create a
noise texture because I just want to have a little bit
of paper surface color. So let's just use a noise texture and just use
the factor at first here. Something like this. Of course, this is a bit too soft here. But yeah, it's fine. So let's make this
a bit like that. Something like this, yet. It's your choice
what you want to do. And then you can
use a color ramp to define what gray and
what white here means, so let's just change this
to a bit more bright. Yellowish thing,
something like that, and this to a little
bit darker thing here. Maybe something like
something like that, and maybe increase
the roughness a bit to 0.75 or something. All right. Now I've
created my paper, maybe a bit brighter. It's a bit harder. All right. So this is okay, I guess. Like this. And now you can already see that you can see now the white spots, which is then the
paper inside part, which comes in a minute. But let me just create a noise texture for
the bump here as well because for now it's
very glossy and very draight. So let's bring some kind
of texture to the bumps. For that, I want to use a
bump map here like this, and I want to use a
noise texture as well. For the height.
And yeah I want to have very little grains
here, basically. So let's put this to ten. It looks like this, and then make the scale
maybe a bit higher, let's say 11 or something. So this looks all right, but it's a bit strong. So let's pull it back
down, something like this, maybe or maybe this
even too strong, let's say 0.26 or something. So then you have a bit
let's view it by this. Yeah. So by that you
have a little bumps, and it looks more like paper
or cardboard. All right. So the first shader is finished. Now let's proceed
with the second, the inside shader, basically. So let's look at here. So to do that, let me just zoom very
far here on something that I can see my geometry here. So what we're now coloring is
basically these areas here. So what's white
currently organized. Put this down, you
may see a bit better, the black areas here. I mean, you can just
give it a plain color. It will be fine, too, I think, but to make it more realistic, I want to create the illusion of cardboard inside material. And my method is just to
use a Voronoi texture, which I modify a bit, and then it will be fine, so it's very tiny. You won't spot it
the difference, but yeah, it's a bit more realistic if you're
a bit closer. Okay, so let's add the Voronoi Voronoi pattern
and use the distance, which is basically y, which are a little circles. When I increase the
scale very far, let's say to 1,000, you can see how a varni
texture looks like that. And when I now, for example, take here a color ramp, And then I want to use here, let's say, dark brown, a dark brown color, something like I don't know,
something like that. And here, instead of white, I want to use a
more light brown. Maybe something like this. And then move them
closer together. You can see I create some
kind of round shapes here. So this looks a bit like the
inner part of a cardboard. I mean, of course,
it's very close now, but this is a microscopic
view on this, and you can create or play
a bit around with it, and maybe make
this a bit larger, something like that, or make this the scale smaller to make the circles
larger and so on. And it looks a bit weird because the randomness is pretty high when you put the
randomness to zero, you can see that that the position here is
basically on a grid here. Like this. And now
it looks a bit more like like this cardboard
inner part ps 1,000. And now you can just play a bit around with it until
you're about happy. So when you say,
Okay, this is fine, you make this a bit darker
and this darker too. So like that so from the far. When you look a more far away, you can't really tell then
if it's not or I mean, if it's correct or not, Example, on on this distance here, it looks pretty realist, they get like a
cardboard inside, the little holes from the small cardboard
cells glued together. And I just want to use
the same thing here, the same output of the
color ramp for my bump, because then it will
drop some shadows here, which makes it more realistic. So let's go on here, and maybe I want to reduce
the roughness here too on something very high
0.85 or something. So now let's just add a bump. As the height and use
this in the normal. And now I'm dropping some
shadows on here too. And now it looks a bit too dark. So let me let me fix this a bit by making this not
too dark. Like that. All right. So this
looks fine to me. Yeah, from this perspective,
it looks all right. And of course, the
bigger your holds are, your split edges, extrusions you are,
the more you see it, but in general, it's
pretty okay now. And now you can see
the effect which I was going for to
have something which is cut a bit and then
extruded a bit that it looks like it was folded
out of paper or cardboard. And let's switch to
cycles, for example. And then yeah, just use the
default blender scene here, and maybe let's use
de noising here. All right. Then you
can maybe see a bit. And then it looks like
this here, for example. Yeah. So it looks a bit like
it's made out of paper. I mean, this shape
here is pretty edgy, and it's a very unusual
shape for paper in general. But yeah, the effect is
definitely recognizable. Now you have this
effect, basically, which is in this
geometry nodes tree. With this paper outside
and inside and everything. And now you can easily create a little scene with
this geometry note. Let me just go to the preview
back to the EV preview. And now I can show
you how you can quickly create a
little paper scene. Since you have
everything now at hand, let me just hide this. And then, yeah, let's
start with a plane, and add this modifier,
we just created. I mean, we could rename it to something useful,
for example, paper effect, and then you can start building a
house, for example. So let's do it like this
and then extrude it again, and then like this, for example, and then let's create
a little chimney, like this, move it upwards, like that, and so on. So something like
this, for example. And then we could add
some doors or windows, and you can just cut
something inside it. So let me just switch
back to orthographic. So for example, if you want
to have a door or something, I can just use the
knife to which you can access with the hot
key K. If you press K, now you can click
and click and click. And then close it and then
confirm it with return. And now you have created
a bit of geometry here, which you can now just
extrude, for example. Yeah. But that was just
an example, of course. So for example, a door, and you can be a bit crooked as well since this is
made out of paper. So let's just create
a little door. And let's create a little
doorknob or a little handle. And then you can just
extrude it outwards. And if you're a bit
confused about this here, this is of course, because
the points are moved. If you want, you can disable this effect in the edit mode, and then you will only see it in the object mode when
you tap out of it. So let's just do this and
then create some windows, for example, so K, like this. By the way, if you double click, it will automatically close
to where you started. So when I do this,
click, click click, and now I double click here, it will automatically
return to the first point. Yeah. So now we have
created some windows. Let's extrude them inwards, create a little face
with an inset with I, and then E again for extrude, and then you created
little windows on your paper house,
just like that. And from now on, it's pretty easy to create simple things, so let's say I want to
create a little balcony. Just like that, pull that out, and then you can view it
it from above, and so on. And by this, you can create things out of wood or something. Ops that was wrong. For the little bars there. Then extrude these as well. And then I don't know, yeah, you could just extrudes, and so on, so it's
just from here, like this, and then you have
a little balcony there. And of course, it
needs a door as well. Something like this. And so on. Yes, so, you can just keep cutting things
in there and so on, and then you can create very fast little paper figures out of it very efficiently. So it's very fast to do
that when you once cut it, and when you look at it
here in the EV view port, for example, it looks
very nice here. And yeah, when you, for example, take a look, I don't know
here at this window. So it looks a bit like
you just cut something out and glued it together and made a couple of
mistakes and so on, for example, here like this. And this looks pretty nice, e. So it's a bit
like a puppet house, made out of
cardboard, and so on. So this has a pretty
sympathetic look. And is very quickly editable. Yes, so you can either create
or edit the tree here, for example, increase the crooked points here
and increase this. I mean, of course,
it's very hard here, but you can see that you
can decide how deformed, everything is or when you
want to reduce it a bit, you just make this to 0.003, and then it's a
bit more straight, or if you want to increase the amount of edges
which are cut, then you can just increase this or decrease it
to make less cuts. So for example, it
depends on which object, of course, you're
operating with. But here, in this case, I
would say a bit more is maybe better like this And then it
looks a bit more realistic. And if you're not happy
with a distribution, you can just click on the
seater a couple of times, click click click
until you say, Oh, now my window here looks
pretty nice, I like that, and so on, and then
you can render your scene or just
keep on building. Or you create a tree
or plants or something like this here since
this is just a modifier, basically, a geometry
node modifier. You can just create a simple
plant or something here. You can just use a let's say
plane here, scale it down. Scale it down here
too, so pretty small. And then you can just
create something like this, just a little, I
don't know, plant, whatever tree like this, and maybe you want to
extrude it here and there, something like that. Or whatever. You can just
play a bit around with it. I don't know, yeah,
this is a bit ugly now, you, you get it.
You get the effect. You can just add
it to it and then yeah, this is nice and so on. And maybe you're now thinking, what if I want to have separate distributions
here of this pattern. So when I now, for example, say, my tree is cool and
my tree is nice, but my house distribution
is not that nice, I don't like it, and you now
change this seed value here. Then of course, everything changes since it's
the same modifier. And resolution. There is a solution for that. Be everything which is in
this modifier here is, of course, globally active for every object
with this modifier. Of course, you could just
create copy this modifier, for example, paper effect house. And then you duplicate
this and then you say paper effect tree, and then you give the tree the tree and the
house, the house. And then this is
only for the tree. And this is only for the house. I mean, this is a
work around too, but there's a better
way to do it. You can just make it
individually scalable. And you can do this with just connecting things
to the group output. So maybe I want to
detach it here. So the group output here, When you plug something
in the group output, it will appear here in
the output attributes. For example, something
you want to have for individual
objects like the sat, you just connected here, and then it will appear here. And when you do
this, this number here is now not globally active, but for this particular object. That's because now you can basically select
it from the outside. So this modifier here is only active for
this object plane. I mean, you could
we call it house, and we could call this tree. And for example, on the house, I want to have a seat of three. And on the tree, I want
to have a seat of ten. And when I now
switch between them, you can see it's individual. Now, now you can select
individual numbers, and that's just because you re routed it to the group input. So the group input here, when you plug values in there, they are not globally anymore, but on the individual
object only. And now you could start
to re route other things. For example, this value here, you could re route it too, if I now just delete and
just select this value. And this value. Now my value here
is here, basically. But again, individual
before it was 0.003. And on this, let's
say, I want to have it more crooked, 0.005. And now my house is more crooked than the tree.
You can see that here. If I switch it again
back and forth, you can see here, tree is 0.003, House is 0.005,
or I want to have it really crooked like
like this or I don't know, yeah like like this, and then it's very broken. Yeah. And now my tree is 0.003, and this is 0.04, just
for example. All right. So this is how you can re route things to the group
input, and by this, you put them basically out of the globally modifier itself and have it individually
on the object level. Now you can create little paper cities
or little buildings or scenes pretty simply with
this geometry notes effect, with this a bit crooked
appearance, selecting edges, cutting the edges, and assigning two different materials
to the front, so the top or the side of it, and then in the shader editor, let's say the inside is then this the dark
cardboard part, Yeah, these inside parts here is then the paper
inside assignment, and the paper outside
assignment is this brighter, more plain color. And by this, of
course, you can play with the colors as
much as you want to. Yeah, like this. I don't know. Yeah, what whatever
you want to do. And then you can just create exactly this
cool paper effect, and you can experiment
a lot with it, and you can make alternatives
to it or add other things. But this is a very good base of your paper model appearance when you have three D objects, and now you can have your
little paper city or scene. That's all for this video. Thank you and see
you at the next one.
12. Cake Diagram: Welcome to the Geometry
notes beginners course. In this video, I will
give you another example for the usage of geometry
notes by showing an approach to
procedurally model a cake diagram to display
data, for example. With this topic, we
will take a glance on motion graphics in
Blender with geometry notes. So let's get started. At first, I want to delete this cube geometry or you
don't have to delete. You can just override it. Let's just open the geometry notes editor,
create a new group, and then we can just detach the input geometry that we have, basically an empty
geometry notes tree. So let's start with an arc. And this is here
right at the top, but it's under the
curve objects here. So you can just click
on rc and connect the rC to the geometry
notes output here. The rc is, yeah
basically a circle, which you can adjust a bit
with these values here, and you have a start
angle and an angle, an end angle, basically, where you can define the shape
of the circle like this. Then very important for us is the connect center checkbox. This means that the
end and the start of this arc is connected
to its origin. Yeah. So by this, you
already have some kind of cake diagram shape
here, with this. The only thing is
the resolution. Yeah, we have to take care about that because it
doesn't change yet. This means you have here
a pretty dense geometry. And when it's like this, you have pretty
sharp edges here. So let's fix that in a second, but this is how we start
with just an arc here, and yeah as a curve. So now let's begin
with the editing part. At first, I want
to fill this curve with the fill curve node, then it's just going to
get a phase basically. And then I want to extrude it because I want to do
it three dimensional. You don't have to do it. So when you only
want your k diagram to be two dimensional like
this or like a very flat disc, then you can leave the
extruding part out there, but I will include it
in case you want to do it extruded as a three D object. So just add an extrude mesh. Note after that to extrude it. And here we could I would do something pretty
flat here actually. So let's put this to
a lower value here. But one thing you
have to take care of if you extrude
something, it's hollow. So you extrude only the faces and don't keep the original
faces here at the bottom. So every time you want to extrude something and keep
the bottom part here, you have to rebuild
it, basically. But at first, let's
take off individual, which means I don't want to extrude every pacer
individually. But as a whole, like
this, that's way better. But it's still hollow
and to do that, we will just y join the
geometry of the state before. So let me just show
you that by clicking or holding Control shift
and click on a note, I can look at it in the view. But it's only possible in the Blender version
3.4 and ongoing. So let's take a look. I want to take this
geometry and this geometry, and I want to join them. And then I get
this geometry just with the floor still in there. But it's not connected yet, and that's why you have to use a merge by distance
node after that. And now they are merged. Yes, because they are basically
at the same spot here. So for example, you have here
a phase, with a point here, and you have here two phases, basically, with a
point here as well, so you have a double point here. But when you merge
them by distance, you melt them together
to one point, to one mutual point, when the distance is
very low between them. In this case, it's exactly
at the same position, and that's why it's
going to be merged. So that's the way you can do
these extrude operations. You have to extrude something, then join it with the
state that was before, and then merge it. By this, you can fix that. But there is one problem still, which is the bottom phase
is in the wrong direction. Yeah, with this phase
orientation overlay, I can see in which direction
the faces are looking, and I can see that the
bottom part here is wrong. So I have to flip the
faces before I join them. And by this, it's now
beautiful and Asia or again. So this is what you have
to do every time you when you extrude something and want
to keep everything intact. You have to join the original flipped with the extruded part
and then merge them. And by this, everything is fine and the way
you want it to be. All right, so far for
the geometry itself. So let's go a bit back here. So now, what we want to do, and by the way, everything
is still working here. I can select your start angle. So let's set this to zero. And now you have
your sweeping angle. Yeah, which you
can close and open this K diagram, basically. Then you have your radius of this whole thing and the
resolution of the geometry here. But we will now make
this automatically working with the
group input involved. So at first, let's set some parameters here for
the group input that we can access it from outside then from here after
we finished it. So let's press N to open the side menu here or just
open it with this arrow. Then under the group
input menu here, you can now add some
parameters here. I want to add a couple, which is, for example, the degrees, then
furthermore, the radius, then the start angle and then another the
material because maybe you want to have multiple of them with different materials. And float values for every
one of them is fine, except for the material. There we should have a
material plug, which is red. So you can see this
is the same as here. Now you have these
different inputs. You can now plug, and you can see them
displayed here too, so you can change these values, and they will change these input values
here from outside now. So when we're finished,
you don't have to B in the editor itself
to control the diagram, you can just control it
from outside basically. The first one is easy. The start angle is
just the start angle, so you can decide how
you want to be oriented. But here maybe there's something odd because if I'm
increasing this, you can see that it's
rotating pretty fast. That's why these aren't degrees, these are radians, which is
another unit for angles. We will fix that now with
the degrees input here. So if I'm going to plug just the degrees in
the sweep angle, for example, then this
is the same thing. So it's pretty hard for you
to tell how the degree is. Where is 90 degree or
for example on this? So it's hard to tell because
these aren't degrees. These are just radians. So maybe it would be nice
to just calculate it two degrees that you can
work with it nicely, and we will do that now. So to calculate degrees to radiance is to use
two math nodes. At first, you have to
multiply the value by Pi. You can just type
Pi in here, P i, and then it will adjust
the value to it, and then divide
this value by 180. Now when you connect that here, now you have your correct
degree number here. So for example,
let's say 90 degree, and you can see it's correct if I'm going to change that here, so you have your
90 degree angle. Then let's just take that the same way for
the start angle. So let's copy that here. Use this and use this. And now my start angle has
the correct angle as well. Counter clockwise,
if you're positive, and clockwise, if
you're negative. So for example, you
want to start at 20 degree or in this
case, -20 degree, this And then you want to
have it 30 degree ongoing, and you can already see it here, that these values shouldn't
be differ from each other. So let's put it to -30 and -20. And this starts
here at the x axis. Yeah. So maybe you should turn this by 90 degree if you
want to start from the top. So maybe naturally, you
want to start it from here. So maybe you want to use this
as 90 degree by default, and then you have it like this. But of course, there
is a way to make this to fix this basically. We will just add 94. So you can keep this at zero, and then you will start Vertically here. Then you make this calculation
from degree to radiance, and then it will
calculate this correctly. Now you can start at minus
five degree and then go on, like this, clockwise, when
you use negative values. Let's just reduce this to, let's say 90 -90 like this,
and then you're fine. Okay, let's continue
fixing this. Maybe let's move
this a bit away. Or maybe I want to move that
more out of the way here. Okay, so let's keep it that way. Now let's fix the
density of the geometry. The resolution, basically,
because the problem is here, so let's keep it
to the default 16. When I increase
the degrees here, it will get y like this g. We have to bind the resolution
to the degrees basically, and that's fairly easy. At first want to use the absolute of the degrees
because when it's negative, it should just be a positive
number, no matter what. So it's just this number
without the minus and then I want to use the degree as the
resolution, for example. So when you have a high degree, you have a high density. So let's try that out
by increasing that. So that's fine. I
think the only problem is maybe that at a very
low degree number, you have low density here. Maybe we can see that here. So you can see here now
the resolution increasing. This is okay, I think, but maybe it's hittering too
much at low values here. So I just want to
add a bit here. So let's copy that to add. So let's add, I don't
know, let's say 15, that I always have 15 points
here or a density of 15, and then from there
on it will count the degrees to it like this. So you can decide a value which is fine for you or
maybe ten or whatever. So it should just fix the problem that you
have at low values here, no density at all. By this, you already have a bit, and then it will
increase like this. And then it should be fine. Let's keep it at ten for now, but it depends a
bit on the size of your object two. All right. The last one is the radius, so we can just
connect that here. And now you maybe, let me just disable that. And now you bound the most
relevant values here. You have now the degrees, the radius of this
whole thing and the start angle from a
vertical position on. So maybe let's keep that on two. So that's fine now. And now you can tweak and adjust it a bit the
way you want it to be. So let's say I want
it to be a bit more. Let me just be go to
the perspective view. I want it to be a bit more
smooth or round because I don't like that mathematical mathematically
sharp design here. So let's correct that here. Oh, and we have to add the
material, of course, too. So let's connect the material here all the way
to the end here. We have to set a
set material node. And this input here,
we want to connect. Let me just grab that
material we prepared and connect it here with
shift, right, click. You can create these
reroute points that you don't have that
mass here. All right. And by this, you can just bypass everything and return
to the set material, and now you can set
the material here. So maybe let's use
something here. Let's say I want to
have a red one, red, and then green and
blue. All right. That's fine. Let's say I want
to select the red one here. Then I can just go to the input properties
here and select red, and then it's red. All right. And now let's give this a
bit better look, let's say. For example, you can now
add just a bevel modifier, where we can bevel
the edges a bit, and for the bevel modifier, it's important to be not that
dense on low areas here. Maybe let's look at
the geometry here. Again. When I have
a bevel like this, maybe I want to
increase the segments a bit like this that it's more round on the
edges and not that edgy. If you want to, by the way, you can just smooth it here with a shade smooth and
set shade smooth, and then it will
be smooth here on these round corners if
you want to bevel it. Let's take a look on the side here and use the degree slider. You can see small values here, that the bevel will decrease the scale because
it's very dense here, and the bevel needs
some space to work, because it will of course, hit other edges, and then
the bevel will shrink. So when you do this
with the bevel, you will have some growing
motions when you have a very low value because then your object is not
that good to bevel. When you have a bit
geometry here at the edges. You could fix this
problem by decreasing, for example, this value here. So if it's zero,
then it's all right, I think, then it
will be like this. It will be like this, and
this looks a bit better. It will be like that.
The problem is only at these low value areas where the bevel just has
no place to be there. So the bevel starts only
a bit later. All right. But I mean, we could
just put it on five, that it's not that visible, but I think this is all right. So if you look at
it from the side, like this, then it
will look like that. Let me just disable
the wire frame. It will be like this. So you
can see it a little bit, but it's pretty well. And now you can choose
your bevel amount. Maybe you think
this is too much, too smooth, then of course, you can reduce the
bevel amount to something which fits your style. So you can decrease it a bit, that you can see the
shine on the edges, but it's not that smooth and still sharp enough. All right. So now let's animate
it a little bit. So when you look at the geometry notes here,
you can animate it. So maybe let's start
at zero degree. And the good thing is, it won't be there at zero, so you won't have any geometry,
it's basically invisible. And when I increase
it, it will appear. And the good thing is,
because we have all the data now outside of the tree
itself in the group input, we can have this on every
object individually because when you
pull the data out of the tree in this output
group input field or group input menu, then you can change it on
any object at its own. So for example, let's
start with this one. Let's say I want to
start at frame ten, key frame it with I
hovering over it, pressing I, then
I go to frame 40. And let's say this should
have 100 degree like this, let me just Fix that, negative 100, then hover
again over it and press. So by this, I've created
just this animation. Yeah, I increased the
degree of this arc, and by that, everything else happened
automatically basically. So you animated this chunk. And then when you want to start from here
with another color, for example, you can
just copy that object. And then change
the color to blue. And now you have a
blue N A red one. So you don't have to
copy any geometry notes. You only have to
copy the object and change the values here
since they're individually. So let's clear these
keyframes here, and I want to start it at 100, for example, sorry,
negative 100. And then it will start
exactly here because I already know where it's
going to end at -100. So let's go to -100, and then where is it about
to stop like this, 39, key frame that and
then go to frame 70, and then let's decrease this, sorry, that one,
decrease this to, let's say, -120 or
-130 like that. Then keyframe that again with
I while hovering over it. By this, you created
that motion, So let's copy that again. Clear the key frames. Then I have to combine
them basically. This is -100, and this is -130. For this one, your part to
grab when it's so small. I have to go to
frame 230 negative, and then I'm at this side here. Let's key frame that
here, zero degree, and let's complete the
whole circle with another 130 like this -130. I for key frame, and I forgot to change that, but no problem. Let's do this. And then you created that
little animation here with three dimensional cake
diagram basically. So with this, you can
now display data. You just have to
calculate the portion of it of a 360 degree circle, and then you can
display the data as circle as cake
diagrams like here. And have everything pretty, nicely prepared for animating it with all the data
already automated, with the procedural
process here, simplifying everything to basically these
four inputs here, the start angle, the
degree, the radius of it. Yeah. And of course, you can just give
it different values to emphasize like
differences or something. Yeah, that's no problem
at all, like that. That's just another
number to increase the length basically
of these angles. And the material itself, which you can change at any
time. Yeah, the blue one. You can give it a metallic look or the red one in this case,
you can change it any time. Y to adjust the
material and so on. Yeah, so this is pretty neat. And now you can go to visualize your data with this new
geometry notes example. That's all for this video. Thank you and see
you at the next one.
13. Raycast: Welcome to the Geometry
notes beginners course. In this video, I will talk about the cast function in the
Blender Geometry notes editor. But at first, I will
answer the question, what is a cast. And thus, what is a ray? So at first, a ray
is basically a line, if you have here, a
point, let's call this A. And you have a line going from this point infinitely
in one direction, this is a ray. And the cast function in
three D is basically when you analyze certain attributes
or properties of this ray. For example, if you
have an object here, then you can measure the
distance when it hits something. You can either just measure
this distance or you can calculate where it
hits the object and then change something
here mathematically. That's basically
recast in three D. You analyze a line and you analyze the
hit of something or the not hit because it's informal or helpful if
you know what you hit. But of course, it's also good
to know what you don't hit. So if you hit here something and you don't hit
here something, you know that somewhere here is an object,
but it ends here. And when you cast enough rays, then you can basically define the shape of something
you hit, for example. By the way, this is the
method that tracing is yeah, calculated to calculate
light and shadow and reflections and so on
with rays like here, which hit something or don't hit something or
bounce off, and so on. All right. So let's start with ya opening the
geometry notes editor. And then I want to
delete this or let me just use a UV sphere because we will need that
later for the recast, let me just move that here. And then I want to add another
object doesn't matter. And on this, we want to have
the geometry nodes editor. This will be our target
for the explanation. So let's just add some geometry
nodes here to the cube, and we can detach it
basically from here. And let me just use a grit, which is basically a plane here. Let me enable the visibility of the wire frame that you
can see the geometry here. So at first, I want to
make this way bigger, let's say four by four, and I want to have ten
by ten grid points here. And then I want to
rotate this thing that I can point it
into this direction. To do this, I will use
the transform node, and I want to check if the cor, if the direction is correct. Let me rotate it here. -90, and then it will look with its correct side here
to this sphere. Okay. So now I'm good to go. So now I want to
use the cast node. You can just find it under cast, and it's a pretty big node
with many, many things in it. So at first, we need
our target geometry. Which is this sphere,
is this object here. Yeah, so the object I
want to cast the rays on. So let me just drag
this sphere in here and connect its geometry
to the target geometry. I want to change this to relative because I
moved its origin here, so then everything is
calculated correctly. Then the attribute input
is not important here. The source position
isn't important yet. So basically, if you don't
connect anything here, it's like this as if you
would have connected a position node to
this source position, which is just every
single point here. Yeah. The position node is every single point
on this grid here, which is every one
of these points. All right, the ray direction is not z negative in this case. Here, I want to cast
it on the y axis, and you can see that in the
chismo here, y positive. So I want to change this. You can see this x y z. So you have to put this
to a positive value. I want to cast positive y
direction here, like this. And the ray length is 100
meters, doesn't matter. 100 meters is pretty far. So it's all right. Okay, so the output here is basically what's
calculated then. In my case, at first, I want to use the hit distance to calculate something
because here I want to measure
the distance from every point to this object. So what will happen
is every point here, since my source position
is every point, will shoot a ray to the
sphere and the outer ones, of course, too, so
every single point will shoot a ray to the y direction, and will calculate its position or the distance of the ray. And when this is done, I want to visualize this to
or by moving the points then. So let me use a set
position like this. And here, at first, I want to use, for example, the hit position, which is
the point on the sphere. For example, if this point here casts a ray and
hits something here, then this is the hit position. So what I could do now
is I could override the position of the point
here with its hit position. And by that, this
point would move on here to the point
where it hit the sphere. And when I do this like that, you can see something
already happened here. Maybe let's move this. So you can see here that it kind of gets
projected to the sphere. Maybe let me increase the
scale here a bit, like this. So my grid now gets basically
projected onto the sphere. Because every point, so
the former points here, hit something, and then
the points got moved. And by that, I basically projected this thing
on the sphere. And you can see when I get
close to the edge here, then these points don't
hit anything and miss it. And by that, they don't
get displayed here. So you can see that here. So they disappear because
they don't hit anything. Maybe I could show you that
by using a join geometry, and then plug that also here that you can see the
grid before like this. So here you can see the grid missing the sphere
on this projection, and by that, it doesn't
get displayed there. So now I could show only the projected part and the missed shots,
the missed ras. I don't want to
project to something. It just stays where it is. So to do that, let
me just delete this. So when I want to do that, there is one pretty
handy option here because you have a is it output, which is a Boolean, so a yes or no, zero or one. And when you connect the is hit plug to the selection
of the set position, you limit the point shifting
here from here to here, only to points where
you hit something. So basically, if
you hit something, then you get shifted
by the set position. If you don't hit something, then you are not
in the selection, and then you don't
get shifted here. So when I do that here, And when I miss now something, you can see that these don't get moved by the set position because they don't
hit something, is hit means then zero, and zero in the selection
means no selection, don't execute this
node with this point. Okay? So now we have a grid, which only moves the points
when they hit something, as a projection,
basically, like this. Okay, so since this
is a bit boring, maybe let's continue with some text here instead
of the sphere. So let me delete the
sphere and add some text. And let me just type in hello. So maybe I want to extrude
the text a little bit, and I want to have it
in the center like this and extrude it a
little bit, like that. And then I want to move it in front of the grid like this. And now let me exchange here the cast target to
the hello here. And yeah, it hits something, but the resolution
is pretty low. So let me just put this
to 100, for example. So now I have 100
by 100 points here. And now you can see something. This is now basically something like a
monitor or a display, which shows the pixels
of something it hit. So you can basically
consider this like a monochrome monitor
or something. And when I now
rotate this target, for example, with double r, I have a free rotation tool, you can see that this
is, actually like a Little rendering or something. Yeah. This is like you now build a pretty simple pixel style
rendering engine here where you can read geometry data and display it on a two
dimensional display, like on your computer screen. And when I rotate
it here or move it, then you can see that
you have something like a projection to the two
dimensional window here. All right, so now you saw
how cool a cast can be, so you can basically build your own little render engine or something like this
or render display. But let's step one step further, because we can add something
like a perspective here too. Because currently, we don't
really have a perspective, because we only cast the race horizontally to the
object or to the void, and then we hit something
or we don't hit something, which means it doesn't
really matter here. So if I'm positioning it
like this a bit Yeah. Here, diagonally, the H is not really bigger
or smaller than the, because I'm just
hitting here something horizontally or I'm not hitting
something horizontally. So you don't have a perspective on this two dimensional
display here. But let's change that
now because we can actually calculate with a
simple vector calculation, the perspective or
one perspective. Be if we would have something like a point here,
like an empty, let me just add an
empty object here, we could display or cast the rays to that
point like this. And by that, we would have
something like a perspective. Yeah, that things
in the distance get smaller than they are
when they're close. And this is our anchor point
for all the ray directions. And then we would have
something like a perspective. And then it's not
horizontally anymore. And yeah, this is pretty
simple to do that. It's basically only one
single calculation because when you want to calculate a
vector between two points, you just subtract them. So let's say these
are the A points, and this is the point B. Then to get this vector here, we basically only have
to subtract B minus a, and when we do that, we
get this a b vector. And by this, you can calculate exactly this vector for every of these
thousand points here. So let's do that
here in this case. Let me just go down. And what we have to
do now is we want to change the direction here, because we want to override it. Because here currently it's just horizontal on the y axis, but we want to override it. So to do that, I
need the t object. So the location of
this, basically, this was our B vector, and then we need
all the A vectors, which is the position. So I'm going to catch
that. This is the A. And as I showed you before, B minus A is then
what we will need. So let's add a vector math. Put this to subtract, and then connect the location on top and subtract
the position, and then use this as
the ray direction. And now you can see already
here a bit of distortion. Maybe let me increase
this grid for that on, let's say six by six, and maybe increase this
year to 200 or something. So it's a bit more dense. All right. And maybe I want to now delete or disable
the wire frame, then you can see it
better because otherwise, it will be black because
of the many lines there. So let's look at
our projection now. Here now, you can already
see the projection, the projection with
a perspective. So you can see here now
when I move my target, I have a projection
with a perspective. Let me just move this
a bit back maybe. So when I now rotate this, you can see that it
has this perspective, and it's getting smaller
in the distance. I could change the text here. Let me just do that, and then maybe
something perspective. Then it's maybe a bit
longer to see it. So now I'm having
it here like this. And you can see now
it got distorted. Yeah, it's not parallel anymore. It's getting smaller
and bigger depending on the distance to the point or to the display
here, basically. Yeah, like that. And now
we got something like a perspective with our self made render engine or
however you want to call it. Yeah. But now we actually build something
and you can see that it's getting the distance between the letters is getting smaller
and smaller and so on, so you now really
have a perspective, and you can change
it, of course, the further you are away, the smaller this effect is, but when you're very
close to the text, I mean, you can already
see it here from the side. So the further you're away, of course, the more
parallel these lines are. And when you're very far, very close, then these lines
become more like a cone. And of course, then the
perspective here is more, good to see, like this, y. So And yeah, this
is pretty cool, actually, so you can do
a lot of things with it. As you saw, you can project or snap surfaces to other surfaces
by just shooting race, and then calculate
the new position or the distance, and so on. And then you have your own shrink grab
modifier, basically. Here you can build your own shrink grab modifier
how you want it to be. Additionally, you can of
course edit this here. I mean, in this case, everything gets projected until
it hits the object, but you can of course
change the set position, the new position here. For example, the offset, you could decrease
the offset ABI, that it doesn't get projected
that far, for example. But that's just an example
to to play around with. But of course, this
works better if you have this horizontally
projection like this. Here, for example, you could
increase the scale here. For example, here, you
could have an offset here to bring it further
to the face here, to the front face. All right. So this was the video about
ray tracing or ray casting. I hope you learned
a lot and are now motivated to play a bit
around with this note. Yeah. So because
it's very flexible, so you can use it in a lot of
cases, as you can imagine, because it's handy
in general to have some rays which calculate distances to other
objects or whatever. And it can be used in procedural
animation in many cases. That's all for this video. Thank you and see
you at the next one.
14. Raycast Example: Welcome to the Geometry
notes Beginners course. In this video, I will show you an example for the cast note, how to use it, and a real example on what
you can do with it. So the project for this video is basically wrapping
something in wire or a rope or silk or strings
from a spider or whatever. So you wrap a thread
around an object, and we will do this with cast. This will have some steps, and I will break it
down one by another. So, at first, let's start with the base yeah geometry of it. So let me open the
geometry notes editor, and I maybe want to
exchange something here because I want to
have a little bit more, different geometry shaping here. So let's select random points and then just move them
somewhere like this. All right, this should be fine, then a little subdivision
here. All right, that's fine. So I have something like a rock now or however you
want to call this. Okay? So for what
you want to do, it's better to have a geometry which hasn't many things
spiking off of it. So this geometry here is okay. But if you would have
something like this here, It would be a bit harder
to project something on because we'll project from a cylinder of a
string around it, and then we would have
to hit this thing here with several rays, and when it's very tiny, you can miss it very easily, and you have to cast many, many rays to hit this ones. So yeah, it's better
to have geometry, which is more
inclusive like this. If you have two
hard spikes here, you could try to pinch
it a bit together. That it's a bit more flat
basically and not that spiky. But we will deal with it
when the error occurs. But in this case, this should be totally fine for the project. All right, so let's go to the Geometry notes editor
and create a new group, and we can call
this, I don't know. String wrap or threat wrap. All right, so at first, I want to change something here, because you can approach
it in different ways. But in my case, I want
to have the threat, the wrapped threat
as its own object. So in this case, I mean,
you can do it here, and you can just work
with it in this object, Geometry notes editor,
then the threat here around this will be
in the same object. In my case, I don't want that. So that's why I will quickly delete this here and just
create a new object. Which one it doesn't matter. Yeah, we can call this red. And then I apply this on here, and I will just delete the geometry and replace
it with something. So I want to use a spiral because I will just
make this very easily. A spiral is a curve here
starting from here, and then You are working
all the way down to here. And you have some
parameters here for it. For example, the resolution, I would keep this pretty
low in this case, just to increase the
calculating time, that I don't have much
leg or something. But of course, you can increase
it then on your project. I will keep it at 15. So then it's a bit
more edgy here. But it will be smooth
in the end anyway, we will subdivide it a
couple of times, maybe. Then you have your start
and end rotation or radius. In my case, I want to
keep them at the same, so I will leave them at one, for example, or in this case, because it's a bit thin
then, let's keep this. Because you need a bit
distance to the object. We'll project this to this. Yeah, let's call this rock. I want to project to this rock. So that's why I have to
keep a bit distance, and that's okay here for now. So let's keep it at
two then like this. And then the rotations is the amount of turns
this is going to have. Here, the amount of loops here. And you want to have a lot. So let's say 200 or something. So you want to have a
very high number here. And furthermore, I want
to change the height. Because I want to project it to the
objects origin at first. So that's why I want to do it something like this
ops so that the rock here is in the center of
this cylinder basically, because then we can project now every point here of this
threat to the origin, which is here of the stone. And by this, the
threat will then Apply to the surface
basically like this, and here will then
be a little opening. Like when a spider wraps
something in its silk, you have a little
spot where it's basically the start
or end of it, and it will have this to y. So you have little
holes here because, of course, here at the top, there is nothing which
can be projected on. So then of course,
here is a little hole. Okay, so this is now all right. I want to change one
little thing because I moved this whole thing
here in the object mode, but I think you can do this
a little bit better with this one when you reset
the object to the center. Then you can do it
in the geometry nodes editor as well with
this translation here. And by this, it will be
a bit more procedural. So we'll just keep it as
procedural as possible, no problem with moving it here. But here you can
do it, of course, as well in the node
editor itself. And then last but not least, I want to add a trim curve node. By this, I can just reduce or delete parts of this
curve like that. It looks like it's
just moving down, but I'm deleting
these points here, and then it's going
to draw down here. And by this, you can
animate that it's getting wrapped in
real time, basically, when you now imagine you
project this on the surface, and you start to delete
or add more threat to it, that it will start getting wrapped from the bot to the top. Okay, so this is already most of this basic
geometry for the thread. Okay? Let's just keep
it somewhere here. And let's continue. So at first, I want to animate
this a little bit. Oh, by the way, if
you want to see it, then you can add
something back here, and you can do this
with a curve to mesh. Then we have a mesh object here, and now we could do a
subdivision surface. And by that, it's going to be smoother already because
we're going to subdivide it. And then we increase
the amount of points. After you did that,
then you can again, make it to a curve
mesh to curve. Add this in here, and then we're going to turn
this back to a mesh, just the other way,
curve to mesh. And by all of this, we now have the opportunity to create now a little geometry around this with a curve
circle connected here, and then increase this to
let's say 0.005 or something. And then you have a little tube here basically around that. Right. So now we have
a bit geometry here. Let's group this a bit together. All right. So but before
we do all of this, we will now move or animate this thread that
it moves a little bit. So when you yeah start
to wrap something, then maybe the thread
moves a bit and so on. So I want to have this animated. And we can do this with
noise textures. All right. So let's just put
something in between here, which is a set position node. Because it will move
the points around. And here we will then in the offset, animate
this basically. For that, I need
a noise texture, noise texture and plug
the color in the offset. So it looks like this. So it's already a bit animated, so you can animate it
a little bit because the noise texture moves these vectors in
different directions. And by this pattern here is going to shape
the, going to form. And you can of course, move
this pattern here then with a position and a
vector math node, connect this, and then you can
move on this pattern here. So if you want to
change something, you can see it pretty
well on the z axis. You can just move the
noise texture along this. For example, if you want
to find a nicer spot here. But that's just how you can adjust this noise
texture here in general. All right. So let's
put this ten, for example, on every axis. Okay. So this is just to have some different shapes
here in general. Now I want to add another noise texture
and multiply it with this noise texture that I
have some flow basically, which can be recognized. So it's not totally random, but you can see a bit of a flow already and it's animated
at the same time. But still moving on that flow
of this texture basically. But that's not a must have. You can just do it with
one noise texture as well. I just find it a little
bit more appealing with two multiplied noise
textures because that it's not just a uniform
noise pattern. So let's create the second one. Let's just move this a bit back. So we will put it
in between here. So let's add another
noise texture like this, and then we want to
add a vector math. Put this on multiply here. And then I want to multiply
this color with this color, and then put that here. But for now, I will just mute that so that we
only see this one here. And this one, you can increase the detail
a bit if you want. Then you have a bit
more randomization. Something like this. Yeah. It doesn't
matter that much. All right, I will
just mute this, so that you can only see,
you can see it here. If you mute something,
you can see the flow of the first plug is going
to bypass this node, and then you will only
see the first one. So now we don't see
the bottom part here. Okay, so let's animate that. For that, I have to use, of course, a value note. Which will be the frame counter, so hashtag frame in that value, and then this value will
always be the current frame. If I move timeline here, this value will change. And because it's way too fast, I will just add a math node, put this on divide, and then connect
this sine divided by a large value like
70 or something. And then This value
here is going to be way less than the
frame value here. And then I want to add
this to the vector here. So let's add a vector
math on add like here. And of course, I need a
position node for that too because noise textures
alway needs as an input. So position like this, and then it's going
to be like that. So it's going to
be animated now. The position values are
increasing on this noise texture, and by this, it will just
start to move around. All right. Let me quickly
just mute that one here. It's a bit more edgy, but then it's a bit faster and not that
problematic. All right. So it's moving here now. And of course, you can now use another vector math
multiply here. One. And if you now
change the z value here, you can squeeze
it together here, this noise texture, and I want
to have a high value here. So let's say nine or something. And then this is pretty, pretty squeezed together here. And then it's going to increase that a bit. Maybe
let's bring that back. So and then you can
see that it's like wrapped with a bit,
with some gaps here. So it's not totally even, but you have some gaps
like in real life, and you wrap something, you have areas where it's
not the S dense, and you have areas where it's very dense like here and here. Yeah. So when you just mix some noise textures here then on top, It will be like this. Yeah, so two noise
textures multiplied, and we squeeze this one
noise texture together. And by this, we have this y, uneven distribution here
of this threat or wire. And when we hit play,
it's animated too, so it's going to move like
that. Let's jump back. Let's continue then
here because we will now put or add the cast
to this whole thing. And we will do this in
between here after we changed the position here or this is basically
the animation. Yeah, this is the animated wire. And we'll put that cast
function after that. So let's move this abbot back. And then we want to
change here something. And the recast function is, of course, combined with
a set position node, because in the end,
the final result is the position change
of points here. So we will use a set
position node again. All right, so and
now then in the end, we will have a plug
here to the offset. But at first, let's
add the cast finally. So we did now a pretty, pretty much preparation
for everything, and now we will do
the cast itself. So at first, I need some
information for the cast. At first, of course, what I want to cast on, which is of course the rock. So let's put the rock
geometry in here. And then at the other hand, I want to use the
positions of this wire, so I will use a position node, and then I want to
subtract one from another, which is the rock from
the position node, because then we will get
the vector to the rock basically because I mentioned that in the RayCa
explanation itself, of course, when you have a let's say this is
position or in this case, we'll do it that way. So let's say we have on
the rock here a point, which is the point B. And we have here one
point on the wire, which is the point A. So basically the point B is at the origin actually because we will
use the location. So the point B is at the
location here of this rock. We have point A and point B, and to get now this vector here, which will then hit the rock
here, to get this vector, we have to subtract b minus a, and this will result in
the vector A B like this, and then we have this
direction for our ray. Let me quickly bring the
cursor back to the center. If this happens to
you, you can just snap the cursor to
the world origin, and then it's not in the way. Sometimes it irritates
you or at least for me. Okay, let's do the
calculation itself. Let's make this a bit smaller. We'll just use a vector math
here and subtract this this, and the result we will
use as the direction, just as I showed here before. Let's move this a bit. Here. And the
target geometry is, of course, the geometry here. Now we're shooting
a ray from here to here and hitting
then something here. And to display that, I just have to connect basically the hit position
to the position here. So it's not the offset. It's the position
because we're just going to override the position. It's not a difference
or something. It's just a new position, this one on this position. So let's do that, and something already
happened here, maybe let's go to the x ray, and you can see something
already is there. So it's bound to or it's casted or projected
onto this surface here. And you if this is
too close for you. So at first, of course, the resolution is not that high. If you increase the resolution, so let me quickly disable that for a second and
increase the resolution, then this will be more
precise because, for example, if you have just one hit
here and one hit here, then they will be comb
or connected here, despite here is a hill
basically between them. That's why it's that unprecise. But if you increase
the resolution, you will increase the precision, basically, the precision
of the projection. But you can do another
thing to maybe you don't have enough resources to increase the
resolution very high. So let's keep it at
low detail here. And let's enable that. And of course, if you
do subdivision surface to smooth this whole thing, then it's going to be you're more clipping in that
too because, of course, you're smoothing it instead of have this hard shapes here, and then you will decrease
the radius furthermore. So if you want to
get rid of this, you could just mix some
original positions in here. You basically just decrease
the effect of this wrapping. So to do that, You will just
have to add something here, which is a mix node, and you want to mix vectors, which is let's say
the A thing here. The A plug is the
cast positions, and the B is this one here. The original positions. And now you have a factor, where you can dial
or slide here, how many percent of this wrapping effect
you want to have. Do you want to have
100% cast or a 0% cast? And now if you are
happy with it, you can leave it at something
like this if you're happy, and then you could Yeah, balance or fix some
problems maybe a bit. Of course, it really depends
on the shape of your object, but of course, you could
do something like this. So for example, we could make a mixture of a couple of things. So for example, we only
use or do 90% cast, or let's say a bit
more yeah like 0.05. So we have now 95% cast
with a bit distance here. Which already fixed something, and then will increase the resolution here
a bit like that, and then it's
basically fixed here. Of course, here and there,
but you can fix these things, but that's how you can approach
it basically these fixes. So then furthermore, I
want to delete geometry, which didn't hit something.
You can do that. I mean, in this case,
maybe you don't have that, but in general, it's good to
have something like this. Here, it's possible that
from this cylinder tower, everything hit
something like this. But if you have objects
of other shapes, you maybe want to have
something to delete geometry, which is just, which hit
nothing with the raycast. So and I would do
that just before. It basically, so you can
just delete geometry, and it will at first
delete everything, but you can just limit
it to the is hit. But this is basically
just the opposite, when something is hit, you
don't want to delete it. That's why you can
do a Boolean math. And with this, you
can set this to not. And then it will delete things where the is hit question
is answered with no. So when something is not
hit, it will be deleted. But as you can see, in this
case, nothing happens, but When your shape
is different, this can occur that you
hit nothing with a ray, and then it's moved somewhere
else or just stays where it is and then you
have just geometry somewhere where you
don't want it to be, so you can just delete it with this before you
change the positions. All right, so this looks okay. So let's try to play it. It works with about 14 FPS. And you can see that
it's now animated, yes. So it's like Yeah, a little wiggling around
it here basically. So now we could, may you remember from the start. Maybe let's look at this here. This is how this
looked from the start. And when you now
want to change this, let's call this the
wire tower or whatever. You can now change it, for
example, when you say, Oh, I want to have it
projected from here, and from here, loops like this, then you can just change it. You just increase the
height like that. And then you move it
a bit down like this. And let's look at it again. And this will then
change the appearance of it because things
at the top will then they will accumulate here a bit because let's
look at this again, B then more rays, of course, hit areas on here. So you have more threads here and less threads on
the side regions here, and of course, more
threads here in this too. So you have to tweak a little bit depending
on your object and where you want this wrapped
silk or whatever to be. So this is, of course,
flexible, experimental. Yeah, it really depends
on the project, what settings will
fit to your style, what you want to do visually. So in this case, let's
say this is all right. Let's delete this. And you can then see when
I move this up and down, you can see that the
distribution here changes depending on the
position of this tower. Yeah, so just that
you have seen this. And if you remember the
strim curve from before, you can now delete this
curve basically because this curve just deletes itself from end to start when you
slide the slider here, and by this, you can
make an animation that is like life wrapped
in real time, so you just play the animation. And then in the animation, you just key frame
this one value here. Let's say we start on frame ten. Key frame keyframe,
then go to frame 100, this key frame, and
then it's going to look like it's wrapped in real life, like this in real
time, not real life. So it's wrapped here
in this silk thing. And of course, you can just
extend certain things. Of course, you can
just play around with the values here, like this, and then you can of course add some key frames here
and there and so on, so you can just freely
play around with this. But that's just what I wanted
to show you that you can, of course, then animate it. And you can of course make
this wiggling motion. You can bring this to a
stop, of course, too. You just have to bring this
no tier to a stop because, of course, this is the reason for this
thing moving at all. So if you animate this to, that it stops at a certain time. So I mean, in this case, just for simplicity, I
just put it to the frame. But you can of course
delete this here too. Key frame it. Let's say, this can move from
the beginning. So let's say this is
here, and on frame, I don't know, 100, it's y zero again. And let's say on here, It's like on, I don't
know, 50 or whatever. So you can just
animate things here. So you just now changed
the movement of this. It starts getting
slower and so on, and then it stops at some time. And then you can just animate
this, of course, too. So just like I showed you, put this on this on zero. Go to frame 100, and then it's finished here, and then it's going
to stop there. So it's going to be wrapped,
wrapped wrapped, and so on. And then it's going
to be finished there. And then it's not
moving anymore. Yeah, so, of course, you can just play around
with all the values and bring things to start
and stop and so on. Yeah, and now you can build your own little threat modifier, animated and procedural and
everything with this here, what we just built together now. All right. But
there's one thing you can add optionally to
because currently, let me quickly bring
this back on here. Currently, we're
projecting these positions here to the object origin, basically, so like this
linear, like that. All of this. But we could sometimes maybe
it's more suitable or just visually better
to project things with this tower of thread
the cylinder here, sometimes it's better to
project it horizontally. And then these wrap
things are than just here and are not
flowing to the center, but stay on its level basically. This can maybe look better on
some objects, for example. To do that, you
just have to tweak one more thing, basically. So let's look at this. So because it is here, you'd basically just
have to subtract something else here
from the position. You already saw that. So if you want to subtract, if you subtract the center here from the position
somewhere here, then this vector is
going to be there. But maybe We can just
subtract something here from the point on the threat to just project
everything horizontally. So what we basically
just need is only the z value from
the thread itself. And to do that, we
will do the following, so let's do that here. Maybe we'll just do it on
a different group here, and then we just replace it. So we need, of course,
the object two. But then we need the
positions to And what we're going to do now
is we're going to use different things
from these nodes here. So let's use a
separate x y z twice. So we want to use the x and y coordinate from the
origin because of course, we want to project it
still from the top here, still in this
direction in general. So from the cylinder, we want to project
in the center still. So we'll use the x and y. Location from the object we
want to trace the rays on. But we won't use the z position, which is the height. From this, we will use the
height of the cylinder here. Which is the bottom part here. Oops, like this. Come on. So nine, we want to use a combine X Y Z and
use just as I said, the x and y coordinates
from the object, so from the rock,
but the z position from the height of
the thread like this. And now we're going to use
that instead of the here. We get something like this. So, of course, it looks
a bit different now because it's not
accumulated here. It's exactly on
its own level now, which is way less. So if you look again at here, so now this here is not used, and this here is not used. So no wonder that there
is only one third or something of the
whole thread here. So, of course, when you do this horizontal tracing
like that, then of course, you have to reduce the
height of it because you only use then threats on
the same height like this. Yeah, so even more. Something like this ops
like that, out of the way. And then you trace exactly
from here to here. So let's look at that one last
time. Then it's like this. Yeah, and then, yeah, it's already animated here. And then it's going
to be like this, and maybe you have
to just decrease the intensity of the noise
texture or whatever, if it's to wavy for you, but that you saw one
time this approach to have different
distributions on it. And with this little
mathematical trick or whatever, you can instead of projecting
every point of this here. So instead of
projecting every point to the center,
which is all right, but maybe you want to change something here and it's
not fitting for you, then you can, of course, instead project from this point
to the center, like this. Yeah. And when you do that, especially with
the second method, this horizontal ray
cast projection, then you need 100% this delete geometry node because some rays
will hit nothing, for example,
everything above here. It will hit nothing. And then we'll give you wrong
positions for the threat. You're basically no
position change, and then they will maybe
stay there or whatever. So just delete everything before you set the position
new with the cast. So yeah, this was
the second approach to the cast wire threat. Silk spider effect, however
you want to call it. And as you just saw, right now, a half can be really cool to animate things on the
surface of another object. And you can of course, change
the outer projection object from this from a cylinder to a sphere with
many threads on it, and of course,
this will generate a different pattern
here as well. Yeah, this was
just very nice for the presentation of this
cylinder thread projection, but, of course, you
can just play around with different shapes
on the thread itself. And then you have many different
effects for this yeah, cool cast use case. That's all for this video. Thank you and see
you at the next one.
15. Final Project - Part 1: Welcome to the Geometry
notes Beginners course. In this video, I will show you a project where we will
grow mushrooms on a tree. This will have several
different parts. For example, we have to
create the mushrooms. Then we have to shade them
and animate them a bit, and of course, we have
to let them grow. And all of that will
be its own part. So let's jump into it. I prepared just a
little tree part here just like this and
a mushroom for that. This is just a low
poly mushroom, which is already unwrapped here, that I have the top area here. So this part here at the top, that this is isolated
with its own seam. This is this red seam here
around these edges so that I can change the color of the top and the
inside individually. The UVs are looking like this here for the
mushroom like that. So I just have these
isolated parts here. That's the important one,
which is at the top, and the rest one is
isolated as well. So I basically want to
have different colors for the top area and all others. So the main seam is basically
this one here. All right. So now let's go to the
geometry notes editor. And let's get started with the actual mushroom growth here. So at first, I want
to make a copy of that tree because these
will be the mushroom grow. So we can call this mushrooms. This is basically just the
reference mushroom here. So let's do it like this. And on the mushrooms, we will create a geometry
notes like this, and this will be then the
mush room grow, for example. Okay. So at first, I want to distribute
points on faces like this. And then I want to create a noise pattern because that it's not completely
overwhelmed here. But at first let's switch
this to pos on disc and change the distance here
to something like this, that I have a minimum
distance of mushrooms here. So if I increase this,
you can see that the mushrooms always have a bits of space
between them here. Now I can just use a
noise texture like this and use the position
node as the vector here to create
this noise pattern on the density
factor, like this. And then you can
add a color ramp to add more contrast to it that you have areas with
many mushrooms in areas with less mushrooms. For example, like
this, and then you have spots where
mushrooms can grow now. And it's kind of evenly
distributed here. So now let's add
the mushroom to it. So let's move it
over there and use a instances on points
note like this. Then we can use
the mushroom here as the object of
instance like this, and then switch or use the geometry here for
the instance like that. And comfortably, we have
a rotation plug here. We can put this into
the rotation input, and then the mushrooms
will have the rotation of the normal here or the
vector of the normal. If you want, you can use a subdivision
surface here between them to make this
mushroom a bit more smooth because the
reference here is, of course, low poli, and then you can
make it more smooth afterwards in the
modifier itself, so maybe put it on one or two. Let's leave it on one
that's a bit faster. Then you have these
mushrooms on your tree. And you can add, of course, a random value to give random scales here
on the mushrooms. But maybe it's a bit too harg. Let's do 1.4 to one. And then you have
this random pattern for the scale of the mushrooms. And of course, you can just set a seed you ought
to have for that. And then you have
your distribution of the scale of the mushrooms. So now then you want to have, of course, different
heights, maybe two, because maybe you want to have larger and smaller mushrooms, and here comes now something important to
the reference here. You have to have
the origin pretty down wards of the volume
of this mushroom, for example, in this area
should be your origin. So maybe somewhere
here or here or here, I pick this one,
doesn't really matter. It's just that you
can make the mushroom larger or smaller by
moving it up and down, that geometry basically to this, and you can rotate it too for some swing
animation, maybe. So it should be in the
bottom area here of the Main body here of this mushroom. So let's go back here, and then we want to
add another node, which is the translate
instances like this, and then add another
rand value here. Plug that into a
combine x y z on z, and then use that for
the translation here. And then you can already see you have this rand distribution, and of course, this
is way too strong. So I want to move them
inward, not outward, so let's use a 0.01. To zero. And then these mushrooms,
and you can see that, they will shrink or basically move inside
of that tree a bit. So you can use 0.2 or 0.1. I mean, you can see what
kind of effect it has. So maybe you want to have
something pretty small. Let's say 0.02, for example, and then some of these mushrooms just move
inside of that tree. So they are shorter,
but not smaller. So by this, you can have
mushrooms with a large heat, but the body here
is pretty short, which you have on mushrooms, of course, in reality as well. So you can have large mushrooms, so high mushrooms
with large heads, and you can have short
mushrooms with large heads as well because they
moved inside of the tree. So, now we already got one
of the parameters here, which is this piece here, and this is with Control J. You can join them into
a kind of group here, which is framed, and we can
call this, for example, mush rooms or mushroom instances
with different heights so that you know what
these groups are doing because we will add more and more
groups to this now. And then we have an overview what we're doing here
with each group. So we want to animate them
also with a controller. So let's add an anti
object here like this. Maybe use a sphere for that, that you have the radius here
visible of this controller, and let's put this to ten, and then I can have
a controller with a size of ten of
the radius here, and then I can see how my proximity area
here is basically. All right. So let's leave that empty here for now, go to here, and then I want to place another branch here
for a calculation. So because I want to sure an attribute here
after the distribution, I want to capture a vector
on points, so that's fine. And I want to capture
the position. Of the points after
I distributed them. And these values here, I want to calculate with a vector math on
distance like this, and I want to calculate the
distance from the empty, the location here of the empty, on relative in comparison to the points of
the instances here. So I want to remap the result
of that with a float curve, and I want to change the
scale of the float curve. So min is fine here, but the x x value is ten. So then it is the same as the visible radius
here of this MT, and one is okay. So I set it 00-101. So let's reset the
view like this. And here I want to
invert it because a low distance should
have a large value. And then I put this to round
about six, for example. And then another point
down here like this. And then when I use this
year to scale the instances. So here I can now After
I translated them, I can scale them now, scale instances
like this and use that value for the
scale like this. And now you can have
these transitions here. For each, for each
mushroom individually, every mushroom calculates
the distance from itself to that point
here like this. And then with that float curve, we can design the graph of
them scaling up and down. And by this, you have this
scaling animation, basically. So let's call it the growth. Yeah. So now we have another
group created basically. I think I would exclude this year for the group
because it's not really, it's just capturing something.
I would exclude that. So basically, these nodes here, Oh, and by the way, of course, you can multiply the values
here to math multiply, and then you can multiply
this value here. If you say, Oh, the mushrooms
in general are too large, Then you can multiply
it down in general. So let's say 0.7, for example, so everything is now
30% smaller in general, and the mushrooms
are not that large, and then you can just
dial it here in. So let's just keep
it at 0.7, oops 0.7, and then scale it here, and then you can
see the result that these mushrooms are
growing now on this tree. Now let's come to another part. So at first, let's group
that as well. Group. And that's, for example,
the mushroom growth with controller
distance like that, and then know what
this is doing. So this is now maybe
somewhere here. And then we can have another
part here at the top. So let's continue with a swinging motion here so that the mushrooms move a little
bit. I mean, that's optional. Mushrooms are not that flexible, but if you want to have
a little movement, that the eye is not that
bored by looking at it, then you can add a little
swinging animation, and I would just do
that with a value note. Put that. On hashtag frame to update always at a frame that every frame here has its
own value like this. We could call that frame count, for example, like that. And then I want to calculate
now different swing motions. So I want to Here, for example, use here a divide
note, math divide. I want to divide that by a certain value. We'll
come to that later. Let's leave it on one for now, so this note does
nothing currently. And then I want to create
a sine sine motion here. And then I want to multiply
that Muth multiply, and I want to multiply a random value so that
everything is not that uniform. So let's say random
value from 0.08 to 2.25. Connect that here. And then I can use a
combine x y z and use this, for example, for
the y motion here, and then connect that to
another random value, but a random value at x like this on vector,
so that's fine. And this one here, I can use for a
rotate instances and rotate the rotate these
motions here by that. And then you can see they are swinging on the y
axis here currently. And now you can see why I used a divide
node here, because, of course, this is way too fast, you can increase the divide
node by slowing it down. So, for example, put it to 20, and then they will
swing pretty slowly. And they will swing at
different speed because I use a random value here for on
different occasions here, that the strength of the swing is randomized
between them. So every mushroom here
has its own swing now. On this one axis,
or you can even increase that to 30
if it's too fast, and you can just
play around with the speed or have it
extremely low like 50, then you barely can see it. They only move a
tiny bit like this. Maybe this is more realistic. So then have it on 50. And then I can basically
copy a part here, which is that one,
copy that here, and just plug that in
the x direction here. And maybe I want to
change a bit here, 0.1 ops 0.123, for example, 0.3, then it's already
a bit different here. And then of course, I want to use that here two. And I want to use
another value here, maybe 35, that the motion
is a bit different here. So this is now the y motion, and this is the x motion here. So then let's show it, and now they are swinging
in multiple directions. And maybe this is too fast, so maybe let's use more
like 65 or something, and then they swing in different directions here
in two directions, x and y. That's okay. And yeah we have now these
different directions here. Swinging. And, by the way, if you want to desynchronize
it, because currently, the sine graph is
still a bit overlaid because we use the same starting
point of the sine graph. And an easy way will be to use a different starting point for the second sine graph
here at the top, that I will just move it a bit to the left or to the right. So it starts here, and maybe it will then stop
this overlaying effect. And to do that, I want to just
combine them here and use math ad that's fine and
just have an offset here. And this offset just creates
a little disconnect here, or you can Theoretically
just use it on one of them. So what you could do
is you use it on both, or maybe you can
just use it on one, and then you can create
this disconnect. So if I just add this here, you can see on the left side, if I just hard, or extremely slide the slider, you basically dial in an
offset here for one of them. So you could say the starts 20 units at another point here, and then you have more
of an offset here of this motion of this swing
motion and this swing motion. So then you can create
a larger disconnect, but that's just for the swing. Maybe you could use that here. And now we could
group that as well. So for example, we
could do this here. So let's say this is the
uh room swing y direction, and this here is the
Mushroom swing x. And then you know exactly
what is happening here. X and Y. So like this, and then it's fine. That was the
mushroom swing here. So now we have to
do one more thing before we can come
to the shading part. So the geometry is almost done or the raw
geometry is basically done. So this is what the geometry
looks like of the mushrooms. And now, let me quickly delete the annotations
here. All right. And this is now where we come to the informations
about the colors which is stored in the geometry. At first, we have to
realize the instances after we manipulated them here,
so realize instances. So now they are real geometry before they were only instances, which is a bit of
different data type. And now we can come
to another topic, which is the UV mapping. Because this mushroom here
has the UV map like this, and we basically only use the top part here
for real shading. And the thing is, every
mushroom will look the same here when I use the
attribute of this top area. And to prevent that, I want
to give every mushroom its own attribute
here at the top. So then in the UV,
or in the shader, we can use this for individualizing
every own mushroom. All right. So this is now
what we're going to do. But if you're not interested in every mushroom
looking differently. So if you use
mushrooms with points and little white spots,
like we will do, then it would look or it
would look a bit weird if every mushroom has exactly
the same white spot pattern. And that's what we are
preventing now that the mushrooms are looking
all differently. All right. So I want to sneak in something here between these two here. So let's put this a bit lower, and let's push this
a bit back and this a bit upwards that I have a
bit of space here in between. Okay, because I want to now capture something in
between here as well. So I use another capture
attribute here after that. And here I want to capture the indices which are
integers like this. Sorry, it's a float n integers, so we can basically
leave it like here. Because in between, I want to randomize them random value. And when you plug an
index in the ID here, you will randomize the
indices in this range here. So now 0-10. And that's fine. So now the mushrooms have now
different indices 0-10, and randomized, so
randomized indices. And this one, I want to combine now to a vector on x like this. And this here, I want to
add to a vector math on d, and I want to add the
UV vector now to this, which means the UV is shifted or the UV vector is shifted on every mushroom a
bit to the right, for example, or on the x axis. So on the x axis, the UV vector is a bit shifted, which means every one of them has a bit of a
different UV vector, which will result then later
in different white patterns. And to do that, I have
to add the UV here now, and to do that, I
have to add it here. So at first, let's
connect this here, the group input to the
ad vector math here. So don't be confused. This is in a bit on the
way here like this. And now we have to
define what we want to invert or insert here, and we want to
insert a attribute, which is, you can already
see that here, the UV map. And now we are using the
UV map here as an input. So this is not the UV map. If you want, you can
recall that or rename that here to UV map. And then you know,
this is the UV map. And on the UV map, I'm
adding the indices here as random values
basically like this. And I want to add
this new UV map, basically, after I realized
the instances, basically. So after I realize them, I want to override it basically. And to do that, I
just capture it. So let's move this maybe
a bit down like this. And here I want to capture the
attribute here, like this. Put it on vector. Hopes vector. And then I want to
capture this UV for the realized instances and
output it as the new UV map. And I can output this
as the UV map here. Now, I basically override it. I import it, modified a
bit, which means here, I made the UVs individual
for each mushroom, so we could join them here. And then this is
the manipulation, and then I override it on the realized instances
here as the new UV map. So this is not the same
attribute, but modified. And now we're basically
finished with the geometry. I just want to import or export basically
on the geometry level the distance of the controller as you may remember the
controller distance here, which let them grow, and will be handy
to in the shader, so I just export it here. And then I can name this
controller distance here. And I could just
where is it here. So these are the UVs. And this is the basic
control distance. Just let know how it's
called or what it is, and I could call this,
for example, Fate. And this is now the
name of the attribute. So this is very important. You can call it
whatever you want. You just have to remember what or how you called
this attribute. Just called it Fad because
it's the fading yeah. It's for the fading here. I just call it fad, and then we should be finished
with the geometry here. So it's a bit more complicated. But if you do it step by step, it should be pretty clear
what we are doing here. And if everything worked out, we can come now to the shade.
16. Final Project - Part 2: So let's make this bit smaller, and let's zoom in ab to the mushrooms that we have
the shader editor here. And then we can call this, for example, mushroom top. So where is it here? All right. So at first, this is,
yeah, fine for now. At first, let's just import
an important thing we have, which is the attribute, which we prepared, which
is the UV map here, which is this attribute here. So this is now the UV map. And then let's
connect that here to a vector math ad that we
have a bit of control here, but it's not 100% necessary, and then connect that to a
Voronoi texture on vector. That's fine. And then use the distance here for a
color ramp like this. And then we can just look at that what or how
this is looking. Let's increase the
scale here for now. Oh, of course, we can't see
it because we have to define, of course, the materials. Sorry, that's one
step back here. So because we have to
prepare one more thing here. So let's look at the
verdicts groups here, because we just have to
define at one point, what is the top and
what is the bottom. And that's pretty simple. I just select this part
and everything below that. So like this that this here is selected and everything
below and just define that as the
bottom of the mushroom. So when I now select it, select, then this is
selected here basically. Or maybe I could select
this here as well. Let's include this here as well, like that. So assign. So this is now the bottom. So when I selected,
the bottom mushroom are these points
here at this body. After I assigned this here, I can go to the mushrooms on the tree and then just
assign the materials here. How I want the materials
to be assigned, and I would do it like this. I'll set a material. I say this is the mushroom
top, for example, and we can rename the other one after that. So
let me quickly. So we could say this is the
mushroom bottom, for example. So we in general say mushroom top is everything
at first, like this. And then I put
another set material, mushrooms mushroom
bottom, like this. And I just use now a named attribute note to make a selection
here on Boolean. Bottom is this attribute. So the selected points here or the selected phases
are the bottom phases, and if the attribute here, Ban, if this attribute here
is the bottom shroom, then the bottom will
be selected here. And by this, we now
made a selection. It's only at the top now. So now only the mushrooms
or only the geometry, which is not the bottom
is basically the top. And then has this
mushroom top material. Okay. Let's get back
to the material here. And the mushroom
bottom is basically not worth something
of explanation. You just set your
mushroom bottom material. You can see maybe to something like this and a bit of
subsurface scattering, but, I won't explain
that too much. It's just a plain material, basically, which looks
like a mushroom. Yeah, maybe something like
this, and then it's finished. We will only talk about
the mushroom top, which is more complex. Okay, so now let's come
back to this here. After we selected that, I would reduce maybe
the randomness a bit, something like this. That's a bit more aligned, and the distance is already
there. That's fine. And then just dial in here the distance of the
Varna texture like that, that you have this spots
now here, like this. That's fine. I think. All right. And now we have these spots, and now we can just assign
colors to these spots. So maybe let's just do
it like this. All right. Yeah, this to you
should do this to the subsurface color and
subsurface scattering. But I would disable that for now because maybe it's too
slow then and too noisy. But in general, you
should use subsurface scattering on mushrooms because they are pretty
squishy and soft, and this will improve
the look of them. So now we can just
use a mixed note, mixed note on color and mix two colors with
this factor here. Black should be red, with black, I mean,
the air value here. So which means is
RGB notes, two here. One is the white spots, and the other one is the red. Of the mushroom, for example,
something like this. And then you have
mushrooms here. And then of course, you
can set the roughness, glossy or rough or whatever, and then you can dial in
your material of wish here. And then, of course,
maybe you want to use this as a bump as well. Hide like this, and
then you can have bumps on your mushroom here. And I should invert that
that these white spots look like they are bumpy
and not holes. And then you can have
your mushrooms like this. And then the mushroom
in general is fine now. So you can have your mushroom grow now out of this tree
here one by one like this. So this is the mushroom growth. And if you want,
you can now make a appearance color as well. So let's use a mix shader. So I want to mix this shader
here with another shader, which is basically for example, a green emission
like this shader. And then we want to use the
factor with an attribute. We prepared before the fade, which is the distance
of the controller. And then if you
plug that in here, then the distance
of the controller is now a fading color. But of course, this
is way to soft, so let's use a
color ramp and then use the more contrast
here for the animation. You can see This is like a spawning color or
something there. It's a bit of digital. Yeah, it looks like digital
manipulation here, like this. They will have a spawning
color, for example. You can set any material there, how they should look if they are spawning on that
tree like this, and then they're fading from that one color to
their original color. And the spawning color is here. For example, you maybe want
to have a glowing red, and then they will
look like this. And then it will
be a glowing red, and it'll fade to that
mushroom. For example. But for example, or for now, let's leave it on green here. Like this that looks pretty
digitally like this. But of course, that's optional. So now one last thing
about the mushroom color. You can switch between two mushroom colors
with a fading as well. So for example, let's create
a second mushroom color, or maybe want to save
that at first, like this. This is the red, white mushroom. And this is then the fade
green, for example, here, fading or spawning color, which fades then at the
border of the proximity area. And then we could
copy, for example, all of that and just
change the colors here. For example, instead, let
me quickly mix Shader, so we'll mix them later too. But for now, let me just
look at this one here. So for example,
instead of red white, we just pick a different
noise texture maybe, so noise texture
instead of Voronoi. Let's delete that here.
Connect that here, and then maybe use a
little different one. So maybe something like this, this is a different
kind of mushroom, and it's blue, yellow. For example, so this is a different kind of mushroom,
and looks like this. And now I want to fade
from one to another. So let's pull this a bit
back here like this. Okay, so this is
the second mixing actually. Okay, like that. And then let's create
something Yeah, of a gradient
texture, for example. So use a gradient texture, which is a gradient
fa, but, of course, you can use another
controller with proximity as well, no problem. And then use a noise
texture as well here. And math, multiply
them together, that the fading edge
is not that straight. It doesn't matter in this case. It's only black
and white, doesn't matter if you use
color or factor, and then rotate that ops
that X a little bit, for example, like this, and then use this here
in a color ramp. Again, and we want to use maybe
something like this here, which has a low black
value. So let's see. We can even see that here. Let's look. Here you
can see the border. And so if I now move this fading gradient texture
here to the left and right, you can see that the
color is changing at a gradient line multiplied
with a noise texture, here you can see
that here, maybe, which looks like a, not that super straight here. Basically, it's a rotated
line with a noise At the border, which makes it a bit more random, at the border. Without this, it
would look like that. It would be just a
line likely here. And with that, it's just a bit more noisy here
at the border, and then you can
have a transition from one mushroom to
another on the tree. For example, but that's
just another example of how you can manipulate the
shader a bit more. Yeah, but, of course, you
don't have to do that. That's all optional here. But here, you can have
a fading animation with some kind of mask, in this case, it's just
a gradient texture, which looks like this. And then it's a bit
more smooth. All right. So all optional now finished. And that's the mushroom, and now we come to the
tree itself because we need something here
as well as material. So Yeah. That's how you call this the
fade between the two colors. So maybe use the fading
color or fading material, whatever. So like this. Okay. And now let's
come to the wood, so we could call this maybe
the tree material or wood. Doesn't matter. Okay. And now at first, I want
to get some textures in. I got some textures
from Poli Haven. So let's just plug
it in as always in the correct spots here, all like this and like this. You can use UV or generated. If you have an UV,
doesn't really matter. I think I would just
use generated here. Oh, no, I will use U V. Yeah.
That's fine enough. Yeah. So it doesn't really matter
how you map it on it. You have to decide how your
tree should look like. That's up to you. In my case, I have an UV, so
that's totally fine. So let's use here
the base color. And maybe let's do it a bit more backed off because we
want to reuse that later. And then I want to I can
here just make a cut and then use the roughness here in the roughness
plug like this. Then I want to use the
normal like this in the normal plug
with a normal map here because I use a normal map that it's connected
correctly like this. All right. That should be enough three maps
here for this one, and then one more displacement. Because I want to displace
it, of course, too, like this, use the same plug
here for the displacement. Use this in a displacement
node on ight and displace it. But you will see it
later in cycles. Now the displacement is
turned off because we're in EV's, material preview. So now this is my wood material. So let's just call this here. Join and call this wood. Move this down a bit. Then I want to do the same thing here with
a bit of moss materials, which I prepared as well. So a bit of moss. L et's just copy this one here. So like that, then let me
drag everything in here, the roughness, the
normal, and the height. So this is the color,
the roughness, the normal like this, and then the hide, we can use this for
the displacement two. So let's just use this
for the displacement, move this a bit more to that, and then use this again
for the displacement. I would have to calculate the displacement bit differently because I have only
one displacement plug, so we have to add them
basically together. I will do that in a second. Let me a first quickly assign
them here like before. L et's align them a bit on
the on the x axis like this, then make a cut here and
connect this as well. So now I have that branch here and call this here
the moss like that. Now I have to calculate
the displacement, and I will just do this by
mixing two values here. So I will mix this one
and this one like this. Oh, and by the way,
then I don't need the displacement
here because these are only float values. A, come on. This and this. And then the result of that, this I want to displace then, like that here in the
height, of course. So I will mix the moss
height and the wood height. I mix them, and then I displace
the result of that here. I think I want to go
to mid level zero, and then the scale,
maybe a bit lower, like 0.2 maybe, but let's see. And now I want to calculate
the mixing factor, how I want to mix them. So let's move all of this
a bit back, like this. And now it's about
the mixing factor, which will mix both hides here. So here I want to mix them now. And let me quickly, I think move that a bit upwards that I can calculate it here and then
plug it in here, and then it's a
bit easier to see for you if I just pull
it up here like this. So because something is missing, the mixed shader node
here, so mix shader, where this is in, and this is in, and this is then in here. Which mixes these two shaders and mixes the heights of them. And there will be something
similar plucked in because you can imagine the moss height
and the moss material is, of course, somehow connected. And now we'll create something which will mix everything
here properly. Of course, we want
to animate that too, the growth of the moss, and so on, and then
everything will be fine. Okay, so let's continue
with the moss. Oh, by the way, let's maybe
look at all of that in here. So as you can see, it
already looks okay. Only the moss is now missing, which is on top
of the wood here. So let's quickly jump back
to increase the speed, and now let's mix them. So at first, I want to have something like
a moss distribution, and I will just use a
noise texture for that. I think I want to leave
it on the UV here. And then I just have
something pretty low. I have something like this with pretty high detail like that. That it's a bit fuzzy and so
on the edges and everything. And then connect this to color ramp here like this and at the same time to
another color ramp here. So two color ramps for that. You will see the result
of that in a second. And then I want to this is my moss distribution
set up basically. And now I want to have a controller, which
controls everything, so I need to add a second
controller basically, which is the moss
grow basically. So this was the mushroom grow, so the mushroom controller. And now I need another MT
So this is another empty, and this is the moss controller. Okay. And let's jump to
my tree here, right. And then I want to use a
texture coordinate and use that moss controller
location here in this case. So like this, you can see it. Then use a mapping
node here, like this, and then use a gradient a gray dent texture on
a quadratic sphere, which has then a
sphere around it. Around this controller
is now a sphere, a mask from white to black. And then use that here in a color ramp as
well, like this. A bit a bit more hard,
like that, maybe. And now let's multiply
everything here. I want to use a math
multiply two times. And I want to multiply always the sphere graph here with this one and a second
time with this one, where just the distribution
is differently. And the top one here like this, the top one here is
for the shader mixing, and the second one is here
for the height mixing. And what we have built now is a setup where we can have
different things going on here. For example, Let's bring
that over here like that. We have to make the scale
here pretty low for that. That the radius here is
pretty large around this one. So let's look at this here. Change that here. Pretty
much down like this. And we want to have a
similar thing here, but it's a bit shifted, so let me L et's see at that. Okay. So it's time to check
if everything is fine. So this is the result
of the mix shader note. This looks okay. Don't forget to check here the
displacement and bump. So now you can see how
this looks for now. And here, the thing is now, why I have two
different sets here. I can now have the
moss distribution and the hide distribution on
a different scale here. So, in theory, you could use
both for shader and hide, but you're more flexible if you have different things basically. So this is the shader S
for shader and H for hide. And for example, if you
say you want to have moss A bit differently distributed. For example, you have more moss. Then you move it to the right, then you have a bit more moss, or you want to have a
bit less moss like this. I think, in general, it's something like this. For example, you could
do it like that. And the height, as you
can maybe see here, you can change the height
difference individually. So here you can control now, how is the height
difference of the moss? Is it a very dense moss which distributes to
a different height? Or is it just a surface moss, which is only on the surface
and has no height itself? So, of course,
that's a factor too. And of course, let me quickly show you that here.
Let me select that. If you want to have a
pretty nice result, You should subdivide
that, of course, before you or just in general, like this on two, maybe. And then you have
way more geometry to work with. As you can see. Now you can really
do something here to the parts here of the
geometry, or maybe on three. It depends on how nice
you wanted to have. Of course, more geometry
is more detail. And now you can dial in, how I want to have my
moss distribution, maybe something like this. And then, how I want to have my distribution here of
the height of the moss. And then you can have two different
manipulators for that. And then here because we have two different
mapping nodes, you can change here the certain, how do you call it the
mapping of the texture. So let me quickly
show that here. So you can change the mapping
here of the moss here, for example, that you can
change the moss surface. Here of these spots, and then when you
increase the scale, which I would recommend, then you can have
a more dense or a more detailed looking thing. For example, As
you can see here, before it was on one, which is pretty plain, and let's put it on
ten, for example. Then you can already
see its way more yeah, moss looking like
and with a lot of mini bumps here on the surface
and the same for the wood, you could, for example,
double the size here, then the wood gets
more detailed. But it's up to you, yeah, how your textures looking, what textures you have
available, and so on. But by this, you can create
now your wood and moss pretty independently by mapping
them here on their spots, and by creating here this distribution with
that yeah controller here. And this controller, of course, controls that moss
that transition here. Maybe you can see
that. When it's close, then you have the moss
spots you want to, and then you can
mix it like that, that the moss
grows, for example. In this case, maybe
you want to do that. And now you can have your tree here animated
with two controllers. You just have to
animate basically two controllers here and animate the moss wood surface
or the mushroom growth. And then you can combine the shader and geometry
manipulation to get the result here in this little scene of the
tree and the mushrooms. And of course, you can use different light settings to
Stage it nicely in a scene, and then you can animate
your growth samples here, mushrooms, or other
plants, of course, you can just use other
reference objects here to growth little
instances of that in different variations
on your object. All right. So this was the
project here in this course, and I hope you learned a lot, and then I see you
in the next project.
17. Final Project - Part 3: Welcome to the Geometry
notes beginners course. In this video, I will explain how to create
a looped animation, and the reference
will be a plant here, so I will loop this leaf here during the
animation on a curve. There are multiple
approaches on how to create looped
animations in blender. My approach here will be to
create a path like this, a curve with several
points on it, and the leaf will jump from
one point to the next. And by this, it will do
an animation like this, for example, And by this, I will just reassign
the instance here of this plant to one
point and to another point. So this will be the
approach of this video, and now let's get started. So at first, let's
add this curve, which I talked about, like this, for example, Yeah,
I want to have it a bit smaller,
like this here. And I want to curve it a bit. So something like this. You can change this at any time, so it's not that important that it's perfect now, but
something like this, and then the plant will be
on this curvier like that, and then it will decrease
and emerge from here. So it will grow and
emerge from here, and then it will shrink
and submerge here again. And this will be the loop. And now we will do
the whole thing, the whole geometry notes on this graph here on this curve. So now let's open
the Gemetry notes editor and create a
new group like this. And now let's continue. So at first, I want
to create a curve two points note because I want
to turn this into points. Yeah, it's a bit
large. One point. It's pretty large. That's
why it looks like this. But I can then instantly
add another note here, instances on points, which
is then my plant here. As the instance, which should
be on the points like this. So let's do a bit
like that here. So this could be
pretty far here. And now I want to change
something, of course. For example, the rotation, and the rotation
is pretty simple. I can just use a rottular node like this and use the rotation
for the rotation here. Of the curve, while I turn
the curve in two points, I can save the rotation here basically of or the
normal direction, and then I can arrange the leaf exactly
in this direction. And I just use let's just connect that here to
the rotation like this, and I want to use here
the local coordinate, and then I can just dial
in here the rotation. So for example, something
like this or like this, it doesn't matter, so
you could arrange it. For example, something
like this here. Yeah, and then you have arranged it roughly how you
want it to be. And you can select the graph
here in the added mode, and then you can see how this affects the whole thing here. You can just see the graph
looks roughly like this, and then you can see
how the point or the location of
the control points here have influence
on the position. You're not allowed to overshoot it like this because
then you have here a negative steep
instead of a positive here. So you should remain this point. Right to this point here. So this should always
be a right direction. Otherwise, you will
flip it upside down. So but this looks
all right for me. So we can continue
now with this curve, but you can change it at
any time if you want to. So now we can come
to the scaling part, which will be this
one because we want to scale the instances down when they are here or here at the at the start
or at the end. So by this, I just want
to I need some values, and for that, I have to
create now some values. So let's move this
all a bit here. And now I want to
create some values, which will be the input here. So I just press N, open the side menu here, and then I can add
some values here. In summary, we want
to have four here. Geometry that I want to
have the point count, and then I want to
have an offset, and then I want to have a
loop progress basically. But I will explain
that in a second. But you can already create
those then you have them. And the point count
will be, of course, an integer because
point count is one, two, 345, and so on. And then we can start here. To create the loop,
I need a value note, Or basically we can just use an integer node
that's maybe more direct and then use a
hashtag ram on that. And after that, I need
a math ad node here. And then I can directly connect here the loop progress
with this like this. And then we have here the
summary of the loop progress, and the integer here, which is always the frame
count here, as you can see, it will dial up when I
move on the timeline, and then I need another
add node here like this. And here I want to connect
basically the offset. So like this, maybe
something like that. And then here, I want to create
a math modulo like this. And here I want to
create basically a modulo of the value
here and the point count. And by this now this counts
up to a certain point count. And by the way, I think I want to have it on
200 or something that I have 200 different
points here on this curve. That should be enough,
then it would be smooth enough to make this
overwriting motion here. And now I just have to use
a compare node on equal. That's fine. So and now with the index,
we can control this. So if the index, let's change it on integer, so if the index here is
equal to the number here, then this is selected by
the instance on points. So that's fine.
That's what I want. And here you can see now if I play this, it looks like this. So you can see that
every time when the index here is equal
to this modulo motion, which moves from one
point to the other, then The instance will be on that one index here of
the vertex, basically. And then you will have a motion like this here, for example. And now you may see that this is pretty fast here, so like this. And that's of course
because I have to use the point count for
the point count of the actual curve, and
then it's like this. So now it's actual 200 or actually 200 different
points here. Maybe I can increase
the timeline a bit that you can see
it a bit better, like this, and then it will be like that. And it will loop. When it reaches the last vertex here or the last point
of the curve like this, and then it will lop like this. All right. So let's
go back to the start. And now I can use these values I now created
for the scaling as well. After the modulo like this, I can just add a map range. Note like this. And
now I can create here a map range 0-200 is
now a zero to one. Then I can use this in a
float curve like that, and then use this for the scale. And here in this
case, it will just start at zero and becomes a one. But of course, I want to
have it something like this, that it starts as a zero. It ends as a zero, and in the mid here, it will rise and decrease. And now you can just
choose the graph, for example, you can
start a are lower, and then it gets steep, and then it gets steep
again and like this, so you can just play
around with it. But by this, you can just create the graph
you want to have. And if I play this now,
it looks like this, and it starts a bit
slower, then gets steeper, so it grows faster, and then it decreases
faster again and then goes down like this
and will start again. And this motion
will be looped now. So this is how you could do it, for example. For one leaf. And what we're going to
do now is now I want to go out of this
basically and group this. So I just select all of this, Control G, I group
this into this note. And this note, I can
call now, for example, so press N, and you can
now rename that note. Now, sorry, it's not here. It's actually here. So you can make this a bit
larger and rename this. And for example, this would be a single leaf motion,
this one here. And when you press tap, you can jump into that
node here like this. All right. And if you tap again, you can jump in and out when
you select it. All right. Now, this one here is
fine for one leaf, and I just want to duplicate that four
times, O, by the way, if you want to, you can press
control shift to make this, and this will create a connected version here
too. But in this case, I don't want to
connect everything, so I will just duplicate that and reconnect
it a couple of times again. So I want to have
four, for example, if we want to have four
leaves in one loop, then you can create four times this one single
leaf motion here, and then I can
reconnect all of this. And in this case here, let me quickly with
Control R click, you can do this here that you create another
branching point here. And by this, I can do that. But this one here, I
don't want to have, so the third one here should be always manually adjustable. And if you don't
remember what this was, this was, here it's
over written now, but the third one is actually the offset here inside
of that one leaf motion. And now I can just connect this one here and here and
here, and if you want to, you can just move this branch over here that you can
maybe seed battery and connect this here as well to the last things here like this, and the count of,
as well, like this, and what I created
now is I created now four leafs here at
the same position. Here. Now it's four
times the same. It's not really connected now, so I want to use
a joint geometry here and connect all
of the strings here. So now I created four, and they're at the
same position. And with this slider, you can
now create an offset here to move one of these copies.
You can see that here. And because I have 200 points, I maybe want to have a 50 offset on everyone so 50, 100150. And when I now hit play, you can see you have four
evenly distributed leaves now on one loop. And you can control
all of this with that only single with single
curve here, nothing else. On curve to control to rule them all. Yeah,
you can tell them. And now you have one
loop created here, which you can now freely
adjust with this. And now what I want to do is, I want to create another
version of this. Let's jump back here. Oops. And now let's
do the following, which is, I want to copy
now these ones here. Like this. And I just
need to, you know, re assign here the
original points like this, this and this here, like that. And now I use another joint geometry here
and connect them as well. So I created now another
four leaf arrangement here. And if I now Do this, sorry. Of course, I need
another joint geometry here and then connect this here. Now, I created exactly
the same thing again, exactly on the same
position here. But the thing now is I can now rotate this with a
transform geometry, for example here,
and then I just have to rotate it on the z axis. And for example, if
you want to have three of these four stacks, I just do it by one third
of a circle, so 120 degree. And then it looks like this. And now they are moving
exactly the same, and if you want to make
a little offset here, you just change the
offset values here. For example, this is 25. This is then 75. This is 125, and this
is 175 like this. And now you created
a different offset. You can see that
here, they're now at a different state
of the animation. Because the offset
here is different. Yeah, every offset here is one single leaf offset
on the whole loop. And yeah, now you created
another offset here. For example,
something like this. And just to show you that how fast you can
now add one more, I will make a third one here. So I just copy this here
again. Wait a second. In this case, I could
even do this one here because you don't
have to reconnect it with the control shift copy. In this case, it would be fine. To copy this, then I have to join them without
right click. You can make this lazy connect to connect this a bit faster, and you can miss it a
little bit, this node here. And then after that, another transform
geometry like this, and then I want to
join them here again. And now I just have to
set this offset to 240, and then I have the
third one here. And then I can just
pick another offset. You can make this
unevenly as well. For example, you have here a zero offset on the
first, T rate 25. So you could pick here, for example, 15 sorry,
15, for example. And then here, I
don't know, maybe 60, and here you can pick something like 100 or an air
that's maybe two even, but maybe 110, and
here you can pick 160. And then you have a little
bit uneven offsets here, maybe, but now they are
all a bit different. And you can see that. They all rise on a different
position here. Or a different timing, it's better to say
that, a different timing of that loop here. And now you can create
loops like this, for example, with different
offsets and pretty easy. And the best thing about this
setup is here, you can see. The best thing about
this setup is that you control all of this only
with one single curve here. So after you set everything
here in the notes, you can now do this. Yeah, you can change the
arrangement of all of the, sorry, no, I did this mistake. You can now change the
arrangement of all of the three branches here
with one single curve, and they will all
be mer basically. Yeah, you do whatever
you do here, you do the same
thing here and here. And now it's very
easy for you to control all of this
because you can now just do this and
that and make this longer or shorter or higher
and lower and so on. And now you can just control
it with one single curve. And that's often
what we want to make complex things easy with procedural things in
geometry or with geometry. Yeah. And then you can have
your nice looped animation. So this was the project
for this video. I hope you learned a lot
and are now able to create little loop animations with
easy controls on one curve, for example, and I will
see you in the next one.