 that, a little glitch in the matrix. So what I was talking about was that for most of the wallpaper work, we're not really dealing with external lighting and all of the images are providing its own light. So they're shadeless, they're shining. And also the way they're structured, it's much easier to just automate that. And the way I'm doing it is with Python, Blender has got amazing integration of Python scripting. So that's another sort of non-visual way, but we'll see once you look at those graph setups that sometimes is actually more legible than graphs. But one of the things that is very different between the two is that, you run these scripts one time as a batch while the power of the geometry node setup is that it's being evaluated all the time. So it's just permanently there being executed. So I'm just loading a bunch of PNGs and they end up in this, that's one of the things that is specific to the EV engine. Things stacking in depth sometimes causes weird issues. And if you run into that, it's very likely in your material settings, it's the alpha blending that's being really difficult. So if you have problems with that, usually the way to solve it is, well, I mean, I would have to do it for all the materials, but whatever is to either do the hashed method of dealing with transparency or just wiggle the camera a little and things are gonna be fine. So that's the old way. So now with GNOME 44, I've redone this setup using geometry nodes. There's a number of reasons why that's beneficial. One of them is that I can easily regenerate a different set. So for the next release, if I want it to have a different layout, I can just modify the, so geometry nodes is like this modifier, if you're familiar with the modifier stack in Blender, that allows you to really create these systems that either change or even create geometry and geometry can be meshes, it can be volumetrics, it can be curves, it could be anything and it can even like change between the methods. So it's really easy to like create, let me dissolve this one, let's dissolve edges. So very easily you can, and if I want, I can change the set of icons. So the way I'm loading the icons is the same, I just have a folder full of PNGs, then I have a script that loads them and then this setup will distribute them. The great thing about nodes is that they're real-time, like everything you're doing, it immediately comes up on your screen and that's just like, it's a godsend for iteration. Even though you might not grok exactly, like there's gonna be some like vector math and like changing a vector to a rotation and it's like really tricky to wrap my head around it. And I remember from school, I really hated matrices and I thought this is something that I'll never run into in my entire life. Well, I was wrong actually, this is a lots of vector math creating these systems. And while I don't feel like I understand, it's like you're tweaking something and you see a result, so it's really excellent. So what is it? So Geometry Nodes is a modifier, just like if you would add a cube and had like wanted to smooth it, you would use the subdivision surface. So it's a modifier that changes the source data, which in this case is a mesh and outputs usually the same kind of data. With Geometry Nodes, you're way more flexible and you don't even have to input data and produce some other mesh or a curve or something else. So that's really powerful. So in this case, I wanted to keep the source mesh because that is what gives me the control. So I'm creating a simple grid, mesh grid and the system, the Geometry Nodes setup fills up all the faces with an icon. So we're gonna look at how I'm computing like the surface. Maybe, I don't know, we'll see. The sort of heart of the operation, well, yeah, the heart of the operation is the instance on points node. So what this does is that it creates something that's also a data type, like mesh or curve. It's an instance of something else and it's different. Problematic is that it looks the same. So you can have instances of meshes and suddenly you're really struggling to figure out why things don't work because you're expecting operations on meshes, but these are instances. Instances are sort of these copies that are very memory efficient. You can, you know, render millions, like the same way you can render vertices, you could render Instawell. I mean, it's probably not just as dramatic, but it's very like memory optimized to be using instances. So you can like get a lot of things going on on your screen with instances. But if stuff later you wanna do on the actual mesh and you've got instances, you can convert between the data types. You can convert like meshes to curves, back to meshes. You can convert meshes to volume and so on. Like that's very powerful within the geometry node system. So we're creating instances of points. So where do we get the points? Well, in this case, even if you don't do anything, so this is the input, this is what before this geometry nodes modifier gets executed, that's what you had. Now you can use it, you don't have to use it. Like if I would create, let's say a grid, I hope it's a mesh grid. And instead of those vertices, I can feed it something else and it completely ignores the source geometry. But we wanna have control over the layout. So I'm using that. And if you would feed a mesh directly into the points input on the instances on points, then there's this maps. So vertices are essentially points. So that's good. But what Blender does, it does silently a conversion. It has mesh to points where essentially it's the equivalent of doing this. I'm doing faces instead of vertices because I wanna do the scaling of the bitmap to fit the size of the face. So that's also something you can compute. There's one sort of amazing thing very use it all the time. And that's that you don't have to like instance is what you're feeding, what you're creating on every point. So it can be a mesh, for example, you can do a cube. This is instancing rather than a mesh primitive. This is taking things from a collection like here. So I have the icons here, all imported. One thing I didn't mention if you're gonna be dealing with pixel graphics is that to get this sort of nice pixel rendering, you don't want any filtering on these PIX maps. And that's done in the shader editor when you have the PIX maps so when you have the icon, one of the options is the filtering methods. So you want the closest rather than, I think linear is the default. Those are always methods that would make a fuzzy if you're dealing with tiny little PIX maps that they would get fuzzy like that. So that's why you need no filtering. And in here, we're instancing, rather than instancing the whole collection on every of these points, you can instance pick instance, which would pick one by default. That would mean that would sequentially like it has an order of the points. Every mesh has, all those vertices are ordered. And so to have it randomly, you can have a random value node, which would be all sorts of random data types that you can generate and one of them is integer. I'm computing the number of elements from the collection. So there's a domain size node that can count the number of instances. So rather than setting it as a fixed number, I'm getting that from the collection. And then it like randomly generates a PIX map on each of these points. This is very legible or reasonably legible graph, but it's mixing like a couple of, this is like actual data coming in while these purple things are something called fields. So that's like a recipe of how to deal with the data. So like you have a very simple graph, but it's actually like doing on each of the vertices coming in, perform something. So until I get the data, like this can be the same sort of graph can be used in a completely different context and still work because it is like a recipe how to deal with those things. So in here, this is, and I don't think I need this. Like this is just like picking up some faces that we don't need and like randomly. So I don't know why I have that there. So what was I talking about? Oh yeah, so this kind of expects all these icons to come in on a flat surface, but the great thing about geometry nodes is that you can apply the same sort of modifier on a different object. So let's say we would add a cube and I would, let me just only show the cube and I would use the same, I think there's a bug, a minute warning. All right, all right, all right, I'm gonna, so I've used the same setup on a cube, but now, because we're not dealing with how the fixed map is angled, let's try to fix that by using the normal. And as you can see, like what we're doing here is we're taking the source mesh and we're taking, we're putting points at the center of each face. And when we do that, like even if I was being smart and wanted to do a rotation, so let's do a rotation. Well, to see anything, I'm gonna first use something that I was using beforehand and that was dual mesh which would be like very similar to this, but it would like generate a mesh from the source mesh where it would put a vertex at a face of the original mesh and then just like glue it together. So create like this new mesh with faces and everything. And that's where this thing will kind of sort of work, but not really. So we want to rotate each of the instances based on the normal. And this is another sort of thing that is hard to grasp for me because of what fields are. So I'm getting like this data and I don't like, where's what's normal? And you can like put this, this same node at a different places of the graph and it's gonna do a different thing because this doesn't mean anything on its own. It means something based on the data that it is connected to. So in here, it means a normal of the mesh that's coming in, of the faces of the mesh that's coming in. Also like it's very random because, you know, normals are vectors which if you try to remember mass, it's like a direction and speed and change of position in space. So in most cases in here, it's three values that define the change between the previous position and this position and we want rotation. So it's like an angle. So how do we change that? Well, there's nothing called vector to angle. There's vector to Euler. Gotta remember. And I think it's a line Euler to vector. All right, so it's doing something. And I think, hmm, all right. Well, it's doing something else than we wanted but it doesn't matter because it's still wonky because of the source mesh we're doing. Like I have no idea what kind of things it's doing. So let's go back to, like let's keep this and I think it's this one that we want. Oh, this is gonna go terribly wrong. And let's feed it back these points which doesn't do anything because these have no normals. So what we need to do is somehow capture the normals from the previous mesh. And there's a node called capture attribute. So I'm gonna capture attribute. I'm gonna feed it with this geometry and I wanna capture the normal of a, so this is gonna be a vector and it's gonna be a phase. All right, somehow we lost it. Yeah, it's fiddly. I don't particularly like dealing with the graph to be honest. Anyway, so this is the geometry and this is the attribute. So we're gonna replace this guy with this guy. I'm not like feeding it the normal as a rotation but it needs to be a vector. So I'm gonna add the vector to the rotation, not a rotation to a rotation. All right, I'm glad we figured it out. So now like every mesh that we're gonna feed it is going to like use, it's not super accurate I guess, but yeah, it's enough accurate for me. So it's doing the rotation. So that's good. I'm gonna, like I have only a couple of minutes but I wanna show you at least the symbolic nodes set up which is something that was in the previous release. And so this sort of setup shows another great thing about nodes is that you're creating these systems. And as I mentioned, they are modifiers but you can have multiple modifiers which is very useful in structuring your work. I don't like the sort of like the only aid you have, you gotta do a lot of what we call shit work to deal with nodes. They're really great for discovering and forming the graph but it's really terrible going back and understanding what you did and why things work the way they do. You have this framing ability. So every time you have a couple of nodes, so if I just like copy a bunch of these, I'll have to like get them out which is a shortcut I don't remember. Can I just do a different one? Yeah, so you can like group them, frame them. They're not groups, groups or something else. If you group things, it's good for instancing the same set of nodes. It works in both the shader which I use very often and probably here as well. So you can group but it's a different thing. So you can like color and group things together so you understand. So in here, I have two geo nodes setup. One is for like creating this setup that deals with the proximity to this mesh and plugging holes. But the thing I wanted to show you is that these, so you create these, it's elaborate but you create these note setups but then you can expose using these group input things. You can plug, there's an empty slot here. So any parameter they have here, you can expose to the outside world on the modifier stack right here. So I can like have not show holes or have holes create like a different size for the hole and that sort of thing. So like it's, you're structuring your project and you can expose them publicly. I see Marie dragging me out of, this usually happens but I'll provide links to these projects and I'll point you to the documentation so that you can actually learn about how things work rather than me just showing what can be done. Anyway, I thank you for your attention and I guess we're gonna have a few questions that I won't be able to answer. Yeah, let's take the question that we have here. There's only one. So the nodes available in geometry nodes seem to change between Blender versions. Any hints for how to keep up with the changes? Yeah, it's actually quite tricky and the thing is that Blender actually completely redesigned the system of geometry nodes, I don't know if it was three, well, there was just initial release of geometry nodes and I completely let it go by because I knew it's coming and it's gonna be amazing but I don't have the time to deal with that and that was one of the great decisions of my life because it was completely redesigned and works completely different with that fields approach and it's completely different. It's true that there's lots of new nodes but usually the thing is nodes that are coming sort of become more and more specific. So things that you need to do with vector math these days and you have to like multiply the two vectors and remember that like adding two vectors means that you get the resulting, you know, that's something I wanna avoid and usually the new nodes simplify things. So for example, I wanted to demo you how to create grids of things where you would have a mesh line and you would instance another line in the opposite direction on each of these points and then the resulting mesh you would instance your objects on but then a grid node happened and then you have a grid. Now you can instance like here I wanted to show you how to instance on volume. So you convert your mesh into volume so you can either have the whole object space as a volume or even just the skin of it and then instance objects in there. So that was also pretty difficult to do back then and now it's great and easy but I understand the need to have your project openable, you know, sometimes in the future. Blender has these long-term support releases where if you're a studio and you wanna, you know, rely on something that will be here and supportable for a long time you probably wanna stick there but like geometry nodes is very fresh so I don't think that, well, I haven't actually checked but like you might be lucky and, you know, the release that's marked as long-term support has geometry nodes so I would suggest going with that and then you're sure that an update will not break your project files. I have to say that that happens very rarely for me. I have projects that I did, you know, in 99 and I can still open them in Blender. I mean, they don't have all this fancy new stuff but it's pretty impressive that the backward compatibility is kind of nice and like you could probably be able to like go back to an old version and, you know, still open to do some tweaks but yeah, it's inevitable. Like if you wanna keep up, you gotta watch for the changes. Awesome. Well, we look forward to the links that you provide in the channel. Right. And thank you so much for your presentation and joining us today. This is awesome. It was a pleasure. Glad to have you.