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

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

93 Lessons (9h 59m)
    • 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.

397

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

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 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