Transcripts
1. Welcome To The Course: Have you heard about a future of the CG industry? Its notes, procedural modelling has arrived in Blender and it looks set to change the gain of the CG in the string. If you want to learn about this awesome new way of creating objects and entire scenes in blender. Then this is the watts course for you. Here whereby you design. Our goal is to give you the best possible educational concepts and resources to upscale in any CG related topic, from 3D modelling to texture painting to animation. Who is this course aimed towards? This course is for users or blender free day who want to upskill in creating objects and scenes completely procedurally. This will allow them to create their objects and then edit post objects using nondestructive methods to improve overall workflow, both in terms of creating an individual objects and also an entire scene. Using the right notes. A basic knowledge of 3D morphing in blender and the use of nodes to create materials will go a long way for you in the early stages. As these will help you to cover the basic concepts of using geometry nodes. Beyond that, it is important that you have blender version 2.92 or newer installed on your device as geometry nodes do not exist in older versions, such as better version 2.91 and older. In this course, we starts off simple introducing the note editor system that those who may not be familiar with notes. We then create our first shape using nodes, which will be a simple share using a combination of just two different swipes of notes that will be used to create an entire object. We create a few more basic shapes, introducing more nodes along the way, such as booleans and the objects in from node a to further manipulate our shapes. Then in the next section, we begin making our objects truly procedural by creating and exposing parameters that will allow us to adjust our models that we create in real time. This is where we really explore the power of procedural modeling using notes. Going through. We will cover the roles of each node that we use to create our models. Explaining how they work and how different combinations of nodes will affect the final outcome. After that, we take things to the next level, once again, by going from creating 3D objects to entire scenes, by using what are known as points nodes. Think of this as the node system's way of creating particle systems. And then up again are we introduce, describe, and demonstrate new notes in this section and how they work, including the aforementioned point nodes to create our object instances and the attribute nodes for controlling things like the rotation and scale of our individual objects. The main goal of this course is to beat the one-stop shop course for you to learn everything he needs to know about geometry nodes in blender. There has never been a better time than right now to begin learning this brand new skill. Not only is it in new to you, but it's also new to Blender itself. And it looks and to change the gain or free day for many years to come. Site, what are you waiting for? Let's get started.
2. Accessing The Workspace: To begin our journey, we first of all need to access the geometry nodes workspace. You do have the option of just recreating the layout workspace
to use geometry nodes. For example, we can click and drag to
bring up the timeline. Then we can change the timeline to the geometry nodes editor. This will allow us to
begin working with geometry nodes in the
layout workspace. However, for the
sake of consistency, we're going to be using the predefined geometry
nodes workspace. Come up to your workspace tabs at the top of the
blender interface. And off the compositing, you should find geometry nodes. Depending on the font size
of your user interface, this might not be visible. You might need to scroll through this list to reach
the geometry nodes tab. Left-click, and it
will take you to the geometry nodes workspace. This workspace is
comprised of five panels. The first panel in the top
corner is the outline panel, which is used in most
workspaces and allows you to select objects and
the objects hierarchy. Then we have the
properties panel. This is going to be useful
later on once we begin using our geometry node
tree as a modifier. We then have our 3D view port, which is going to allow us
to view the changes that we're making to our 3D objects. The node editor, which
is currently empty, is soon going to be filled
with many different nodes that will allow us to procedurally
recreate our objects. Finally, we have
the spreadsheet, which is effectively
just a data sheet that comprises of
different forms of data, like the positioning of
our vertices or even the ability to define the smooth shading for
our individual phases. There's a lot of potential
with the spreadsheet, but we're going to
be coming back to this at a later point. For now, we're just
going to focus on the fundamentals of using notes.
3. Adding Your First Node: Now that we have access
to our node setup, we need to add our first
nodes into Blender. To do this, just click on the New button
that you see here. This will add two notes, the group inputs
and the outputs. The group output is
primarily used to show the results of your
node tree on your model. The group inputs allows you to edit this result
using the motor file, which we can actually see here. You can take values that
you use in your no tree. You can connect them to
this group input node. Then they will be
visible here in the motor forearm where you can edit the effects that sure
modifier has on your objects. If we take a closer look
at each of these nodes, you will see that we
have a socket for the group inputs
labeled as geometry. This is actually an outputs coming from the
group input node. The opposite is true for
the group output node, which has a geometry
inputs socket. This geometry refers to the base objects which
in this case is a cube. The output is what
happens to the object after it has been transferred
form the group inputs, fruit of various nodes that
we use into the group output. So any changes made in the node tree would
be visible here. At the moment, nothing
is going to change with our objects because there are no nodes in-between these two. We're going to add
our first node. Now, if you've ever done
programming before, then you might be familiar with the first ever lesson for most
courses that you'll find, which is to print hello
world on your screen. Board Geometry notes, we
have something similar. We always start
with the same node, just so we can understand
the basic concepts of the geometry node system and
that is the transform node. To add a node, you can go to the Add
menu located here. You can also use the
hotkey Shift and I, which is what I'm going to do, bring up my Add menu. There are many different types of nodes that we can work with. By the way, at the
time of recording, we're using Blender
version free 0.1. We recommend you have
at least upgraded to this version to
continue the course. Going back to our Add menu, we have various different types of nodes that we
can choose from. The one that I'm going to choose here is the geometry time. In this list, we can find transform because there
are so many nodes, you might find it easier to search for the node if
you know what it is cold. So you can click Search and
then type in transform. It predicts what you
want to type in, which is very handy. So we can just select transform. Now what we can do is as
we hover the transform node over disconnection
or noodle as it's called, the noodle blue highlights. This indicate that if
we were to left-click, then the transform node would automatically attach
to this noodle. We're going to left-click. And now the noodle
is now flowing into the geometry input
voltage transform node. And then out of the
geometry output. For this transform node, we can manipulate the
translation, rotation, and scale. This is very similar
to using the grab, rotate and scale tools
in the 3D viewport. So we can just
manipulate the X1 and Z values to change the
location of our cube. We can manipulate
the rotation here. We can also manipulate
the scale of our objects. The key difference to
note here is that we are editing the geometry
of our objects, not the object itself. We have our objects origin
located at the center. If we manipulate the
cube on the z-axis, you will see that the objects
origin is not moving. This is very important
to remember as it changes the way the actual
objects can behave. If you were to then rotates in the 3D view
port or even scale. Because now the
geometry has been positioned away from
the objects or chain, which changes its behavior. Now, I'm just going to
reset this back to 0.
4. Introducing Data Types With Vectors And Floats: When working with
geometry nodes, we can manipulate various
different types of data. With the transform node, we are looking at factors for our translation,
rotation and scale. Effects are basically represents
the use of free values. This can be the free
axis, x, y, and z, or it could also be the R, G and B current channels depending on the nose
that you are using. If we take a closer
look at the sockets, you will notice that the
geometry socket is green. Both of the inputs
and the outputs. The translation,
rotation, and scale values all have these
purple sockets instead. Purple in the case
the vector type. What we can do though, is we can change our various datatypes using different nodes and approaches. For example, let's say I
wanted to change the X, Y, and Z values of the scale form a factor to a float,
a single value. I can do this by adding a special type of node
called a value node. I'm going to hit shift and I, the value node is located
in this input category. Come over to where
it says value. And left-click, I'm going to
position my value node here. You can see that the
value socket is gray. This indicates the
use of a float value. I'm going to click and drag
and connect it to the scale. The factors for my
scale disappear, as does my cube. But now we've connected
it up to this value node. The reason why the cube is disappeared is because
the scale is set to 0. If I click and drag
on this value node, you can see that we are
able to scale up our cube. If I type in a value of
one that is the same as scaling it up by a
value of one on the x, y, and z axes at the same time.
5. Isolating Vector Channels: To get even more control, what we can do is we can isolate effector into free
individual float values. In the case of our scale, if we just disconnect this, we have our x1 and Z channels. We can manipulate
these independently we want by separating them. To separate your vector, we actually have to use a
node called combine XYZ. That might sound confusing, but it's named that
because of the way that your no tree is going to
flow when it's completed. We're going to hit Shift I. And this time let's just search for our combined XYZ node, which we'll find here. Left-click and position. The combined XYZ node
allows us to attach it to a vector using this vector output and
then manipulate the x, y, and z values as
individual flows. We're going to
left-click and drag to connect our fixer
output to the scale input. But before we do that, I'm going to zoom in. And you will notice that the shape of the
sockets changes. In the case of our
combine XYZ node, we're working with
what are known as fields or potentially
working with fields. A field is a function that is used to manipulate the
data flow of our setup. As you continue to learn
the various nodes, you will see that our sockets
will ever be circular, which indicates specific data in the form of floats or
vectors, geometry, etc. You will also notice diamonds. Sockets, sometime in sockets will be completely filled in, like the circles, which in the case of pure
functional values, they are purely used for flows. On the other hand, you see certain sockets that are
of the diamond shape, but also look like they have a little dot in
the middle of them. This is in the case
that the socket can use either a float or
traditional data. Now, we're going to click and drag and connect the
vector to the scale. Now what we can do
is we can manipulate free values independently
on the x, y, and z. This doesn't appear to be any
different to what we could do in the transform node itself. If we just disconnect that, we can see we can
do the same thing in the transform node. What's the point? Well, there are many reasons
as to why you would want to isolate these three
channels as individual flows. By the way, you will notice
that the sockets have changed shape because now they are
representing data values. What we can do is we
can, for example, connects the z value to the value node and use the value node to
control the z-axis. But again, we're not
changing the behavior, each just changing where we
can manipulate the value. One thing that we
can do, however, is connected this value
output to multiple inputs. We could connect it up to the
x-axis and also the y-axis. Then manipulate the value node so that we scale on both of
those axes at the same time. This gives us the ability to adjust the
whites of our cube, as well as the width and
depth at the same time. This is a very simple
example of what we can use the combined
XYZ node four.
6. Exposing Parameters To The Modifier: So far we've introduced a couple of different
types of nodes. And we've also
introduced the types of sockets that are used in
the geometry nodes system. But what we're
going to do now is focus on the modifier aspects. As we mentioned a few
lectures previous, we have this group input node. If we zoom in on
the group input, you will see we have an empty
socket which we can use. What we can do is we can expose certain parameters in our node
tree to this group inputs. For example, the
translation vector is available for connection. If I hover over this input, it gives us little prompt telling us exactly
what data is stored. Here. We have the data of our
translation set to 0, zeros 0. If we increase this value, then the value changes in this little plums as we hover our cursor over this socket. This means that the data from this socket is going to
be transferred to here. Once it's connected. I'm just going to
revert that back to 0. Then we're just going to connect
this to our translation. This does a couple of things. First of all, it adds
translation to the group input, but we can't actually
change anything here. Instead, we have to
go to the modifier. Now if you're not on
the modifies tab, who might be here? Come down to where
we have this wrench. And left-click. You can now see that we have and what geometry
nodes modifier. And we have exposed the
translation values. We have the ability
to adjust the X, Y, and Z values of our objects, or at least the
objects geometry. We can use our group
inputs to expose the various types of data that
we use in geometry nodes. Not only can we use
it for better values, we can use individual
floats as well. Here I'm going to
click and drag more at c value and position
it in the group input. This gives it the name z. If we just move our value node, you can see we have
that connection. We also have the
availability to edit this parameter in
the modifier itself. Like with the value node here, we can use a single output
socket for the group inputs. We can position it in
multiple different inputs. I'm just going to
delete the value node because we won't need
it for the moment. I'm just kind of click and
drag to connect the x-axis. And then using the same socket, click and drag again
and connect to the one. Next, I'm going to just
open up my side panel. I can do this by
pressing the N key. I wanted to do is I
want to, first of all, reorder these two here. And then I want to rename them. I'm going to come down
to where it says group, where we have our
inputs and outputs. I'm going to select the C input. I'm going to click
on this button here. So we have these up
and down arrows, which can allow us to reposition
the theories sockets. Left-click. It basically swaps
these two over and just cleans things up here
with our connections. So there's not as
much overlapping. I'm now going to rename this, which we can do down here. Left-click and rename it as
heights and press Enter. Now it's renamed as Hunt, both in the group
inputs as well as here in the geometry
nodes modifier. This is where the
true potential of geometry nodes starts to
become more apparent. Because you can isolate
the values used to control your creations and expose
them to your modifier. You can't get full control over your procedural objects form a single motor phone I block. This makes it easier
compared to waste is changing the same values in the geometry
nodes tree itself. With the x-value. We're going to rename this
as size and press Enter. Now, we can adjust the height of the cube and its
size independently.
7. Using Two Of The Same Node: When we look at
our current setup, we might notice a
problem that would appear if we were to use
this setup to create, say, a building where we wanted to increase the height
of that building. When you want to
scale the height, you want the geometry
to go up, but not down. You want the base to mine
exactly where it is. For example, I'm going to shift and I in the 3D view port. And I'm just going to
add a plane object, open up the operator panel
and increase the scale. We have small plane here. And at the moment, our cube or building as it were, is half above, half
below the plane. If we select the cube
and increase the height, it will increase the
height correctly. But it actually increases the height both
upwards and down. What we want is to be
able to have the base of the cube sat on applying
when we increase the height, only increase the
height upwards. To understand how to fix this, we need to have an
understanding of data flow. Data flow is where we have the geometry that is being
input into this node tree. And it's being moved
across through the various nodes towards
the group outputs. As we add different nodes, they lie on the node before them to edit
the actual model. When we using a single
transform node, this is a single point in
the process of our Dataflow. When we manipulate the
location, rotation, and scale, here, we are doing so
at the same points. But what we can
do is we can edit the translation
or location using one node and then
use another node for the scale that they are at different parts of
data-flow process. What does this mean in practice? Well, for us, we're going to
use a second transform node. I'm going to detach
the combined x, y, and z from here
at the moment. What this basically
means is that the size and heights
parameters that we created no longer work on the model because
they're not actually connected to the
data flow that goes from the geometry inputs
to the group output. What we will do next, however, is duplicate our transform node. I'm going to hit Shift M to create a second
transform node. Hover it over here
and left-click. This is interesting in how
it works because before, if we manipulated
the scale here, it would manipulate the
scale from the center point. We were to increase the translation on the
z-axis to a value of two. Then increase the scale again, the behavior is
exactly the same. However, if I just position
this to a value of one, we now have the cube
on top of our plane. Adjusting the same scale value still doesn't work no matter what position we place
it on the z-axis. But watch what happens
if I manipulate the Z value of the
second Transform. Click and drag. And now it's being
pushed upwards. But note down, this is
because of dataflow. We have the base geometry. We manipulate the
translation value using this node which is currently
exposed to our motor file. Whether it's exposed or not, it doesn't matter because it's
still does the same thing, just in a different place. The next node, the
second transform node, is the next step in the
dataflow is process. It is using the data from the first transform
node as the base. This is what allows us to manipulate the
scale differently. For this transform node, the value of CBO on the z-axis is the value of 0.5
or the value of one. Here. The question
now is going to be, what do you link the
combining z1, z1, z2. Is it going to be attached to the first transform scale,
the second transform? The answer is the
second transform, because we want to
expose the behavior of the scale from
this second node. Click and drag to connect. Now if we adjust the size, it works the same as before. But if we adjust the height, we are now able, if we just zoom out a bit, we are now able to
adjust the height of our building without any of the geometry falling below
the surface of the plane.
8. Changing Input Types: When working with
the various inputs for our group input node, we have the ability to change the type of data that
it wants to use. Berg sample, we're
currently using float values for our
height and size. What if we wanted to use
just whole numbers instead? Currently, we can manipulate
based on a decimal point, which is what a float value is. But what if you wanted to just manipulate in whole numbers? So 123, etc. Do that. You would simply select the
inputs from the side panel, come down to where it says type. Left-click. And you have all of these different data
types that you can use. Here. I'm going to change this
from float to an integer. Now if we take look
at the modifier, the height is set to 0. But if I click on
the arrow here, it increases to one
click again and increases the 234, etcetera. This is preferable depending on the type of parameters
that you want to use. In the case of a building, you may only want to
create the height of your building in increments
and control it as such. The same might
apply for the size, select the size value, and change it to integer. You will notice again that the different sockets
have different colors. This is a good opportunity
to experiments between these various different
datatypes and just memorize the colors that are used to
represent each type of data. I've changed the
type to string here, which is this light sky blue. In the no trees self, the noodle that connects the size to our x and
y-axis appears red. This indicates that we have incompatible
connections here. We can't connect a string
value to a float value. This is just a useful visual
marker that will allow us to see whenever we have incompatible data types
connected to each other. Make sure to go through
each of these just to see and memorize which cannot
represents which datatype. You don't need to know
exactly what all of these data types are
used for whites now. But it is a good opportunity to familiarize yourself
with each of them. For now, we're going to keep
the size set to integer. Finally, let's just temporarily change the Fetzer translation. We can change the type of effector and let's
change it to a float. Remember that with
the effects of value, we have free different
values to control. If we were to change this
from a vector to a float, we are able to use it. But now if we manipulate
the translation value, just increase the
size and height. Then it's going to move our object the same
value on all three axes. This is an example
where even though we could change the
datatype of our inputs, it's not actually going
to be useful for us. This way. We can
see when we need to change our different data
types and when not to. For this, I'm just
going to revert it back to a traditional vector. Then set the z value. One.
9. Changing Values With The Math Node: The next node that
we're going to introduce is the math node. The math node is going to
be your best friend for controlling the
various parameters that your geometry node
tree is going to create. For example, we have
our height value, which allows us to increase our heights in increments
of single meters. This is based on the original
sizing of the cubes. We can increase the
amount of control that we have over this parameter by
introducing a math node, I'm going to click
and drag to move my transform node up just a bit, then hit Shift and I. Under the utilities category, we will have our math
node left-click, and we're going to
position it in-between the combined XYZ node
as well as the scale. If we do it here, then we will be able to manipulate all free
of our combined X, Y, and Z values. Here, I'm going to change the math function
from add to divide. Then I'm going to
increase this value. We're going to
increase it to two. This basically halves the effect that this number
has on our model. Default cube has a
height of two meters. By creating a math node that
divides the value by two. Then this height value here goes from two meters
down to a single meter. If we were to increase
this value here even more to evaluate a four, then we're taking the which
new scale and dividing it by four before we pass it through
the combined XYZ node. This means that our height
and size values now represent a value
of 0.5 on the x, y, and c axis. The position of the math node is going to change its behavior. For our node tree. Let's reposition our math node Saturday only
affects the height. We can do this by
repositioning it between the height inputs for the group input node and the z-value of the
combined XYZ node. It is recommended
when using nodes to have the Node Wrangler
add-on enabled. This will allow you to do certain things that you
can't do without it. To enable the Node Wrangler, just go to the preferences panel located here under
the Edit menu. Go to the Adams tab. And in the search bar, just type in node and make
sure Node Wrangler is ticked. Then close the
preferences panel. For the sidetrack. It's just very important that
you have the Node Wrangler add-on enabled to maximize
your functionality. Next, hold down the Alt key and left-click on
the divide node. Then grab and G will see that it disconnects from the
component x, y, and z node. And the noodle reconnects
in-between combine X1, z and the scale. Now we're going to highlight it over the heart
noodle and release. At this point, the math node
will only affect the value. It will no longer affect
the x and y values. You can see the
difference to this mix, to the cube itself. If we increase the
height to two, then the whites of our
cube is one meter. Again, remember that the
original height was two meters. I value of two divided
by four equals one. We can increase the height to increase the total
height of our cube. And we can manipulate this
divide value here to change exactly how much influence this parameter has on
the height of our model.
10. Creating Fake Users: Let's now take a step back
from the notes themselves and just focus on a couple of
little house cleaning tips. The first thing I'm
going to show you in this video is just
renaming your node tree. Currently we have our geometry, we know it's modifier, and within it we're using
the geometry nodes tree. By left clicking here, we can rename the no tree. We just rename this as one to indicate that this is our first node tree
and press Enter. This changes the name
here, as well as here. What we can do is we can unlink this node
tree from modifier. Do that, just click
on this X pattern. When we do this,
everything vanishes. While we have our
geometry nodes modifier, it's currently not in
use because we're not using our one no tree. We can left-click here
in the modifier and select the one no
tree from this list. You'll notice there's
a 0 next to it. This indicates that that no tree is not being used
by any objects. If you were to close Blender, even after saving it, you would lose this node tree when you return
to your projects. If we were to click on
this New button again, we would add a
brand new no tree. So we're just going to
rename this as two. If we open up this same many, but this time from here, you can see that we have
122 is company being used. So there's no 0 in front of
it because one is not used. It has a 0. This indicates that
when we close Blender, one will be deleted, but two will be kept. If you will know
tree is valuable, but it's not currently in use. You might want to create a
fake user for that node tree. To create a fake user, click on the shield icon
located next to that night. Left-click and it will appear blue with a tick in
the shield icon. If we return to this menu, one has a 02, has an F stands for 0, uses. F stands for fake user. This means that regardless
of whether or not the second node tree labeled two is being used by an object. It is always being used by a fake user or an object
that doesn't actually exist. This means that if we
were to change back to our one no tree and
return to this menu, we can still see that F
is the prefix to two. Even though too is no longer
being used by an object, it will be maintained
by our Blender project. When we save and close, ensure, make sure to add a fake user to any node
trees that you want to make sure our maintains when you shut
down your projects.
11. Using Your Node Tree With Other Objects: One of the biggest
advantages to using a procedural no tree
is the ability to transfer that data
very quickly and very easily to any of the
objects in your scene. Sample. We have our base cube here. And I'm just going to get
rid of my divine node, or rather just use the
default value to one, which is the same as it
not doing anything at all. And then I'm going to position my key back
on top of the plane. So this is the
functionality that we had a couple of lectures ago, where we have our cube sat on top of applying and we can meet any appellate both its
height as well as its size. Where this is useful is
when we were to create a second object and then use the same node
setup for that object. I'm going to hide my cube object by clicking
on this button here. Then I'm going to
hit shift and I go mesh and select cylinder. Now we have a completely
different objects for our projects. What I'm going to do here
is instead of click New, I'm going to left-click and
we have our 12 nitrates. If I select one,
nothing happens. The reason why is, even though we do have that
no tree in our project, we don't have the
geometry nodes modifier active on the specific model. We need to click
on this new option first to create
our new modifier. And you can see it
in the modifies tab. Now we're going to open
this up and select one. As soon as we do that. We can see once again, all of the nodes form
our first no tree. We can no longer see
the cylinder because the values refer back to
their default values. You can control
these default values here in the side panel. For example, I might want to set the default height
and size to one H. So I can change
this value to one. Then this value to one. That's not gonna
change anything in the modifier when it's
already been created. But now if I was to just
delete this objects, so I'll hit delete. Then we add a cylinder, create a new geometry node tree. Bring in my one no tree. You can see that
the size and height are this time set to one. H. Can do the same with
more at translation. Set this up to one
as my default. That would be applied
the next time I attached this geometry knowledge
tree to a new objects. But going back to the power
of the modifier itself, we can now use the same no tree that we
created for our cube. We can use it to adjust the height and the size
of our cylinder object. Even though it's a
completely different model, we're able to edit it in the same way that
we did our key. That is really the true power
of using the node system.
12. Replacing Object Geometry With A Mesh Primitive: You don't always need to use the geometry form your
original objects. You can also choose to use what are known as mesh primitives. Let's take the
cylinder for example, and I'm just going to rename the cylinder blank in the
k. That is a blank canvas. We're not going to use the geometry of this
cylinder anymore. Instead we're going to use
a Mesh primitive node. Hit Shift and I to bring up your Add menu and then go to where it says Mesh Primitives. Here we have a list of all the primitive objects that you can use as the
base of a new model. For example, let's select cube. Then we're going to connect
it on the noodle between the geometry output and the
translations geometry input. When we do this, you
will notice that it disconnects from
the geometry output of the group input node. This is because it
has nowhere to go to. The cube itself is now
creating the geometry. It doesn't need the data
from this geometry output. This is different
from just using the default cube in
the 3D viewport. Because now we have
the ability to procedurally edit the
base size of our cube, as well as the amount of
geometry that it possesses. I'm just going to revert
the size back to one. You can see by the way
that even though we have changed the target once
again to Mesh primitive, the effects that the other
nodes have remained the sign. Here. We're going to just
change the sizing to two so that it mimics
the original cube. And we can also edit the vertex count on
the x, y, and z-axis. If I zoom in, you can get a better
view of all of the values that you can
change for the cube objects. It's difficult to see the vertices on your cube
in the current setup. So I'm just going to make a couple of changes
in the viewport. I'm going to open up
this overlays menu here. And we have this wireframe
option for our geometry. I'm just going to left-click
to enable this option. If I was to increase more
vertex count on the x-axis, for example, you will
now be able to see the geometry in solid
view in the 3D viewport. This is a useful method
for being able to fuel your geometry without having to go to wireframe, for example. Again, the beauty of using
the node system allows you to switch out this primitive with other primitive
objects as well. So you can test the
different objects that you have available to
switch out a node, hold down the Shift
key and press S. This will work with the Node
Wrangler add-on enabled. So make sure that that box is ticked in the
preferences panel. I'm going to change this
Mesh primitive to account. Now, we are using a cone object. Instead of a cube objects. We can manipulate
its vertex count. For example, the number
of sides, segments, segments which you would
find at the bottom, as well as the radius on the
top and bottom of our cone. Just as a few examples for what we can do with this object. We could also use
say, a cylinder. So Shift S, switch to Mesh
Primitives and then cylinder. Again, we can manipulate
the vertex count, the sides segments,
the field segments, which you can now
see at the top, the radius, and the depth, all from this single node. Then we can get
more control over some of these parameters
like the scale, by using the transform and combine nodes and then exposing
them to the group input. So again, even
though we have made changes to the base model, if we manipulate the heights, that behavior is still the
same as it was before.
13. Creating Instances Of Geometry With The Join Geometry Node: Let's dive a little
bit deeper into the world of data flow now by introducing instances
of your geometry. Every time we send data from a Mesh primitive
node or the geometry node out to something
like a transform node. We are creating an
instance of that geometry. Let's revert back to
a simpler node setup. We'll choose our two now tree here and start from scratch. I'm going to add a
simple cube note here. Shift I. I'm going to go to Mesh
primitive and select cube, and then left-click here. I'm also just going
to get rid of the plane objects for now. So we can just see
our cube model. We have the basic data here for the size and the
number of vertices. But we can manipulate the transforms of this
cube as we already know, by adding a transform node. I'm just going to
go to Geometry, select Transform
and position here. This again allows us to
manipulate the location, rotation, and scale
of Fisk cube. Now this transform node follows the data flow coming
from the cube node, true to the group output. This is one tree, one instance. We can create a second branch by adding another
transform node. For this first transform, I'm just going to move it along the x-axis by a
value of minus two. Then I'm going to hit Shift D to duplicate and position a second transform node
directly underneath. I'm then going to position
this node to 0 on the x-axis. Because the node is not
connected to our Dataflow, it has no impact on our model. We can click and drag
form our mesh output for the cube node and plug
it into our geometry. Again, this changes nothing
because even though the dataflow is sending the
cube data to both transforms, only one of them continues
to the group output. If we click and drag the second transform node and connect it to
the group output, we can now see the data
for that transform node, but it replaces the first one. What we want to do here is use both of these instances
at the same time. We can do this by using what is known as a join geometry node. I'm going to hold down
Shift and press i. Then I'm going to
go to geometry. And this time select
joint geometry and position here just in
front of the group output. If we zoom in on our
joint geometry node, it looks fairly straightforward. We have a geometry input
and a geometry output, but the shape of the geometry input is different to what
we've seen so far. It's a more oval shape compared to the circle
shape that we normally see. This indicates an
input socket that can hold multiple flows, a Beta. In the case of the
joint geometry node, it can take data from various instances and
join them together. For example, we
can click and drag the first transform and position in the
joint geometry node. Remembering to of course connect the joint geometry node
to the group output. And there's our first cube. Next we can take the
second transform node and also plug it in to our
joint geometry node here. Now, our second appears. With the joint geometry node. We are able to see both data
flows coming form our keep. The effects of both
transforms on our node setup. We can add one more node here. So I'm going to hit
Shift D position. The third transform here. Set it to a value of two. On the x-axis and just take the cube output and connect
it into the transform, and then connect the transform
to the joint geometry. Now I have a grand total
of free cubes in my scene. As a result of my
geometry, nodes tree, little housecleaning
tip, you can minimize your nodes
by just clicking. If I just zoom in on
the transform node, just clicking on the little icon at the top of the
node to hide it. You can also press the H
key to do the same thing. If you press Control
and height h, then you can hide all of the sockets that
are not being used. If I just press
control and hij again, you can see we've
got our translation, rotation and scale values, but they're not being used or connected
to any other nodes. If I hold down control
and then press H, I can hide the unused data. We can do the same thing with
the other two transforms. We've control and height h. And that just reduces
the amount of clutter in our node setup. If you remember back when we
introduced the math nodes, then using the nodes in specific areas will change the way that they
affect our objects. What we can do here is we can control the location, rotation, and scale of all free of
our cubes at the same time. To do this, we can
add a transform node. After we have joined
the geometry. I'm going to hit
shift and I go to geometry and select Transform,
then position here. Now, if I manipulate the
z-value for myLocation, it affects all free of my keeps. If I manipulate the
Y rotation, again, it affects the rotation
of all free cubes, but it does so the origin point. Again, this can be different
to the effects that you will see in the individual
transform nodes for each cube instance. If we manipulate on the y-axis, in this end transform, you can see that the two side cubes orbit around
the center one. However, if we select
this transform note here, hit Control H to view everything and then change the rotation
value on the y-axis. Then it rotates on its own axis or not the
center points located here. We can also
manipulate the scale. I'm just going to restore this back to where it
was before we control H. And we can manipulate the scale
of all free of our cubes. At the same time. Let's finish things off
with a mini exercise. As we continue to go
through the course, we're going to be introducing
mini exercises is based on the skills that you have learned in
previous lectures. So in the previous lectures so far we've learned through
many different things. And one of the things
that we were able to learn with the ability to use
multiple transform nodes, two edits, the
location, rotation, and scale at different points
of the data-flow process. I have a little mini
challenge for you. I want you to position the individual cubes
up on the z-axis by a value of either 0.5 or one wherever it takes to position them on top of the grid plane. Then I want you to
be able to scale the individual buildings or
blocks using the scale value. But do you remember the
best way to do this? Just give that a quick
go and then we'll recap. What we're going to do now
is we're going to start with this top transform and just hit Control H to bring
everything back into view. I'm just going to use a z
value of 0.5 and press Enter. Now that positions this first
cube on top of the grid. But if we manipulate the
scale as we already know, it's going to scale
in both directions. What we can do instead is we
can add another transform node holding Shift and I, going geometry and
then transform. And then we're just going
to position it here. The reason why we don't
duplicates the which controls form is because if we
were to duplicate it, it would just mimic
the location values. If we don't want it to, do, we want to keep those
location values back to where they
were initially. That's why we just add a new
one in, in this instance. Instead of duplicating. Again, I'm just
going to hide that. And now if we
manipulate the scale, it manipulates the
scale but keeps the base in the same location. So all that's left
is just to repeat this process for the two
nodes below in the no tree. Here, we can duplicate it. We hit Shift and
D position here. Then we're going to
just open this up. We've controlled and H If we were to increase
it, it doesn't work. But if we were to change
the transform node beforehand to evaluate
at 0.5 on our c-axis. Then now we should be able
to get the correct behavior. Excellent. Let's just repeat this
process one final time. Shift a position, open
up the transform node, change the z value, 0.5. Close it with control
and H. Open up this one. I manipulate the z-value. Now we have the transform nodes used to create each
cube and position them. And then we have a second
transform node for each flow of data that is used to scale
each of these independently. We join these geometry nodes together with the
join geometry node. And then we use the
transform node after it to manipulate
the translation, rotation, and scale
of the entire group. We can once again use this exact setup for
different objects. So we can just take
our first objects, which is the cube, hit Shift and S and change it to something else
like a cylinder. We might need to change
some of the values, such as the radius
and the depth, make it a bit smaller. But if we were to control any of the values for our
various nodes, then we will notice that the
behavior is very similar. Now because I've just created a random value
here for the cylinder. You can see that as we scale, it's not quite
correct because at the moment there's
a little bit of the cylinder that's
below the surface. We always need to make
sure that we are going to successfully resize any objects that we add in to get
the same behavior. Now that I've produced a
depth to a single meter, if we increase the scale, we can increase the scale
for this single instance. We come over to
the end transform. We can do the same
for all three. So just to summarize, because I know that's
a lot to take in and we're starting to use
more and more nodes here. I'm going to just recap
exactly how this works. We start with our geometry, which comes in the form of EVA, the base geometry of our
object or a Mesh primitive. Each noodle that we create form this mesh output of our Mesh primitive goes to
a transform node, which creates a new instance
of that primitive objects. We do this three times to create free different cylinders. The next step in the dataflow is to use a second transform for each individual
cylinder so that we can control the scale after
it has been repositioned. So we hit Control H. To bring this into view. We can see the first transform creates the cylinder
and positions it. Then we move on to
the second transform, which is used to scale
and scale that cylinder, form the new position because it uses the data in
the previous node. With that applied to all
free of our instances, we join them together
so that they can become a single object in
our free DVI ports. To control these three
cylinders as a how. We then add a final
transform node. Once they have been
joined together. With this transform node, we are able to
manipulate the location, rotation, and scale of
all of our cylinders.
14. Adding Labels To Your Nodes: Over the next couple of videos, we're just going to turn
our attention back to some house-cleaning tips
that can make reading. You will know trees much easier. First of all, it helps to name your no tree appropriately. Originally we just named our
two main trees, one and two. We can swap between these
two no trees and then use the parameters that
we created for these no trees to edit the
model however we see fit. But the names aren't very
useful for each of these, so we're going to rename them. This one could be
used to create, say, a low bodybuilding. I'm just going to take
my cylinder and I'm going to swap it out
with a traditional cube. Then I'm just going
to rename this as building base
and press Enter. That's not how you spell building. I'm just
going to correct that. Now we have a no tree that
is labeled correctly. For the second node tree. This is used to create
multiple instances. So I'm going to name this something slightly
more appropriate. I'm going to label this as join mesh because we're creating
our mesh various times. And then we're joining
them together. That just describes exactly what this no tree is being used for. Now another thing that
we need to do is label individual nodes so that we can better tell what
they are used for. The moment we have no less
than seven transform nodes. The cylinder node is used
to create a cylinder. We don't need to rename this, nor do we need to rename
the joint geometry node. That's fairly self-explanatory. But when someone
looks at each of these nodes and sees
Transform, Transform, Transform, they're going
to be asking the question, what are we transforming
with each node? This one, for example, represents this cylinder here. We're going to relabel
this by going to the side panel and
selecting node. Here we have the ability to
label this transform node. I'm going to name
this left cylinder. This changes the label here. The second transform node here, which is used for the scale, I'm going to rename
as L C scale. Lc is just short
for left cylinder because I don't want the
nine to get too long. We can see that we are using this transform node now to create the
cylinder on the left. And then LC scale is used to
manipulate its scale value. Let's repeat this process for
the middle transform node, which is our middle cylinder. Then for the scale, we're going to use MC cylinder. Finally, with the bottom set, we're going to rename
it as whites cylinder. And then for the second
transform cylinder. Now you can see more clearly what each of these
nodes is supposed to do. If you don't want to
use the shorthand, you could just name this as left cylinder Scale or
middle cylinder Scale. That's up to you. But because I know what
these are used for, I can just use the shorthand. Joint geometry can
be kept as is. And this point will
transform node. We're just going to
rename this as transform because we're using
it to manipulate the whole of our geometry node
tree as a mini challenge. Before you move on
to the next video, I want you to go back to the
building base geometry tree. I want you to spend
a couple of minutes renaming each of these nodes to something that
you think would be more acceptable
for your setup. I want you to do that now. Then I will see you
in the next video.
15. Changing The Color Of The Nodes: Welcome back guys. You should have completed the mini challenge from
the previous video. Here you can see my results. So with the building
base I renamed my cube is building base. My first transform only manipulates the location
of my geometry, so I 90 as location. The second transform is the scale building node
used for the scale. The combine XYZ node, if I just zoom in as being
renamed to oscillate height from size because
that's what it's doing is isolating the height, which is DC value, form the sides, which
is the x and y. Then for my math node, I've relabeled it
as control points because it adds additional
control to the highest value. Wherever you name
your nodes is fine. So long as you understand exactly what each node
is being used for, I want you to maintain
this practice for all of the different
nodes setups that you will be creating in the future. Now we're going to move on
to another thing that we can do to improve the
visual look of our setups. I'm gonna go back to
my join mesh no tree. This time I'm going
to introduce colors. At the moment, you can see that each of our
different nodes, they have these green headers. Along with the sort
of gray bodies. We use a different type of node, say an input node. You can see that we have a reddish header
and a gray body. The color of the headers. In the case the type of
node that is being used. Red indicates the use
of an input node. Green indicates the use
of a geometry node. But the body can have its color altered so that you can bet up, describe what each
node is being used for at each phase
of your no tree. For example, we're going to take the left cylinder
unless cylinder Scale. And we're going to give these
their own unique color. To do that, come over to the
Notes tab in the side panel. And left-click where
it says Color. For the left cylinder. You will see now that
because it was selected, the box has changed color. We're going to open up this tab here and change the color
to something a bit darker. I'm going to change it
to a reddish color. Just lower down the brightness. Then I'm going to do, is I'm going to create a cinema, a simil