Procedural Modelling In Blender With Geometry Nodes | Joe Baily | Skillshare
Search

Playback Speed


  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Procedural Modelling In Blender With Geometry Nodes

teacher avatar Joe Baily

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Lessons in This Class

    • 1.

      Welcome To The Course

      4:15

    • 2.

      Accessing The Workspace

      2:30

    • 3.

      Adding Your First Node

      5:12

    • 4.

      Introducing Data Types With Vectors And Floats

      2:30

    • 5.

      Isolating Vector Channels

      4:19

    • 6.

      Exposing Parameters To The Modifier

      5:20

    • 7.

      Using Two Of The Same Node

      5:48

    • 8.

      Changing Input Types

      4:11

    • 9.

      Changing Values With The Math Node

      4:34

    • 10.

      Creating Fake Users

      3:37

    • 11.

      Using Your Node Tree With Other Objects

      3:56

    • 12.

      Replacing Object Geometry With A Mesh Primitive

      4:52

    • 13.

      Creating Instances Of Geometry With The Join Geometry Node

      16:06

    • 14.

      Adding Labels To Your Nodes

      5:16

    • 15.

      Changing The Color Of The Nodes

      5:18

    • 16.

      Using Reroutes

      2:12

    • 17.

      Creating A Block System Exercise

      10:59

    • 18.

      Growng Our Building Block From The Bottom

      7:04

    • 19.

      What We Are Going To Create

      2:20

    • 20.

      Introducing Data Flow And Fields

      10:39

    • 21.

      Moving Around Our Nodes To Change The Flow Of The Data

      6:20

    • 22.

      Creating An Abstract Effect Using Data Flow And Fields

      9:25

    • 23.

      Separating Our Geometry While Being Defined By A Field

      15:07

    • 24.

      Controlling Our Separation With Math Nodes

      11:33

    • 25.

      Controlling Multiple Parts Of The Set Up With A Single Node

      6:26

    • 26.

      Creating A Second Object And Using Materials With Nodes

      11:47

    • 27.

      Bonus Video Animating Our Node Set Up

      3:47

    • 28.

      Analysing Our Node Setup And Organizing With Frames

      6:46

    • 29.

      Building The Base Asset

      3:59

    • 30.

      Creating The Assets For Our Building

      15:50

    • 31.

      The Base Structure Of The Grid

      9:27

    • 32.

      Organizing Our Nodes Into A Frame

      1:40

    • 33.

      Adding A Window Instance

      4:28

    • 34.

      Randomizing Our Window Instance

      1:56

    • 35.

      Separating The Geometry

      4:44

    • 36.

      Defining The Selection For Our Separartion

      15:17

    • 37.

      Creating The Ground Floor

      14:15

    • 38.

      Adding The Roof Tile To The Wall

      9:34

    • 39.

      A Review Of What We Have Done So Far

      9:03

    • 40.

      Creating The Second Wall

      7:13

    • 41.

      The Second Set Of Walls

      3:32

    • 42.

      Adding The Length Parameter

      5:05

    • 43.

      Maintaining The Connection Between Each Wall

      7:41

    • 44.

      Connecting The Other Walls Challenge

      1:34

    • 45.

      Connecting Wall D

      4:06

    • 46.

      The Third Wall

      3:00

    • 47.

      The Fourth And Final Wall

      2:29

    • 48.

      Random Instance Parameters

      5:03

    • 49.

      Setting Up The Roof For Our Building

      10:37

    • 50.

      Repeating The Process With The Ground Floor

      7:34

    • 51.

      Positioning The Building

      11:33

    • 52.

      A Review Of The Project

      14:50

    • 53.

      Downloading The Right Version Of Blender

      1:54

    • 54.

      How To Activate The Node System

      6:55

    • 55.

      Adding Our First Node

      3:42

    • 56.

      Creating A Basic Shape

      13:25

    • 57.

      A Review Of The Basic Chair

      3:18

    • 58.

      Applying The Modifier

      5:28

    • 59.

      Using Mesh Nodes

      5:14

    • 60.

      Combining Object Info And Boolean

      7:53

    • 61.

      A Drinking Glass

      4:08

    • 62.

      Modelling A Button

      7:21

    • 63.

      Modelling A Button Using Another Object

      4:59

    • 64.

      Introducing Our Procedural Table

      2:44

    • 65.

      Using Vector Nodes To Build A Table

      12:35

    • 66.

      Combine XYZ

      6:42

    • 67.

      Naming And Organising Your Nodes

      7:38

    • 68.

      Finishing The Legs

      13:32

    • 69.

      Assigning Parameters To The Modifier

      6:34

    • 70.

      Adding Leg Thickness

      9:22

    • 71.

      How Math Nodes Work

      7:04

    • 72.

      Using The Math Nodes

      4:38

    • 73.

      Fixing The Leg Size

      8:31

    • 74.

      Finishing Touches

      3:57

    • 75.

      A Review Of The Table

      7:55

    • 76.

      Making Our Drinking Glass Procedural

      8:16

    • 77.

      Preview Of The Forest

      1:21

    • 78.

      Using Point Nodes

      7:28

    • 79.

      Attribute Nodes

      6:42

    • 80.

      Per Vertex Instancing

      3:18

    • 81.

      Instancing With Collections

      4:42

    • 82.

      Attribute Randomize For Scale

      3:51

    • 83.

      Attribute Randomize For Rotation

      2:34

    • 84.

      Create A Forest Exercise Geometry

      8:33

    • 85.

      Create A Forest Exercise The Nodes

      7:42

    • 86.

      Materials For The Forest

      7:20

    • 87.

      Changing The Point Distribute Method

      6:40

    • 88.

      Using Vertex Groups For Density

      4:47

    • 89.

      Using Weight Painting For Vertex Groups

      2:45

    • 90.

      Using Empties For Control Overview

      1:12

    • 91.

      Creating New Attributes

      4:36

    • 92.

      Your Trees Are Too Tall

      3:09

    • 93.

      End Of Class Challenge

      1:34

  • --
  • Beginner level
  • Intermediate level
  • Advanced level
  • All levels

Community Generated

The level is determined by a majority opinion of students who have reviewed this class. The teacher's recommendation is shown until at least 5 student responses are collected.

491

Students

--

Projects

About This Class

Welcome to one of the first, if not 'THE' first course on procedural modelling in Blender using procedural nodes.

In this course we cover how to create both singular objects and entire scenes using a node system not unlike the one that has been used to create materials in cycles since Blender 2.7X. If you are used to creating materials using nodes then you will have a good starting point for learning geometry nodes as the process and structure and generally the same when building node systems. The key difference between the two systems is the nodes that are used.

In this course, we learn how to create objects by creating instances through our nodes, allowing us to build simple shapes with just a couple of different types of nodes. As we move through the sections we will introduce more nodes leading to more spectacular creations.

But of course the point of geometry nodes is not simply to build an object. The point of geometry nodes is to build an object and THEN be able to edit that object using non destructive parameters. We are going to learn how Blender pulls this off and how you can create a new workflow for building objects.

Not only can we procedurally create objects but entire scenes as well. Using point nodes we can distribute an object across an entire seem in a manner similar to using particle systems, only this time with nodes to control the different parameters.

We are not only going to be covering the various nods in this course, but also HOW the nodes are used. So that by the end of each project you will be able to understand what a specific node is responsible for.

We hope you enjoy creating objects with nodes in Blender.

Meet Your Teacher

Teacher Profile Image

Joe Baily

Teacher

My name is Joe Baily and I am an instructor for 2D and 3D design. I specialise in 3D modelling using software platforms such as blender and 3DS max to create virtual models and assets for video games and animations.

My alternative job involves teaching sport and PE in schools and so I have 1000's of hours teaching experience in multiple various fields. My goal here is that I always find great instructors in websites like youtube who are great but never give out enough content to really satisfy my own hunger for learning. Therefore, my goal on skillshare is to provide comprehensive quality teaching on any subjects that I cover, such as blender 3D.

See full profile

Level: Beginner

Class Ratings

Expectations Met?
    Exceeded!
  • 0%
  • Yes
  • 0%
  • Somewhat
  • 0%
  • Not really
  • 0%

Why Join Skillshare?

Take award-winning Skillshare Original Classes

Each class has short lessons, hands-on projects

Your membership supports Skillshare teachers

Learn From Anywhere

Take classes on the go with the Skillshare app. Stream or download to watch on the plane, the subway, or wherever you learn best.

Transcripts

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