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 similar color for the scale. I go back to my original left cylinder
note and go to the hex value. I can get the hex
value of this color. I can left-click and hold
down control and C to copy. Then I can select LLC
scale, enable color. Then perform my hex value. I can hit Control
and V and press Enter to use the exact
same color here, but a two notes. As a mini challenge, I want you to repeat
this process for the middle and light cylinders, but have a different
color for each. I'm just going to repeat
this process myself. I'm going to add a new color. Let's go for something
slightly different. Make sure we copy the hex
value we've controlled. And C. Select the cylinder
for the scale. Make sure to use Control V. Press Enter. Then we'll do the same
thing for the bottom. Add a new color. We will copy the hex value, select the scale, paste it in. Now we have the more
visual markers of having the different instances of our geometry represented
by these different colors. You can, if you wish, use colors on any nodes that you want to better indicate what
they are being used for.
16. Using Reroutes: Another tip for
helping to clean up your node setup's is to use
what is known as a readout. We rounds can just tidy up the noodles that connect
the nodes to each other. To create a reroute hold Shift and I E to bring
up the Add menu. Then come down to
where it says layout. You have two options
here, frame and reroute. Frame is another
very useful option that we might
introduce later on. But for now, let's
introduce reroute. Left-click. Then position your reroute node. Or you've wanted the
new doors for now, let's position it here
for the middle cylinder. What we can do with this
is we can click and drag form this new socket or reroute that would allow
us to connect from here. This would allow
us to more easily identify exactly where
these noodles are going. We cannot as many as we want. So for example, I
could add another way routes up here and then press the G key to
reposition this reroute. Better tidy up the
noodle system. I can add one more
position for this noodle. Hit G. And we position here. Because we have
this rewound going in different directions
to other reroute sockets. We get these little
arrows that show up. This is handy
because it tells us the direction that
the data is flowing. So now you can see
that it's a lot clearer where our new doors
aren't being directed. And this is going
to come in handy when we reached a
point that we are using 203040 plus nodes
in our node setups.
17. Creating A Block System Exercise: At this point, we've
taken a look at some of the core principles of
using geometry nodes. Now it's time for
a little bit of a challenge to test the
knowledge that we have acquired. In this challenge, I
want you to create a building block model where we can increase the geometry
in the form of blocks. And as we increase the geometry, we also increase the size. Now as an example, I'm just going to
unlink this data block. I'm going to select
New and we're going to use a cube as our base mesh. Then going to ensure
that wireframe is on. So you mean the challenge
here is when we add vertices using this
value, we add geometry. The gold is going to be to increase the size
of our geometry so that the blocks will always be the same size on that axis. For example, if we have a
value of two for vertices x, that creates a single block and that block should
be one meter long. If we increase this to free, then we're going to want
to have two blocks, because we have free vertices
that create two blocks. And each of those blocks
should be one meter long. The current setup
increases the geometry, but does not increase
the size on that axis. Is going to be to do both. We're going to divide
this up into two steps. So the first step of
this challenge is to isolate the size of your model. For the height,
width, and depth. We're going to want to isolate
each of the effects of values as their own values
that we can control. That is going to be the first
part of this challenge. I want you to complete that
now and then we'll come back and we will look at the second part
of the challenge. So pause the video
and give that a god. Welcome back. What we're going to do is
use the combine XYZ node, which we've used a
couple of times already, to isolate the free
factor values and then expose them as height,
width, and depth. Hit Shift and I then locates, you'll combine XYZ
node position here, connect the effector
to the size. And now we're going
to take the x-value, expose it as its own socket. Do the same with the y. And then the z. In the side panel, which you can open
up with the N key. We're going to go
to the Group tab. For x. We're going to rename
this as the width. The y-value is going to
represent the depth, and the Z value is going
to represent the height. Because we want to do this
by meter and meter blocks. We want to change the type of data used from float
to an integer. So we are using whole numbers, select float and
change it to integer. Do the same with the
depth and width above. Now if we were to increase these values in
our modifies tab, we can manipulate the size of our cube on all of these axes. So we can manipulate our
heights independently, depth, and our width. That is the first stage of
our building blocks model. The second stage is
going to be connecting the vertex count to our
height, width, and depth. Remember the goal here
is when we increase, say the height value, then the height will
increase by that amount. But it will also add
geometry on the z axis, allowing us to not only
increase the height, but also add blocks to act
as the parts of that mesh. Give that a go. Now, remember that
for this challenge, you will not need to
use any new notes. This may take a little
bit of trial and error out to foreign to
want combination, but spend as much time
as you can try to find the correct set of nodes or correct set of connections to create that building
block model. Free to pause and go. Let's see how we would
go about doing this. We have our x, y, and z values located here. One thing that we can
do is we can directly connect the vertices
x value to the width. Now if we were to
change this value, you can see that
we are able to add vertices as well as
increase the width value. Because both of these are
connected to the width input. There is a problem with this. However. We press say one on a number
part in the 3D view port. We can enter front
over graphic view. If I set this one, then at the moment we only
get a flat line at the side. Increase it to two, and we get our block. We have two vertices, which is the quit behavior. If I increase this to free, we get two blocks
and free vertices. But have a look at
the grid behind it. You can use the grid to determine the actual
size of your model. If you pay close attention, you can see that we have these larger squares and
then the smoothest squares, the largest squares represent
singular Blender units, or in our case, blender meters. We have two blocks here. But if we take the
center point here, come over to this side. We will see that this block is much larger than a single meter. If we increase this to four, then we get free blocks. And they come
across 1234 meters. So the size of the
cube is correct, but the blocks are too big. The reason why is
we always seem to have one block fewer
than what we need. We want the number of
blocks to be the same as the number of meters that
we define the width by. This is our next step. How do we solve this issue? Well, if you think about
it, it's very simple. All we need is to
increase the number of blocks by one each time. That involves the use
of the math node. Hit Shift M, I. Go to search or Utilities
and select math. I'm going to position it here. Then I'm going to click and drag vertices x and then connect the width here and increase
the bottom value to one. As soon as I do that, you will notice
that the number of blocks are added has changed. We would use the
width value to one. We get a single block. It comes five squares to the left and five
squares to the right, ten squares in total. That means it's
the correct size. And also the correct
number of blocks. Increase it to two, and it goes two meters. Two blocks, increase the free, free meters, free blocks bore. You get the idea. This is exactly what we need to do for the depth
and height as well. Which is going to close this by clicking on the
little button here, since we don't need to view it. And then we're going to
duplicate this app mode. Hit Shift D position underneath and shift the
again one more time. Then its height, the depth. The second at nodes and
plug it into vertices war. Finally take the heights and plug it into vertices C. Now, if we were to
manipulate our values, you will see that we
are able to create, I will one-by-one meter blocks
by controlling the height, depth, and the
width of our model. If you are able to do
that, challenge yourself. Congratulations. If not, don't worry, at least now you have a better understanding
of how you can manipulate these nodes together to form this type of geometry.
18. Growng Our Building Block From The Bottom: Hi guys, we're coming back to our building blocks challenge because we have that same issue as we did with our buildings, where we can increase
the height value, but it increases in
both directions. If you wanted to use this as the model
for a building base, you're going to want to
position the bottom of the model onto the surface of your grid or applying
if you create one. The problem here is we've got a more complicated setup
than what we did before. So it might require a
slightly different solution. Two ways have our building
sits on top of the plane. Let's re-add the plane back
in if we still have it. If not, just add a new client. What's the solution here? Well, I'm gonna give you the opportunity to try and
figure it out yourself. But once again, we are not going to be introducing
any new nodes here. This is still part of
the same challenge. Think about the nose
that you've used in the past and the way
that you've used them. And consider how you can set up this no tree so that whenever we increase
the height value, we can increase the
height value in the upwards direction
only and have our objects sat on top
of this plane ago now, and I'll see you in
a couple of seconds. Okay, so if we recall when we
created the building base, we will be able to
view the setup that we had where we used a combined x, y, and z node and
also a math node. We plug that into the scale
of our scale building. We can do something
quite similar here. What I'm gonna do is I'm going
to add a transform node. We're going to go search
transform and position here. I'm just going to
increase my width again since that has been
decreased for some reason. Now, I don't really want to use the scale values here
for this transform. Instead, I want to use the
location for this transform to constantly move my modal up every time we
increase the scale, which is used by
the height value. What this means is we need
to add, first of all, our combine XYZ node
because remember, we're looking to isolate
the z axis for the heights. It shift and I. And then we're
going to go search, combine XYZ, position it here, and plug the vector
into the translation. Remember, we're keeping
the scale as it is. We don't want to edit the scale with the transform
at this point, because that's actually going to change the size of a cube. And to an extent, make the values that we've
already created redundant. Remember, we want
these to be one meter by one meter by one meter cubes. Next, we're going to
isolate the z value here. We're going to do that
by adding a math node, hit Shift, and I add
in your math node. And we'll position it
here, plug it into the Z. Then we're going to change
the Add Node to divide. We're going to plug the top
value into our heights. We're going to set
the value to two. If we test this, by
reducing the height, we can see that it positions
itself on top of our plane. Why did we need to do this? Well, by dividing
this value by two, what we're telling blender is
to have the highest value. Define the total
size of our model. That's the same as before. But then with the
transform node, we want to move up our model
by half of this value. Remember that without this, we had half of the modal above the plane and
half of it below. We needed to increase
the value on the z-axis by half the
scale of the height, which is located here. That's why we had to
isolate the z value, format translation and then divide it by two before
plugging it into the heights. Now we get the
higher value here, which is four, gets divided
by two by this node. The combined XYZ
node ensures that the value of two is only
used on the z-axis. That gives it the value
here in the transform node, moving the entire objects
up by a value of two. I hope that makes sense. If it doesn't quite make sense, feel free to watch the video again or the last
couple of videos again. It's very important
to understand exactly how each of these nodes are
being used in this process. And every single time you create a new node
setup like this, make sure to take a
couple of minutes, even after you've completed it, to label your nose, color them if required. That's a little mini
challenge for you as well to label each
of these nodes. Also just ask the question, what is the purpose
of this node? What is the purpose
of this node? Makes sure that you
understand the long that each of your nodes plays
in your objects creation. As for this challenge, we've now completed
it successfully. All we need to do now
is just rename it. I'm going to call it building
block. And press enter. We double-check. We've got building base, building block, join mesh. And we're just going to add the fake user that we
don't lose our work. Congratulations guys, and I will see you in the next video.
19. What We Are Going To Create: Welcome to this section
of the course guys. This section is going to be a project based section where we are going to be
creating what you see here. This is a procedurally
generated Building where we can adjust the height, width, and length of our
building however we see fit. If I come out of this view, then come into our no tree, you'll be able to see the node system that
we plan to create. As a brief overview. These purple boxes
here, these frames, they represent the
grid structure that is going to be the
base of our building. And then each of these
blue frames here, How's all the different nodes required for each
individual wall? We're going to join
them up together using join geometry nodes. And then when all the
walls are joined, we're going to move on to
creating the roof and floor of our building before
finishing things off by determining its position
to the objects origin. All of this is going
to allow us to create our own
procedural building. And we'll be able
to edit some of these parameters
in our modifier. So here we've got width,
length, and height. These are the main for it. We can also create
variations for the objects we are
using for the building. If I was to adjust the
width, for example, you can see we are
able to increase and decrease the number of
windows that are being used, as well as the total
width of the building. The same applies to our length, as well as the height. It's truly procedural
in how it's generated. The first thing that we need
to do is create the assets that are going to be used for this procedure.
Will building.
20. Introducing Data Flow And Fields: In this section of the course, we are going to be
taking a look at Dataflow and fields
which are used to help construct our
geometry nodes systems and allow us to determine exactly how our nodes interact
with each other. Let's start by going
to our geometry nodes workspace and add a new node
tree for our base objects. Dataflow is when information is transferred form
left to right. The most basic example, we have the information stored
in our group input node, which by default is the geometry
of the original objects. We connect via this noodle, the group inputs to
the group output. The data from the group input node is transferred
to the group output, which is the result of the
geometry nodes modifier. In other words, if we were
to add an annotation, the flow of information
goes in this direction. We can add nodes and
these nodes will act as junctions where the
dataflow will stop. We calculate and then continue. For example, I'm going to add a set position node
and position it here. Now our data flow
goes from the group input node to the
set position node. It then we calculate
the information based on the parameters
of the set position node. Before continuing on
to the group output. With Dataflow, the
information will always try and find its way to
the group output node. If we manipulate the
offset value here, then we are taking the base information
from the geometry, which is the cube in
its original position. We are then changing that position by manipulating
the offset value. And then we are
transferring the data from this node to
the group output, which gives us our
result and allows us to view these changes in real time. In this example, the
data flow goes form. No one which is the group
inputs to the set position. We calculate that information, is then sent to
the group output. This principle
remains regardless of the nodes that we add in. So if I add another node, say transform node, manipulate the rotation
on the z axis. Now our Dataflow goes from the group input to
the set position, calculates the Z offset, which is the one change for
this set position node, sends that data to the transform where
it looks for changes. It finds one in the
rotation of the z-axis, then sends that data
to the group output. So to clarify, Dataflow is when information goes
from left to right, we go this direction. We'll go D, F, which stands for Dataflow. If we go in the
opposite direction. In this way, we are traditionally
working with fields. Apologize for the
bad handwriting. I'm using a mouse
body annotations. So our Dataflow goes
from left to right. Fields go from white to left. These fields allow us to manipulate the parameters
that we have in our nodes. They also work in the
opposite direction, searching for
information or lose. That can be used to
define new parameters. They can also be used to expose those parameters for
our group input node, allowing us to make
changes two-hour, no tree in the form
of the modifier. Let's take a look at an
example of fields in action. I'm going to add a node
for this offset value. I want to isolate my offset
vector into free floats. I can do this by adding
a combine XYZ node, then connect the
vector to the offset. If we take a look at
the set position node, you will see that each of our sockets is a different
color or a different shape. If a socket is circular, that indicates that
the information is part of the dataflow workflow. It goes from left to right. This is the case
for our geometry. The free properties underneath or the selection
position and offset. These all have diamond
shaped sockets. This indicates that
they can use fields, which is a form of
function used in Blender to manipulate values. You will also notice that for the selection and the offset, they have little
dots in the center. This indicates that
these properties can use E for fields. All they can use a
form of data flow. They are flexible in
how they can work. You'll also notice
the different colors. This simply indicates
the type of data. So for example, this green
color represents our geometry, while the purple color
represents vector data. If we take a look at
our combined XYZ node, we can see that this
is a node that can handle both fields and floats. We can manipulate these
three axes independently. But what we can now do in
addition to this is we can manipulate these values
using other nodes. For example, let's
say I wanted to expose the z value
to my group input. This creates the C
parameter for one modifier. I can manipulate it as such. Let's do the same
thing with the y-axis. It connect it to the
exact same input. Now, this single C value will control the positioning of
my cube on the z and Y-axis. You will notice as well
that the connections, the noodles, are slightly different to the one
used for the geometry. The line for the
geometry input is solid, but these are dotted lines. And this is another
indication of when fields are effectively being
used or could be used. What we can do here is
add a math node and changed the way one of these two operations is
affected by the modifier. For example, if I plug it in to the y noodle and
use the add value, I can set this to say to. Now, whatever the
z value will be, the y-value will
be that plus two. The way this is working though, is we are still going from left to
right. For our Dataflow. We are going form our group
input to our set position, but we're not going to our
transform straightaway. Instead, blender
is going through the different
properties and it's finding one that
has a connection. In this case the offset. It then works in the
opposite direction. It goes from right to left
to find the nodes and find a pathway potentially
back to the group inputs. Although this is not
always the case. Here, the data is going
back to combine XYZ, where we know that we can
control the one c-axis. And then for the z-axis, it goes all the way back
to the Z parameter. For the y-axis, it actually goes back to this math
node of thirst. Then goes to the z parameter. Don't think of it as the z value being
the starting point. It's the control point. The starting point is still
this offset value here. Going into that
combine XYZ node here, we have the y-value
and the z-value, which are currently set to 0. We add one to the y-value
or two in this case, let's double-check that yet, but value to make it to here. Then we manipulate the z value as the faunal control point. Then it sends that data
back to the set position node before it can move
on to the transform. That might sound
complicated at first, but as you continue to
create more node systems, it will become much
easier to understand how Dataflow works
and how we can use fields to edit our information.
21. Moving Around Our Nodes To Change The Flow Of The Data: Understanding the
terminology and exactly how our node systems can work is often more challenging than learning
about the nodes themselves. So we're just going to go
through a second example of how Dataflow and fields operate
in our node system. I'm just going to erase the lines that I've created
here in the previous video. Then I'm going to delete
some of these nodes. So I'm going to delete the
combined XYZ and the AV node, as well as the transform
node that these two, I'm just going to delete
that for the transform node, I'm going to select it. Hold down Control
and press Delete. This will delete
the transform node, but also maintain the connection from one position to
the group output. This way I don't have
to reconnect them. Now I'm going to demonstrate a second example with
a different node. I'm going to add a
sub-divided mesh node and plug it in here and
increase the levels to free. I'm going to display
the effects of my sub-divided mesh node
in the 3D viewport. By coming to my viewport, overlays menu and turning on
wireframe for my geometry. This way, we can see the
actual geometry of our model, even though we are
not in edit mode. At the moment, the
dataflow is fairly straightforward because we're
not using any fields here. We're going from the group input to the set position,
calculating the data. Then moving to the
sub-divided mesh, calculate the data, and
then the group output. It's all relatively
straightforward at this point. But now I want to
introduce a field. I want to create a random value for the
positioning of my cube. To do that, I'm just going
to go search in my Add menu, type in random and
select random value. If we zoom in, we can see that the random value node
has a data type menu. We want this to match
up with whatever we are connecting it to before
we actually connect it. If you take a look, you'll see the value output here is a solid diamond shape. This indicates that we're
working with a field. The inputs for the random
value node can be connected to Eva field inputs or Dataflow. We're going to change this
to vector so that it matches up with the offset.
Click and drag. Making sure that
you've got the method turned on and connect. Now the random value
node here has allowed us to randomize the
positioning of our points. However, how will this works is just as important
as what it's doing. How it works is it's taking our set position node before it's
sub-touchpoints the mesh, it goes backwards
using this field. It finds the data for
the random value node. We calculates it and sends it back to the
set position node. Then it will go on to
the sub-divided mesh. We can see this more
clearly if we were to change the positioning
of our notes. This is the setup
that we get when we have the set position node
before the sub-divided mesh. But what happens if we place the sub-divided mesh over here? Well, I'm going to hold down
the Alt key, click and drag. And that's going to disconnect
my sub-divided mesh node, but reconnect the
nude will behind it. You can see in the
3D view port that the general shape of our
cube has not changed, but the extra geometry
has been taken out. Let's now plug in here
and left-click release. This seems to have completely
messed up our geometry. Something's not quite why, but actually the
behavior is correct. What we're doing here
is we are going for my glute input node and
subdividing the mesh. We're creating that
extra geometry. With then sending that data
to the set position node. For the offset, we're going
to randomize the values. The key difference this time is every single point
that we created with our sub-divided mesh is now being randomized in
terms of its position. This isn't the same as when we were using the sub-divided
mesh over here. If I, it was store that
to its original position. You can see that as we
take it out and put it in, the shape of our cube
does not change at all. The newly subdivided geometry simply follows the
new shape because the random value only affected the original points
of this cube. It doesn't affect the points created by the
sub-divided mesh node. This is an example of how fields can influence our data flow and how changing the positioning of our specific nodes can also
impact the final result.
22. Creating An Abstract Effect Using Data Flow And Fields: Now that we understand
a little bit about our Dataflow
and fields work, Let's create something in
Blender using this process. I'm going to start
by literally just deleting this node setup
and adding a new one. Next, I'm going to add a
sub-divided mesh node. I'm going to increase
the amount of geometry for our base cube. Hit Shift. I, then go to Search and
type in sub-divided mesh. Eventually you're
going to know where all the nodes are in the menus, so you won't have
to search for them. But for now, I'm going to plot the sub-divided mesh in here, then increase my levels
to a bounce free. Next, I want to
take the data from my sub-divided mesh
node and I want to extrude the individual faces. To do that, I first of all
need an extrude type node. Again, shift and I to
bring up our menu. And it will be
located under Mesh, same as the
sub-divided mesh node. And she will find extrude
mesh in this menu. We're going to plug
it in about here. That will extrude out our
faces form each side. If we just review our Dataflow, we're going from
the group inputs to the sub-divided mesh
to the extra output. Next, I want to randomize the extrusion of each
individual face. First of all, I'm going to
zoom in on my Extrude mesh. There's a box here
for individual. Let's see what happens
if we untick this. At the moment. What it does is it sort
of curves everything together so it maintains
the shape better. Now for the effect that
I'm looking to create, I'm actually going to want
them to be separated. I'm going to want to avoid this almost curved
like appearance. I'm just going to
turn that back on. Here. We have things like
how offset scale, which determine exactly
how much we are extruding our geometry by. What I'm going to do here is I'm going to land on Wednesday. So I'm going to add a
random value as a field. If we zoom in on our
extrude mesh node, you can see that the
offset scale amongst the offset and the selection
or can use fields. The offset scale can also use
Dataflow as its connection. I'm going to do what we
did in the previous video, and I'm going to add
o random value node, IT company afloat value. So the type should
be set to float. And we'll just click and drag to connect to
the offset scale. This creates the
randomized effects for our extrusion of every
individual face. I want an effect where
it's either being extruded in or out
but only slightly. So I'm going to set the
Min value to negative 0.1 and the max value 2.1. That gives us this relatively
interesting effects where we have these minor
extrusions across our model. What we can do here is we can manipulate some of
these values, right? The C, for example. This will randomize which of our faces are being extruded. The various amounts. Here we have our data flow
going from the group input to the sub-divided mesh and then
to the extrude mesh node. But before it moves on
to the group output, it finds its offset scale. And it goes back to
following the field, which is the random value node. And uses the values
here to determine exactly how the offset scale is going to work
for the extrusion. Now we're going to
go one step further. We're going to create a
parameter using this field. I'm going to take the max
value and plug it in here. I'm also going to do the
same with the mean value. Plug it into the same socket. When you do this, the two values are gonna
be exactly the sign. So it's going to extrude
the same as it did before. We actually added the
random value node in. What I'm going to do though, is. Improve my control by
adding in a math node. I'm going to plug it
into the Min value. Set this to multiply, and then multiply it by
a value of minus one. Then press Enter. Now, I've set this up so that whatever the max
value is going to be, the Min value is
going to be that. But in the negative axis, if the max is set to 0.1, then the minimum value is
going to be negative 0.1. If I increase this to 0.3 for the max value than
the Min value is going to be negative
0.3 and so on. We can also connect different attributes to
our actual group inputs. We can take the C, for
example and plug it in here. We can manipulate the seed
value in the modifier. As a result, I can control both the extrusion in both the positive
and negative axis. And I can also control which of my faces are being extruded
using this seed value. So to sum things up with regards to our
current setup here, our data flow goes from the glute input to
the sub-divided mesh. It then goes to
the extrude mesh. Then it works its way back. Trudy spilled functions to our glute input node where we have the parameters
that we exposed. And we can edit these
parameters to change the final result of our keep. It's almost like a loop. We're going back from the extrude mesh to
the group inputs. Then once it finds these values, it's going to go and
continue on past the extrude mesh to
our group output node. That's another example
of how we can use Dataflow and fields to create different types
of objects in Blender. If I want to add even
more control over this. So say if I only wanted these
to be subtle increases, then I could fervor
control with a Min and max values by adding
another multiply node. So I could, for
example, hit Shift D. Plot the Multiply node in here. At the moment it's only
connected to the mean value. But I'm just going to change
this from negative one to 0.1 and press Enter. That reduces the influence
that the minimum value has. But I want this to also
affects the max value. I'm going to click
and drag and plug it in to the max value for
the random value node. Now, the max value, which is the parameter here, is going into this
multiply node. Then it's either going into
a second multiply node, It's going to become negative before going into either
the Min or max values. Of course, because we're
working with builds, it actually goes in the
opposite direction first. So in this case, we have our mean value here
and our max value here. And we have the max
value is set to psi one. Then we multiply that by 0.1 to get 0.1 and
the mean value, we get the negative
version of that. Now, we have even more control over how our phases
of extruding.
23. Separating Our Geometry While Being Defined By A Field: As we continue to learn how nodes interact
with each other, we'll be able to create
more complex shapes. To continue on with our practice with regards to understanding
data flow and fields. I'm going to go one
step further and create a sci-fi object
using these principles. I'm just going to rename
this as abstract extrude. This is an abstract
object where we have used a random value to just
extrude the various faces. I'm going to tick
on value icon here. That's going to ensure that the carbon geometry node setup is maintained even
if we close Blender. Then going to press
the X button, then select New, we're
going to start again. This time. We are going to actually create something a little
bit more complex, but we're going to be
using the same systems. I'm going to start by turning
my cube into a diamond. Now, you might
think that they're all going to be numerous
ways to do that. For example, you could use a transform node,
plug it in here, and then begin it just rotating your actual mesh and sue you get something
like a diamond shape. But I cube isn't
necessarily a diamond, so we're going to need to use something a little
bit more effective. Fortunately, there is a node
that allows us to do this. If we go to our Mesh menu, at the very top of the list, is node labeled as jewel mesh. Select it, and then connect
it to your node tree. This creates a diamond shape. What the jewel mesh point
self does is it basically converts any face into a vertex. Then what would
become the faces? If I was to add a
primitive node? For example, let's add a column. Then use this as our geometry. The default behavior,
it's just the account. But if we add our jewel mesh, it actually inverts that. The face of the bottom
now becomes the point. Then all of the faces around and the point at the top are
used to create the circle. So effectively inverts this. That's what the jewel mesh does, inverts the vertices
with the faces. I'm just going to delete that and plug my juul mesh
into this setup. The next step is going to be
to increase much geometry. And we now know how
we can do that by just adding a
sub-divided mesh node. I'm going to increase the
levels to about four. To give us plenty of
geometry to work with. Now, I asked the question, what happens if we
were to reorder these? Well, in their common STI, if I was to just hit Alt, click and drag the
sub-divided mesh and plug it into my jewel mesh. We actually do get a
significant change because the sub-divided mesh is
adding the geometry first. And then the jewel mesh
node is converting that geometry from points
to faces and vice versa. So now we get
something that looks a lot more like a cube. In a way you could cite, this is low-level Bevel effect. If you're clever enough, you can actually create bevels
using this type of setup. Now, I'm going to restore
the sub-divided mesh back to its original position because we want to
keep the shape. My next step is going
to be to create the same abstract look that we have for our cube objects here, with the ability to extrude the mesh using a random value. I'm going to restore this
and I'm just going to name it as sci-fi object for now. I'm going to add my
Extrude mesh node, then plug it in. At the moment, they're
all being extruded out way too far and
by the same length. So I'm going to add
random value node. I'm going to plug it
in to my offset scale. This gives us a better look, but it's still all too much. So I'm going to set the
Min value to negative 0.1, the max value 0.1. Now this is still
too much for me, so I'm going to reduce
it even further. But I might as well do that by exposing these parameters
to my modifier, just as I did before. I'm going to first of
all add a math node, set this to multiply. Then we're going to connect both the Min and max
values to this model. Apply node. I'm going to
multiply it by a value of 0.1, which is going to be
the bottom node here. Then I'm going to
connect the top socket. So my input, I can rename this input by pressing
N on my keyboard. And I'm going to go to group. Left-click where it says value
and change this to scale. Now if I manipulate this value, I can control how much
the fight is extruded by. But the Min and the max
value is still the same. I'm going to add
another math node, position it over the min, set it to multiply, and set the value to
minus 0 minus one. So it doesn't need to be 0.1. Just minus one is going
to be sufficient. Now I should have better control
over the extruder scale. So I'm going to just use
a low value of about 0.1. And that just gives us
this rugged sci-fi look for this diamond shape. So as a quick review, our data flow goes from
the group input and it's going to go fruit juul mesh
to the sub-divided mesh, to the extrude mesh. Like this. Before it goes further, it then goes back from
the offset scale to the random value to
the Multiply node. In the case of the mean. The Multiply node for control. Then to the extrude scale. Whatever value is
positioned here is then going to control
the dataflow. Going forward, we'll go
back to the extrude mesh, then to our group output node. That's how the flow of data currently exists
for this setup. Let's now add a few more nodes. The next thing I want to do is scale this up on the z axis. I want to elongate it
in terms of its height. We can do this just by
adding a transform node. I'm going to add a transform
and position here. Then I'm going to
increase the scale value. On the z-axis. I'm going to use a
value of about 1.4. I think that's a pretty good
look for our diamond shape. The next thing that I
wanted to do here is I want to add another
field system setup. I can separate the top half of white diamonds
from the bottom half. The first thing I'm going
to need to do here is add the appropriate node
to separate my geometry. I've already given a hint as to what that node is
going to be cold. It's going to be called
separate geometry, which you can find
here by typing in Sep and then connect to the end. But a separate geometry. It's a little bit different to the previous nodes which only have a single mesh outputs,
will geometry output. In the case of the extrude mesh, it has a couple
of other options, but those are fields
specifically. In the case of the separate
geometry node die, we have to Dataflow outputs the selection and
the inverted selection. We're going to want
to use both of these. For now. I'm going to add what is known
as a joint geometry node. Go to Search. Go to geometry, and
select join geometry. If we zoom in on our
joint geometry node, you will see that we again have a different socket type here. This is sort of
like an oval shape. This allows us to attach multiple noodles to
the same socket. On the input side. Now I'm going to connect the inverted socket
joint geometry node. Nothing changes because with
a separate geometry node, we needed to use a
field or even Dataflow, as we can see body or icon here. In order to get this
to actually work. Before I move on, I'm
actually going to change this from points to face because that's
going to help us a little bit later on when
we define our selection. So how can we use a
field to the fine at the selection of the
separate geometry node. Well, we want to separate our geometry based
on the z axis. We also need to base it
on the object itself. To do this, we're going
to need to define the position of each
face on our diamond. This requires the use
of an input node. Open up your Add
menu, go to input. And the node that we
want to use is position. Then we're going to
attach the position node, which is actually a
vector to our selection. This does not change
anything with regards to the diamond shape. It is simply cooling the
position information and telling blender
that it plans to use this position data
to define the selection. But we still need
to use the nodes necessarily to actually
define what our selection is. In this example, because
we only want to focus on manipulating the separation
based on the z-axis. We're going to use a
separate XYZ node. Go to Add menu and
search for separate XYZ. Then plug it in here. This is going to
separate our geometry. Now at the moment
is on the x-axis, I'm going to change it to the z. If we take a look at the 3D Viewport,
nothing has changed. But that's because we
have actually connected both our selection and our inverted selection to
the joint geometry node. I'm going to hold down
Control, right-click and drag. Then hover over inverted noodle. And release. This deletes the
connection between the inverted output and
the geometry input. And it also deletes the bottom
half of our diamond shape. So to sum up what's
going on here, we using the separate
geometry node to separate our geometry
into two parts. These parts are defined using the selection and
inverted outputs. To decide how these are divided. We use this selection field. For the selection field, we know that we want to
separate based on the x, y, and z-axis, and we only want to separate
based on the z. We then face this data off of the position
information for each of the faces used
on our diamonds. If I was to change the type of data or the mine
form face points, you'd see this
changes the effect slightly on our diamond shape. And it creates the sort of standalone edges where
we have our connections. It's very important to
ensure that we choose the whites domain for the
separate geometry node. With this, we now know
how we can separate our geometry using
fields and data flow. But let's take things
one step further.
24. Controlling Our Separation With Math Nodes: Now that we have a field used to define which of our faces are going to fall under the selected category and which are going to pool under
the inverted category. We can now begin to control each half of
our diamond shape. Let's do that now by
actually bringing the top half of the
diamonds up on the z axis. To do this, I'm going to
create a bit of space between the joint geometry and
separate geometry nodes. Then I'm going to add a transform and plug
it into my selection. We're going to move
at transform up here. Then we're going to
change the z translation. You can see that the top half of our diamond
is being pushed up. I'm going to move it
to a value of 0.1. And then I'm going to connect the inverted socket to
the joint geometry node. If we zoom in, you can
now see that we have a gap between our top
and bottom halves. We have the ability to
influence the top half of our diamond shape without effecting the
bottom half at all. I'm going to actually
set this to 0.05. Then I'm going to create
another transform node. Position this for the
inverted selection. Set the z value to negative
0.05 and press Enter. Now, I can control both halves of my diamond
shape independently. If I want, I can create some cool animation
effects, for example, such as rotating the bottom
half in one direction, and perhaps rotating
the top half in the opposite direction. I can also manipulate the scale independently of the two halves. We have different example
of how Dataflow works. We can play this up
into a few sections. We have our data flow going
from one node to the next, up until we reach extrude mesh. Then we use fields to go
in the opposite direction, which we should now understand to control the offset
scale with the exclusion. We then go to the
transform node, which is just a single
node for our Dataflow. And that allows us
to adjust our scale. Then with a separate
geometry node, we use a field to define how the separate
geometry node works. Then we create two
flows of data. One for the top half
of our diamonds, and another flow for
the bottom half. We can add as many nodes in-between the separate
geometry and joint geometry nodes to change the way the
top and bottom halves behave. And we can do that completely independent of the other half. But at some point, we always
need to bring everything back together because we
only ever have this one. Geometry input for the
group output node. We use are joined
geometry node to bring those separate paths together
and join that information. This is another example of how Dataflow works in
Blender and how it can actually be separated
into different paths allowing you to control the different aspects
of your models. Now, I want to create a
little bit more control. With regards to exactly what is being defined
in white selection. We're going to actually
go backwards a little bit to our separate G arbitrary
node and the field setup. I'm going to take this set of nodes and just bring it back. Now, I want to use a math node
to control the selection. We're going to add
some more control to this field. Shift. I go search. We're going to select math. Now let's start
by connecting it. Here. We connect the add node
in-between the separate x, y, z and the selection. This changes where we break
down our diamond shape. As I increase this value
and zoom out a little bit, you can see that the gap goes
further and further down. And that's because the
position value of each face is being offset by the
value of this node. If we set this to 0, then the middle phases
have that value of 0, which means that they will be effectively the
point of separation. As we increase this, then all of the values below
will also increase in value. So they'll get closer
and closer to 0. And then once they hit 0, that becomes the
point of separation. We can use any functions
for this so far, use the subtract node. It does the opposite
calculation. So as we increase the value
for the subtract node, then this point of separation gets higher
up our diamond shape. With a value sets of point a, we can go back to our
Transform and then manipulate the z-axis the
same as we did before. Only this time we're working
with less of the model. We can use math nodes
in our functions to forever changed the behavior
of our specific nodes. In this case, we're using the Subtract node
to change the way the separate geometry
node divides up our mesh. Another example could
be a compare node. Let's add a compare node. We have a value and
an Epsilon here. I'm just going to set
the Epsilon to 0. And while that's set to 0, we actually get no
separation at all. I'm also going to
move our value by 0. What does y increase
this Epsilon value here? As I did that, we get a little bit of
separation at the bottom. Also some interesting
behavior at all. If we increase the value, you can see we
almost get sort of like almost like
extruded out look. So it looks a bit more
three-dimensional. We've got the top
half, the top quarter, the diamond and it's sort
of being pushed into the larger pulled
directly underneath. But while we have this compare operator
for the math node, we could also use an
actual compare node, which works slightly
differently. I'm going to select my node. And because I've got
Node Wrangler enabled, which you can do so by going to the add-ons tab in the
preferences panel, typing in node and then ensuring that Node
Wrangler is ticked. You can then select
the node and press Shift and S and change
it to something else. I'm going to change it to a compare node found
under utilities. This is not the sign as the Compare up right
up at the math node. I'm going to select Compare. Then I'm going to
connect the z value to the value at the moment
is set to greater than. Anything greater than B, is going to be defined
as the selection. Anything that is
not greater than b is going to be The find is
the inverted selection. So if I increase this value, then less of my diamond is going to fall above
this threshold. And so less of it is going to be assigned that selection output. I can also change this
to other operations. For example, I could
set it to equal. I'm going to set back to 0 and then increase
this Epsilon value. So we've got this epsilon again. This is basically the range. If it falls within the range, then it's going to fall
within a specific value. I'm just going to
temporarily take the inverted connection out. This is what we get. So, because so much of our diamond actually falls underneath the inverted output, we are not actually seeing
much about geometry at all. But if I increase
this Epsilon value, you can see we get more
and more diamonds, but it is actually being
generated in both directions. Because more and more
of a diamond shape is folding within
this Epsilon value. To clarify what's going on here, we're using a compare node
here to control our selection. We are defining it
based on the z-axis, which is then being
used as the a value. The b value is think of it as the center
point of the compare node. Then the epsilon is
the range either side of this B value that will fall under the
selection output. If I increase the B value, you can see this changes the way that the
diamond is generated.
25. Controlling Multiple Parts Of The Set Up With A Single Node: In this video, we're going
to demonstrate how you can control multiple values
at the same time. What want to do is create a
setup where the z value for the top half is also influencing the c value of the bottom half
of our diamonds. I'm just going to get rid
of more equal node here. Because I don't really
need it at this point. Then I'm going to connect more inverted node will inverted output to
my second transform. This gives us the
current setup of having two separate
halves of our diamonds. At the moment, we can edit the location
independently from each other. But I wanted to set
this up so that as I increase the highlights or the positioning on the
z-axis or the top half, I also decrease the
z-value, the bottom half. So I can increase and
decrease the space between. To do that, we have
a couple of methods. One method is to
use a value node. A value node is a type
of input node similar to the position node that holds
a single arbitrary value. We can then use that value in multiple areas of anode system. Work sample. I'm going to add
my value node in. You go to the Add menu, type in value and
select the value node. All this is, is a single flow
value because it's a float. And we're working with vectors, we need to convert this. I'm going to create a
little bit more space. And then I'm going to add
a combine x, y, z naught. I'm going to plug the vector
into the translation. I'm going to plug the z
value into the value node. Now if I manipulate
the value node, we manipulate the top half
of our diamond shape. What I can do here is duplicate my combined XYZ node and
connect it to my transform. Then I can connect the z-value
to the same value node. When I do this, both of our halves are going to be following
the same value. Always going to stay connected. What we want is to invert the behavior
for the bottom half. We can invert our translation, rotation or scale
directions by using a multiply node and setting
the value to minus one. I'm going to do this
by adding a math. Now, positioning it before
this combined XYZ node here, setting it to multiply. And then you're using a
value of negative one. If I just close this to create more space and adjust
the value node. You can now see that as
we increase the value, the 12.5 of noises, while the bottom half lowers. This gives us control
over the ability to create the distance
between our two hops. For now, I'm going
to set this to 0.05. Now we have that little
bit of space again in-between the two
halves of our diamond, which at this point basically
look like two pyramids. An alternative way of doing
things is to actually use exposed parameter
rather than a value node. To do this, we just need to add in another group input node. I'm going to delete my value node by selecting it
and pressing the X key. Then I'm going to
search for my input. I'm going to add one here. I'm also going to create one
more with Shift D down here. I'm going to take my c value and connect it to an empty slot. We're going to rename
this in our solar panel, which you can open
up by pressing the N key and go
into the group tab. We're going to select it
and rename it as distance. Then we're going to connect this multiply node for the
lower half, the same input. Now, if we adjust our distance
value in the motor file, we get the same behavior. To prevent this
from overlapping. One thing that I can do
is adjust the Min value, which if we set to minus, actually overlaps our geometry. So I'm going to set the Min
value for 0, the max value. We will set it to one finance. If I edit my distance, then I can control
the distance between 01 without going any
higher or any lower. This way, we are able to control multiple parts of our node
system using a single value. And we can do this using
either a value node or unexposed parameter
to our modifier.
26. Creating A Second Object And Using Materials With Nodes: In this video guys, we
are going to be adding a second object to
our node system. And we are also going to
be looking at introducing materials to geometry nodes. Let's start off with adding a new object to our node system. We have access to primitive meshes as we
know by this point, we can add as many of these
preventive meshes as we wish. Then we can use transform
nodes, for example, to create multiple
instances of those meshes. As a quick example, I'm just going to
create a fake use with my sci-fi objects and delete it. Then we're going to
create a new node setup. I'm going to create
some mesh primitives. So let's start with a cone. And I'm going to create
a cone cylinder. Finally, an IPO sphere. Now at the moment
we can only connect one of these three nodes
to our group output. But if I was to use a
join geometry node, then I can connect all
three of these mesh objects to march geometry output by
using the join geometry node. Now at the moment they've
all in the same position. So the next step is going to
be to use Transform notes. Making sure that I'm
using the correct nodes. We're going to create
one for each reposition. I'm just going to move
them along the y-axis. Now I have three objects here. These are all part of
the same node system. Not only that, but I can create multiple instances for
each of these objects. I could, for example, create a bit more room. For each of these. Then I could duplicate
transform node, connect one object to
the new transform. Connect this to the
joint geometry node. Then manipulate it
on the x-axis a bit to create another version
of that primitive objects. Again, I could do the
same for my cylinder. Create a transform which creates a new instance once
it's attached to the joint geometry node and then move it
along the x-axis. It one more time
for our Ico sphere. Again, duplicate connects, connects to the
joint geometry node. Then we position on the x-axis. This is how Dataflow
can be used to create multiple instances
and multiple pathways. Or we will geometry node system. And each of these
pathways before they are connected using this
joint geometry node, which almost acts as a junction for all
with this information. Any nodes that you have added along these new doors
will be independent to that instance and to that path without directly affecting
any other part of the object. So let's take this
principle now. Let's use it to add a new
object to our sci-fi model. I'm going to create
some space between the joint geometry and
the group output nodes. So just click and drag. Then I'm going to duplicate
the joint geometry node. Hit Shift and D and position the duplicate just
in front of the group output. Next, I'm going to
add an ecosphere. I want a sphere to appear at the very center
of the diamond shape. We also add the positioning
in just a moment. Hit Shift and I go Mesh
Primitives and select Ico sphere, position it about here. Then connect the mesh
to join geometry node. The ICU sphere is too
low ways, but too big. We're going to
decrease the radius to 0.1 and increase the number
of subdivisions to four. Now, I need to be able to
actually view my Ico sphere. So one kind of set this
distance value to c of 0.05. That gives us that
little bit of an opening in-between the two
halves of our diamond. Let's make it a
little bit higher. Let us go 0.07, just so we can see
a little bit more clearly on the inside. Now we have two objects. We have the cube which was
converted into a diamond. Then we have the Ico
sphere inside it. The next step is going to
be to create materials. We want to create materials for the diamond structure as well as an emissive material
for our Ico sphere. So this is going
to become a light. The first step is to go
to your materials tab in the Properties panel and
create your materials. The first one, I'm going to
label as diamond structure, which is going to make
this a very dark gray. If I was to go into moments
here we will preview. You will see that the material is not being
applied to the model at all. The reason why is because
it's not applied directly to any geometry created
using our geometry notes. It would work with
the base cube. However, if I just hide
geometry nodes modifier, you can see that we have our cube and it has
the correct material. However, when creating geometry using our geometry
nodes modifier, we need to apply the material within our
geometry node setup. To do this, I'm going
to hit shift and I, I'm going to search
For sets material. I'm going to position this
one before that final joins geometry node
placement is important. If I at position is
set material node after this one will
join geometry node, then wherever material I have for this set material
node is going to be used for both the
diamond structure and the Ico sphere inside. But I want them to have
separate materials. I position it in front of
the joint geometry node. Remember that at this point, these are two separate pathways before they are connected
using the join geometry node. With this first set material, I'm going to set it
to diamond structure. And as soon as I do that, the material on my
structure changes. Now I'm going to create
a second material. Come over to your
materials tab in the Properties panel
and press this Plus button to add a
new material slot. And select New to
add a new material. I'm going to name
it as red emission. So it's going to be
a red light that it misses that lines
across our scene. I'm going to scroll
down to where we have our emission color, which should look
like a black bar. Left-click. Make it white. Then choose whatever
color you want. I'm going to make it a deep red. I'm then going to increase the strength for
the moment to free. But we could change this layer. Once again, this
emissive material has not been assigned
to the Ico sphere. I'm going to duplicate
a set material node. Then I'm going to change the assigned material
to read a machine. If I just turn off more
at wireframe overlay, we should now see that our cos phi has a different material to
our diamond structure. If I go into my rendered view, you can see that we have these materials setup and I'm counting using
the EV Linda engine. If I want this to have sort
of block a bloom effect, I can enable bloom form this. Lend up for parties tab
in the Properties panel. Left-click where it says Bloom. And we get a small bloom effect. So we can improve this by
increasing our intensity. Maybe adjusting some of
these other values as well. This is going to give us a nice little bloom effect
for our Ico sphere. Alternatively, we can use
the cycles Linda engine, which calculates the
light differently. As you can see now, we're beginning to learn the inside of our
diamond structure. We could increase the
strength value here. To increase the
strength of the liar. Keep in mind that
because this is focused around real-world
lighting properties, increasing the emissive
strength to a certain point. We'll eliminate the color
from the sphere itself. The light emitted, however, will be that emissive color. There we go. We've got our little sci-fi
model here using a diamond as the base structure separated
so that it opens up to View inside an
emissive oncosphere, which is all being generated
using this node system.
27. Bonus Video Animating Our Node Set Up: Hi guys, Welcome to this bonus lecture where
we are going to be animating one of the values for our geometry nodes system. The effect that I want to create is the dissolving effects of my geometry for my diamond form the top and the bottom
in towards the center. In other words, I want to
animate my epsilon value. So commonly if I set it to 1.4, which is the current
scale of my diamond, we see all of our geometry. As I decrease this value, the geometry dissolves
from both the top and the bottom until
it reaches the center. This is the value
that we're going to animate to create our animation. Hover over an intersection, right-click and select
horizontal split. This is going to allow us to create another panel
at the bottom. I'm going to change this
panel to a dope sheet. At the moment, we haven't
added any animations. Make sure that you are on
frame one to start with. And then hover your mouse cursor over the epsilon
value and press I. This will add a keyframe
to the epsilon value. Next, change your active frame. Currently it sets one. I'm not going to set it to 240. The epsilon value
appears green to indicate that the value
is using a keyframe, but no changes have been made. I'm going to change this Epsilon value to
0 and press Enter. The value now appears orange to indicate that a
change has been made, but a key frame has not been
created at this position. Press I to create that keyframe. Now if I go back to
frame one and press the spacebar to
apply my animation, eventually you will see that's our geometry begins to
dissolve towards the center. Behavior isn't quite right. It takes a while for it to
start a little bit too long. Then once it reaches the end, it almost stops before we delete the final
bit of geometry. This is because we
are using a form of interpolation that is not
suited to our animation. I'm going to reset it
back to the first frame. Then I'm going to go to the
key menu in my dope sheet, goes to the interpolation mode and change the interpolation
type to linear. It will probably be on bezier. So change it to linear. Then test your animation again
by pressing the space bar. Now the geometry dissolved
earlier in the animation. And if we wait for it to reach
the end of the animation, it should all fade out much more smoothly because we've changed
that Interpolation type. This is a basic example
of being able to animate values that we
create in geometry nodes. Anything here that you see has a value like the transforms. The sub-divided mesh node
for its levels can be animated because these
values can be changed.
28. Analysing Our Node Setup And Organizing With Frames: Hi guys. In this video, we're going to be reviewing the object that we've created by using our
dataflow system with fields. To make this easier, we're also going to demonstrate
how you can divide up. You will know Tree
intersections using frames. Frame is a box that you can use to store parts
of your setup in. What we're going to
do is we're going to divide up our node sets up into individual sections based on what they are being used for. And then we're going to create
frames for each section. The first section is this section here from the
group input to the Transform. This is where we created our diamond shape and also created the
randomized extrusions, as well as scaling
it on the z-axis. So this here is the setup
for the general shape. I'm going to click and drag
to select all of these nodes. Then if we hit Shift and k, we can create a frame
around our selected nodes. With this frame created, go to the node tab in the
side panel, give it a label. We're going to label
this as structure. You can choose to give
your frame a color, which will advise that you do. Then give it its own color, which in my case is
going to be dark red. You can open up
this Properties tab here and increase
your label size. So now we're able
to review what's going on in this part
of our nodes setup. We have our original
group input node. And we're taking our base cube and turning it into
a diamond using the jewel mesh with then adding geometry using
the subdeltoid mesh. The next step is to
extrude that geometry. Using the extrude mesh node. We set it up so that we
extrude individually. And then we use a field
system to generate random values for the minimum and maximum
extrude amounts. We expose this field as a parameter and we
call it extrude scale. We then work our way back to the extrude mesh and move
on to the transform node, where we increase the scale of our diamond structure
by 1.4 on the z-axis. That is our setup for
creating the base structure. The next setup is
actually located here. So we have these nodes
used to separate our geometry and then join
them up together here. I'm going to take this
section and move it over. I'm gonna take this section, move it over slightly, hold down Shift and
press P. Here we have another frame which we are
going to label as separation. Let's give it a color. So let's go with purple this time and
increase the labels size. Then we've got the final setup, which is for the materials
and additional objects. Again, I'm going to
select all of these with the exception of
the group output node, which will be on it's own. Hold down Shift and press pay. This we're going to label
as finishing touches. We're doing multiple
things here. We're adding materials
and additional objects. So you could label
this as adding properties or anything
else that you think accurately describes what these nodes are being used for. Now we have three frames. That point itself makes the whole setup looks
so much cleaner. You could also create
frames within frames. For example, we can
take these three nodes, select them all, hold down, Shift and press P. This will create a new frame
for these three nodes. But it will detach them
from the separation frames. You can just click and
drag to connect them. This, I'm going to name
it as separate base. So these are the
bass notes use to determine where we're going
to separate our geometry. Let's give this greenish color and increase the labels size. While we're at it. Let's just do the
top and bottom, so the selection and
the inverted as well. We'll select these nodes, create a frame and
just reposition. And then the four notes
at the bottom, shift pay. We attach. Just make sure each
of these has labels. So we could say this is the
top half and give it a color. Then this setup is going
to be the bottom half. And let's give it
an opposite color. Now we have a very clear set up of our node system
by dividing up the node tree into
smaller groups of nodes that we can analyze to determine what they
are being used for. That wraps up our section
on data flow and using fields to generate objects using the geometry node system. Thanks guys, and I'll see
you in the next video.
29. Building The Base Asset: Our first step for creating our procedural building is to create the individual assets, like the corners, the windows, and the roof tiles. I'm going to open
up a new project. And straightway, I'm going
to save the project. So I'm going to go File, Save As, and I'm going to save it as pro building dot blends. So I've created a test
one ahead of time. I'm just going to name it as pro building pro
short for procedural. And click Save As. Now we have baseline, Let's start creating the assets before we worry about
the building itself. Now the assets all need to follow specific rules
if they're going to be used properly with our
instancing of those objects. The main role is that
they all need to follow a one by one by one ratio. So we're going to
start by creating a base assets that
we can model off of. I'm going to delete
my cube objects by pressing X and selecting Delete. Then I'm going to
hold Shift and I go mesh and add a plane objects. Open up the operator panel
in the bottom corner. I'm going to set the
size from two meters. One meter. It's important
that we do this step as early as we can to avoid
complications later on. Then if I press one on my number palette to go
into front orthographic view, I want the plane, it'll be facing this view. I can do this by
rotating on the x-axis. I'm going to rotate
on the x-axis by a value of 90 degrees. Then I'm going to go into edit mode for my plane
by pressing the Tab key. Let's zoom in a bit. You'll see that we
have these squares. We're going to use
these squares to position our plane precisely. Hit G with all of your
geometry selected, and then hold down control
to enable snapping. I'm going to position my plane so that the
objects or June, we'll fold at the bottom
left-hand corner. Left-click to confirm, then hit the Tab key to go
into object mode. Next, I'm going to press N
to open up the side panel. I can confirm the
scale and rotation. The rotation is
set to 90 degrees. The scale is set to
one on each axis. The sky was correct, but we need to make sure that the rotation is
going to be applied. Hold down Control and press a
to bring up the apply menu. Then select rotation and scale. This should reset the
rotation values back to 0. Because of that, the dimensions will change slightly as well. Now it reads one
meter on the x-axis, one meter on the Z, and 0 on the y because
it's applying. Finally, we have
our base objects. We're going to double
left-click on where it says plane and type in base. Press Enter. And we have the base objects.
30. Creating The Assets For Our Building: We're going to be creating the various assets
for our building. With the base selected. Hold down Shift and press D
to create a duplicate hold down Control to snap it to the grid and move it
across to about here. You might find it difficult
to see on your screen. But we have smaller grids
inside of larger ones. We're using the larger ones
to determine the distance. This is just for the sake
of good organization. With this second plane, we're going to name
this as door lava, then modelling them one-by-one. I'm just going to
create the base for each model first
and just line them up. You can fast forward
this if you wish. But we're going to
be creating a door. Ground window assets,
two more windows, a roof tile asset, and a corner assets to act as
the corner of the building. I'm going to do that now. So I'm going to again go
back to the base asset, shift D, control and position. One of them. I can go quicker by
creating another duplicate. Positioning, selecting
two of them, and then duplicating
them at the same time. Hold down control. And position. This is my door. This one is going to
be the round window. This is going to
be the window one. We're going to have window too. This one is going to
be the roof tile. We're going to have
one more added. So hit Shift D one more
time, bring it across. We're just going to
make sure that it's in the correct position
and name it as. Next, save your work. Now we need to model
each of these assets. Now you can spend as
much time as you want, but always keep in
mind the target, the mentions of these assets. So starting with our ball asset, which is this one here, I'm going to select and then press the period key
on my number part. Focus on this asset. Hit the Tab key to go
into edit mode for the store and hold down control and R to
create luke cuts, scroll up on my scroll wheel a couple of times and left-click, then right-click to
confirm the position. I'm going to hold
Control and Alt again to create a horizontal Luke car. Click. Bring it up to about here,
and left-click again. These two phases are
going to be the doors. Go into face, select, select these two faces, and hit the I key to inset. We don't want anything
at the bottom here. So we're going to press
B on our keyboard. And that's going to
remove the boundary, allowing us to create
the door frame. Once you have the measurement, left-click to confirm, Alt, left-click to select the frame. And I'm just going
to orbit my view to make it easier to see. Then shift and move your cursor to create
a frame objects. Always make sure to bring it out so that the
frame is feasible. That is our first asset done. We're just keeping things
as simple as possible. But you can go into as
much detail as you want, so long as the door asset
follows that one by one ratio. Up next we've got
the ground window. Again, we're going to
focus on the asset. Press one on my number pad so I can go into fun
orthographic view, hit Tab, and now we're going
to create a ground window. The way I'm going to do
this is I'm going to hit I and just bring it in slightly. Now at the moment, it doesn't seem to be
working for me and that's because I've got the
boundary switched off. I'm going to hit B to
turn the boundary back on and just bring it in
slightly to about here. Then I'm going to hit again. Bring it in a bit further. Select the inner loop. Just extrude it. Just a touch. That's how what ground window. Let's now move on
to the next one. Focus with the period key. Hit one to go into fund
orthographic view. This time we're going to
do something similar, but we're going to create
a slightly different shape for the window. Hit I to inset. That's inset to about
here this time. Insert again. This time I want to create an additional frame about here using a couple
of luke cuts. So hold down control and are
going to create my loop cut. But rather than
repositioning it, what I'm going to do is I'm going to hit the
light mouse button to confirm that I can move it
and lock it to the z-axis. Then I'll just bring
it up to about here and convert the position. Repeat that process
with a second loop cup, but this time, drag
it all the way up to the top so that it
straightens out. Hit G, then z, bring it down slightly to about. We'll go. Now we're going to
go back into face, select, hold Alt, and
click to select the loop. But then hold shift
and click to select this face here to extrude. And just bring it out. Just a tad. Click, confirm, and then tap
to come out of edit mode. We're making good progress
here with our assets. The next one is going to be
our second window asset. Again, repeating the process of zooming into our selection, going into front
orthographic view. This time I'm going to
create a cross shape or sort of like plus sign
shape with our window. So again, we're going to insert and I'll
inset to about here. Then I'll inset again so that
we have the outer frame. And now we want to
create the loop cuts to go vertically and horizontally to create the rest of the frame. Control and r, Let's create
the third school first. To make this even, I'm going to left-click. Then I click, then
hit G, Then x. And I'm going to move
it along the x-axis. A value of, let's go
0.05 and press Enter. Then we're going
to hold Control R. Click. Just drag across so
that it snaps and left-click. Then hit G, then
x, then minus 0.1. Then press ends up. Next. We're going to actually bring these in a tab because I think
there'll be too far out. So let's just hit G, then x, then 0 to five. Then we'll do the same
with the other one, but in the reverse direction. So grab x minus 0.025. An answer. And I think that's
so much better. So i's for that
part of the frame. Now we'll create the
horizontal loop G. Then, then see this time. And we want to move
it up just a tad. So probably 0.025 again. And then we'll do one more time. We have a loop cut below G, then z, then minus 0.025. Let's actually go with a
value of point C Five. Press Enter. That should be a good enough
sh