Learn Geometry Nodes Animation in Blender | Eldamar Studio | Skillshare
Search

Playback Speed


1.0x


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

Learn Geometry Nodes Animation in Blender

teacher avatar Eldamar Studio

Watch this class and thousands more

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

Watch this class and thousands more

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

Lessons in This Class

    • 1.

      Introduction

      14:03

    • 2.

      Basic Transformation of Geometry Nodes - Part 1

      17:25

    • 3.

      Basic Transformation of Geometry Nodes - Part 2

      14:15

    • 4.

      Vectors and Calculations

      20:09

    • 5.

      Curves

      21:17

    • 6.

      Instances

      18:36

    • 7.

      Curve Instances

      20:02

    • 8.

      Noise Textures in Geometry Nodes

      24:27

    • 9.

      Material Attributes in Geometry Nodes

      25:58

    • 10.

      Proximity Grow

      26:25

    • 11.

      Paper Effect

      35:26

    • 12.

      Cake Diagram

      23:13

    • 13.

      Raycast

      18:54

    • 14.

      Raycast Example

      34:16

    • 15.

      Final Project - Part 1

      23:06

    • 16.

      Final Project - Part 2

      25:14

    • 17.

      Final Project - Part 3

      17:09

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

72

Students

--

Projects

About This Class

Unlock the power of Blender's cutting-edge feature, Geometry Nodes, and embark on a creative journey into the world of procedural animation with our course - "Learn Geometry Nodes Animation in Blender"

Whether you're an Intermediate Blender user or a newcomer to the world of 3D, this course is designed to elevate your skills and broaden your understanding of procedural animation.

Features:

  • Procedural Animation Techniques: Dive deep into the world of procedural animation, discovering how to create dynamic and responsive animations using Geometry Nodes. Explore techniques for animating objects, particles, and more.

  • Advanced Node Operations: Learn advanced node operations and workflows to create complex and intricate animations. Understand how to manipulate geometry, control transformations, and achieve realistic effects.

  • Optimizing Workflow: Streamline your animation workflow by learning tips and tricks for optimizing and organizing your Geometry Nodes setups. Enhance efficiency and productivity throughout the animation creation process.

  • Real-World Projects: Apply your newfound knowledge through hands-on, real-world projects. From abstract motion graphics to dynamic simulations, you'll work on projects that showcase the versatility of Geometry Nodes.

Photos From The Course:

Meet Your Teacher

Eldamar Studio Inc. was founded in 2018 as a small webshop for photo effects. Since then, we've expanded into a full marketplace that serves hundreds of thousands of users.

Now, we bring our expertise to Skillshare. Explore our high-quality courses designed for 3D modeling enthusiasts, where we share insights gathered from years of experience.

By enrolling in Eldamar Studio courses on Skillshare, you'll gain access to a wealth of knowledge that empowers you to master the intricacies of 3D modeling. Unleash your creativity, refine your skills, and navigate the world of 3D design with confidence.

See full profile

Level: All Levels

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