 Welcome! Lots of people interested in geometry notes I see. I'm glad you guys all made it, even though it was a little bit tight on the time, but right. So you can see we're already in Blender. This is gonna be a little bit of a mix. I wanted to not do like a step-by-step. Okay, here's how you do X thing, tutorial sort of thing, but rather more of a display of like the broad variety of things that you can do in Blender. Of course also explain some things and we're in Blender, so we're gonna also create some things, but the focus that I want to give is on the variety also geometry notes. All right, first thing, little bit about me. I work at the Blender studio since the beginning of 2020. I've been working on these projects that you can see here and since the beginning of the development of geometry notes I've been part of the core team since we started in the end of 2020, part of the development cycle from the artist side of point of view and in general I just like procedural workflows. I've been using procedural shader notes for a while already and then geometry notes I jumped onto using them for every event, every single thing that I can do them with. It's like the first idea that comes to mind, can I do that in geometry notes? And that brings me to talking a little bit about the title. We can do that with geometry notes. That sentence has been kind of developing as a little bit of a catchphrase of mine at the studio because for those that have a little bit of production experience in a production environment you always have issues to solve, right? There's nothing ever goes perfectly smooth all the time and whenever we have the dailies and are talking about okay, how can we solve this specific thing, there's usually I think about it a little bit and I'm like yeah we can do that in geometry notes and that's what I want to talk about a little bit and give a couple of examples where we solve, we do problem solving specifically with geometry notes in our productions. Okay, because I'm gonna do a little bit of practical work. I want to bring everybody a little bit on the same page. I don't know, there's probably a really broad variety of experience levels with geometry notes in this room right now, so I want to at least give a little bit of theory even though it's not the most popular thing and the most important part to understand about this is what even is geometry. Defining that is already a pretty important thing in understanding okay how can I work with it on a note-based system and my broadest most general definition of that would be it's just 3D data that has a certain meaning right. Everybody knows about meshes and then there's volumes but it's all just data and it has a certain meaning in the 3D environment that we're working on it with and you can convert between different types of data and propagate different properties of these types of geometry and within that definition of geometry there are different types of course of geometry which in geometry notes we call components because those can coexist within a single geometry right next to each other so we can have the geometry as a container that has meshes curves volumes whatever inside of it has components at the same time and that's very useful because that makes you very flexible and working with them back and forth and then on top of these components there are domains which carry the actual data and that's the reference frame for the data for example just open up a spreadsheet editor here so we can take a look at this you need to actually find an object you can see the different components right we have the mesh curves point clouds volumes instances those are the ones that we have currently and then underneath that you can see that we have the domains so a mesh has a bunch of data on different domains vertices have their position as data layers you can see every single vertex of this cube that I just added or is it oh there it is and then edges have other sorts of data currently this one doesn't have any but it makes sense to store within the geometry depending on what type it is for the mesh to store data on different frameworks because vertices have a different use than edges and faces and face corners and so on and understanding that is already quite important to get a good understanding of how to work with this but I come back to these points later on while we go through the examples I just want to give a broad overview in the first place right and then the data layers that are on inside of these domains are called attributes and attributes are a more generalized way of describing what you already know as like vertex groups and UV maps that kind of stuff is just the layers of data that are stored on top of the geometry inside of the domains and then in geometry not specifically because that all needs to be visually represented with nodes we have the concept of fields and fields are basically just a representation of attributes and operations on top of these attributes for nodes so they are not actually carrying any data themselves that is the representation of an attribute I'll go into more detail a little bit later right okay I already mentioned this a little bit but for the examples that I want to show go into a little bit detail here and there are mainly supposed to showcase what I noticed especially looking back at the production experience that I got from the past two projects where we use geometry nodes heavily on just showing the broad variety of not even just the use cases themselves but even just the types of tasks that we were able to tackle with geometry with geometry nodes and I'm gonna lay a big focus because of that on to the problem solving and a production environment and because I wanted to show so many things keep in mind time is a little bit limited so I can't go into detail everything I'll try to go into detail with the more simpler examples then the more advanced ones just sketch out and broad strokes we get the idea behind it and then maybe focus on one or two nodes that the need more explaining right okay looking back at the examples that I I mean looking looking for the examples that I wanted to showcase in this presentation I basically just made a list looking at all the different use cases that I could remember from sprite fright and the current project heist you're gonna see the work in progress in the during this is animals and it's been a lot of different use cases and I kind of started noticing a little bit patterns where we had different kinds of tasks and one of them which is something that's really applicable for production environments but also for individual artists in general is just using it for the attribute pipeline so the data on top of the geometry is something that's very universally used in blender already as I mentioned with the legacy types of attributes that we have with vertex group etc. and with geometry nodes is only growing and growing and getting more general and you can also use it for example in shading so some example that I have here is on it's left click select I'm sorry I have to change that all right so this example is edge detection that's something that's incredibly useful for procedural shading everybody knows about it the way you do it for the different render engines that are in blender art is not consistent EVA does it differently than cycles nothing is really optimal but it's all just analyzing geometry data right you just want to get information about the geometry about the the angle of the edge basically into the shader and you can do that with geometry nodes so here I just have a single very simple geometry nodes modifier where I can just adjust the strength and a general offset to the edge detection that works on an object level so if I duplicate the object I don't have all the control parameters baked into the shader but can actually change them depending on the object that's really powerful and as I mentioned the setup is really simple so this one I'll just recreate really quickly create a new geometry nodes modifier and then here just add an edge angle node and this is basically going to be the core of the edge detection so all about just the angle that an edge has between the two usually two faces that it is connected to and to get information about both directions whether it's in this way or this way I need to get the signed angle so get positive and negative values and that can already just be dragged to the output and just going back a little bit to the theory part this year this input node gives me a field which is representation of the edge angle and then as soon as this field here is output together with the output geometry it attaches a new attribute on top of the data of this geometry so the actual data that's a little bit abstract to understand but it's an important point the actual data is not in this node right in this field here it's only in the geometry that's why the the line up here is solid and this one is dashed and also the socket shape tells you whether it's a field or not but the important point really is that the actual attribute the actual values the data that you see in the spreadsheet is only created whenever it's used before that is just the abstract representation of the edge angle and that's pretty useful because now without even knowing the values just knowing okay this represents the edge angle we can do some operations like just adding a math node and multiplying it with some value we can just expose that and then this is going to be the scale and adding another math node setting that to add to give the whole thing an offset with the default to zero and then oh yeah it doesn't work yet because we need to actually name this attribute so right now no attribute is created because it's not being used but if I just call this edge mask which is exactly what I'm using in the shader you can see that now it works and the way that this works in the shader is really simple let me just go to this tab you can see there's the attribute node which I recommend just searching there it is and you can just type in the name and you get the the mask so for the app attribute pipeline part this is incredibly powerful for any type of workflow just getting information about the geometry in in any way that you can actually get it with the nodes that are available which by now are quite a lot into the shader or sharing it between other other objects that different use cases for this also one more I want to show about this specifically I can't go into that much detail because it's a little bit more complicated but I can show a little bit of the very basic of this example stretch maps so here I have a setup where the deformation of the sphere creates a directional stretch map which then in the shader is picked up to use the direction information and then the tension of the deformation to generate a directional wrinkle map and there are multiple parts to this I'm going to go into more detail on the blog post hopefully soon on the blender studio website but essentially how this works is that I'm storing information about the base shape before it's being deformed then comparing it later on with the state after it's deformed to get the information of what changed and thus I can generate a tension map to see okay this one was compressed this one was stretched and then figure out the direction let me can maybe show yeah so this setup is a little bit more complicated but I will create a very simple version just now so here I have a modifier that does the deformation so I don't have to do it in sculpt mode and one thing I will do here is before that deformation in the modifier stack I add a modifier which only does one very simple thing it uses the face area as an output and then here I just store it as the rest face area and now it's part of the geometry data and these values are not going to change because it's an attribute that is completely disconnected from its its initial meaning it's not the face area anymore it's whatever it whatever the values represent and those values are not changing anymore and then after so this is the deformation afterwards I just create another modifier and in this one I also use the face area input but because this year is not actually it doesn't have any connection with the attribute I just created it still represents the actual face area after the deformation I can compare these two just use a divide node and then just get an input from here and then here in the modifier inputs I can press this button to actually put in an attribute and it already shows up here I can use the rest face area and then I can output this and this is going to be the ratio between the area after the formation and before the formation and that gives me information about what has been deformed how just quickly preview this with the new preview functionality oh yeah I should mention I'm using blender 3.4 so it's the latest master version and if I enable overlays oh no pie menu is missing you can see that depending on how strong I form this the areas that are being compressed are getting more dark and gray so this of course is a more much more crude variant of what I showed you earlier but that's the that's the essential idea right so that was the part about about the attribute pipeline let's talk about hacks so that's something that's in my opinion actually pretty interesting category because that's something that you need all the time it's just quick hacks just to get something done as long as it works it works it's not fancy you can't reuse it anywhere necessarily sometimes you can but it's just a quick solution to solve some annoying issue and the fact that geometry nodes give you such low level access to the data that you're working with in a visual representation just gives you so much freedom to apply hacks for example here's just a simple example I wanted to share because I use it all the time with our characters just add a new journal to modifier that's just one node just a switch node sometimes you don't want to delete the default cubes sometimes you want to keep it around so with this switch you can just turn it off or on it's like shredding shredding a scoop or something so the reason why this is useful is that you now have a control over whether this object is visible or not that is not the actual visibility settings because those you have to manage in terms of Kate this is viewport visibility there's rendering visibility but if you have a character variation that just shouldn't show up regardless of viewport or rendering sometimes it's more difficult to manage that if you have to put that in all the different settings so that's a very stupid solution to an annoying issue and there it's gone for a cube right it's the hacks now the a little bit more fancy and flashy examples creative tools or generators it's something to speed up the creative tasks that you were working with to simplify some some issues that you need to automate right it's the the generators that you know where you draw a curve and then fantastic things happen so here one example I have is something that we used a lot for the room of our main character where it's just a simple tool that's part of the creative process to just make things easier and here it's just adding some noise so with the with the old particle system you could do that on the fly and hopefully we integrate more the plan is to integrate more tools to also make that easily accessible to users but right now even though nobody spent time actually implementing these functionalities specifically for her for hair grooming it's already possible because everything is compatible with geometry notes and this example here you can just add some noise and what we do a lot with with the groom here would just be to just apply it it's just a just a tool you use it one time you apply it and then you can continue with the groom on top of what you generated and it's it's a procedure work workflow in the sense that you can you can automate a lot of the a lot of the things that you would otherwise have to do manually but it's a destructive workflow also and sometimes that's just what you need another example for the creative tools would be drawing in curves to generate things like here meshes have the example where I had a task where I needed to create paint splashes and I just very quickly made this tool to just paint in paint just get these splashes around and it's really quick to do you can just go in open the I'm used to the pie menus you can just change things around delete parts of it again and the manual input that you are still using for the output you have still a lot of creative control over the output but it's not you're not actually working on the output itself so it's a lot faster to iterate on that's incredibly valuable for any artist I would say another example in a similar vein name tag with some stitching on it any Icelanders in the audience I saw one there also just using curves to create some embroidery it's just going here actually let me split this viewport so we can see it two times I can just go in grab my pen oh right over there got the wrong ZF like this there you go so again really quick to iterate can just draw something in if you don't like it you can edit it just go back and yeah this this modifier is just using the input curve I can show the no tree a little bit sorry I'm not finding the right one right away there it is I'm using the input curve that's you saw me draw it in very simple and then re-sampling the curve to generate a whole bunch of points along that curve maybe I can show the points with the preview so I show the input here you can see that now there's a certain distance between the points like here on the circles because before if I just disable this maybe that's easier to show you can see there's a very very different density of points here on these circles and then there's nothing here so I want to re-sample it to get a consistent density then this one just adjust the shape to make sure I have nice round corners the fillet curve and then on top of those points I just scatter a bunch of these smaller threads these stitching elements and then add some randomization and that's about it but there's more going on in this example and that brings me to my next category which is technical tools so these were the artistic tools changed the user interface a little bit too much these were the the artistic tools creative tools and great I'm a shading artist I thought might be nice to add this detail in geometry because then we don't have issues when you look from the side at it and we have highly close-up details and looks much nicer but then the rigging artist comes in and says okay now this actually has to work with the character so in this example because it's all curves it can be a little bit tricky to actually make that work like you have things like surface to form or can actually wait to paint everything but all those things have problems so this we can can also do in geometry notes in this example here you saw that already it looked a bit strange maybe how how the way I was painting this in was like completely detached from where it actually is can bring that back and the reason for that is I'm actually drawing in these curves in the UV space of this object so if I move this around you can see it's actually attached all the time and even wraps around the back because using the UV coordinates of where I'm painting it in to project it onto the mesh and that's pretty useful for details like this that even means I can play around with this thing I can scale it up rotate around and even go into edit mode not just like parenting get this face scale it down and it's like a texture it's using the actually v's to project the geometry that's pretty useful I want to this example also is a little bit too complicated maybe to show the whole thing but I want to go into a little bit of explanation on this right so this is already the right modifier and the main player here is this node the sample UV surface node and what this node does is it takes a target input which in this case is the mesh of this badge but the modifier itself is on the curves curves themselves because those I want to deform along that target and what I'm sampling sampling this UV sample UV surface node is the position of this mesh at a certain point in its UV space and that's what that node allows me I just obviously need a UV map which I can just input here called that this stitching UV map show this real quick so this is what this UV map looks like and now you can kind of see okay this is this is the square where it's from 0 to 1 right so if it's here in this corner that's where it is and even if I just edit the UV's now I can see oh everything just keeps working in the way that I'm changing it and this this UV map I have to use as an input of course and then I compare it with or I sample the mesh with this as the source UV map along a sample UV and this is just the position of this object in this case yeah the position attribute and that way I can actually just place it somewhere in the correct UV space and then project it into the mesh maybe I'll do one thing to actually visualize this a little bit better because I see how this is a little bit abstract just create a new plane with a new geometry nodes modifier and then I'm going to take this object which is the target object drag that in here so very very sloppy quick setup I haven't named a single node so don't really take my workflow as an example I'm trying to be quick and then I can use a set position node to deform this and to actually visualize how the UV space looks for for my curves here I can just set the position to the UVs directly so remember the map was stitching and there is it's a little bit it's overlapping with itself and the reason for that is that the UVs at the seams are not split up so now I need to just go in and add a split edge node and there we go so you can see this is the actual object that I'm projecting this on flattened in its own UV space and that's pretty useful now because now I can actually see what I'm doing and draw in directly on the flattened version and it's projected into the same position that I can see here represented okay let's get rid of this I'm not sure if I'm moving too fast in my in my last test I was way over time so I'm trying to be a little quick right another technical tool I just wanted to show relatively quickly this year we used for fixing the tilt of a curve because we had the issue with a moving character that as soon as you put some hooks to the curve and then move it around the curve goes all over the place and it's just freaking out so here I just made a relatively simple modifier to to make sure that the tilt of the curves at the beginning and the end stays fixed let me just show you how that looks without yeah you can see it's just doing what it wants so it's a relatively that's something where you were geometry notes can really shine because you have full control over the actual geometry itself and the way this works is also it uses some vector math like there is in these note groups there's a little bit of vector math going on so if you're scared of that then yeah rigging is maybe not your forte but the way this works is that I use some empties one at the tip and one at the end turn off this here and then from these empties I calculate with a little bit of vector math how the curve needs to be oriented how the tilt needs to be to actually follow this I do that that the end in the tip and then interpolate between them so there's the map range node here which just uses the spline parameter input which goes from zero to one along the spline and then I map that to the actual values that the tilt needs to be at the beginning at the end and set that at the curve tilt and then it works you can see if I rotate this around you can see how it nicely follows along and then this empty can just be parented to the object right so just to summarize a little bit for this category the low level access that you gain with geometry nodes is just giving you a lot of freedom and control of how to how to fix issues in these kinds of senses where otherwise you're very restricted with the tools that you have in blender already and it's fully integrated into the modifier stack so it works together with what you already have right now my my last category which is probably most cool one I've been looking forward to this one trying to use the pie menu every time parametric assets can have something like an effects asset like this that is generated procedurally or semi procedurally and you can just give it a whole bunch of parameters that you can tweak then on a short basis or whenever you use it you can give it different parameters and tweak it directly to exactly you need it to do and this one here is one that we have been using a lot for the current production oh yeah take a quick look behind the scene so these are all cards so it's not actually a volume you could also do that with a volume and geometry nodes but you have been using cards and the idea is to just generate a whole bunch of trajectories and then put some asset on it like sparks or debris or these volume cards and the concept behind all of these different elements of this effect is all the same idea it's all just trajectories and you send the project out along the trajectory but the trajectories are all generated procedurally with these settings here and you can also package that up in a way that you have a single asset that then find the right object is controlled with some custom properties here that you can then use to drive the geometry nodes settings for example so here I can also then change the speed to be like in super slow motion or something like that and you yeah you get all the subframes because everything is procedurally generated on the fly so whatever parameter you put in that's what you get if that's like the little microsecond away from a full frame then you can still get that right for this one I also want to go just over one node that makes this possible basically you just figure out the right object so these are the sparks for example but again they're all using the trajectories they're just sending different objects on top of it and have slightly tweak parameters to fit their physicality a little bit better the sparks are much lighter than the debris etc but the main node that's making the trajectories themselves possible is the accumulate field node and this one is a little bit abstract to understand and it might not seem super useful at first but once you get a hang of using it it's really really powerful and what it does is it takes any input field can change the the type of field here and the domain and it takes a group index and then accumulates the values of this field whenever it's being actually evaluated so here is the next time that the geometry is actually used with this whole field this is where it's actually evaluated and it uses the elements of this geometry which I can just show you really quickly is which one right I can't really show you exactly because these are tiny curves they're very small they don't have an actual trajectory trajectory yet that's where we're going but I'm essentially generating curves with a certain amount of points doesn't matter their shape because the shape is then going to be generated with this field and the way this works a little bit of physics when you calculate a trajectory you can just sum up the velocity over because I separate it into individual steps and then sum up their direction to get the location of the last point but at last point it's influenced by all the points before so I can't just set it directly I need to accumulate the individual positions or directions where they're flying from all the points before and that's exactly what the accumulate field node does it actually takes the elements in the geometry and then sums up up to the current the current element all the ones before within the same group and that's really useful because that means I can have a bunch of trajectories each trajectory has its own group index and then within that group index I go through all the points and get the current position that's essentially how that works of course it goes a little bit more into detail but yeah like I said I wanted to show multiple things we have 12 more minutes I'm going from this very similar go back here another parametric asset also based on the curves you have a bunch of smoke and if I go yeah sorry not based on the curves on the on the cards the same way it's just using geometry nodes to spawn a whole bunch of instances of a simple plane and then using some shading to give that a little bit of a volumetric field but the trick here to to give that a little bit of variety and make it look a little bit more natural is to within the geometry node system send over information of the life cycle of a single card into the shader so you can actually animate this and you can see okay because playing back in real time it's a little bit noisy but there's some animation there's a sprite sheet animation on each one of those cards and let me just go to the geometry not set up okay this one is a little bit big yeah sorry I didn't really clean this one up for the presentation but the essential idea is that I can pass out this is this is the main part that I want to focus on now I pass out an ID attribute which identifies each individual card so I can introduce randomization and I pass out the age which you might be familiar also with the the old particle system there was a similar idea you might want to use the age of a particle within a shader to to give it like for the sparks also I'm using the same thing for example where the sparks as they're as they're just starting out they're very bright and yellowish and then glow out to be more red and then darker and this you can do very easily with an asset that you already created in geometry nodes just pass out information and also relatively newly I think I'm also using this here so just maybe as a disclaimer now you can even use attributes on instances directly from geometry nodes so yeah previously would have to realize the geometry but now these cards are all using the exact same plane they're just instances but they all can have their individual age value and ID value assigned and used in the shader even though they're all using the same base geometry that makes it a lot more performant because you don't have to handle thousands of vertices is actually just instances and when you go on from smoke there's not a long way to also go some fire this is an example using the same setup just different spreadsheets different shader very very similar setup and then the only difference is I have material a node here that actually assigns the material and I just change the shader you can find the smoke there we go different smoke looks a bit worse sorry and then lastly once you have stuff flying on trajectories and you have a fire what else is an explosion rather than just fire on trajectories right so with the setup of just combining the trajectories from the the effects that I showed in the beginning of this category and then just using the same setup with the fire on top of that to generate flames from the projectile is shooting on the trajectory you can get an explosion like this and just you prove that this is all procedural to just change the parameters some nice variation to it like fireworks at some point the computer slows down but that's essentially what I was getting at and I'm actually really surprised that I made it this far already and I'm still under time so that's pretty much what I wanted to show but it also means that we can have maybe some questions yeah go ahead this blend file unfortunately not know but most of these examples if not all of them I don't want to lie are taken directly from based on what I've been doing on the current project project heist and the blender studio and we're always every week we do production log and share all the all the stuff that we've been doing in the previous week there's part of the blender studio package it's ten ten bucks a month it's part of that and some of these files are also done a little for free I think but yeah it's part of that yeah you can do absolutely anything you want in between yeah I can I mean I can go back to the example that's basically exactly what I've been doing I've been using it in the shader where did I have it here you know I turn this off here it is so the wrinkles that are created here are all just in the shading and the way this works is by outputting maps like this well maps the attributes so they're stored on the geometry you can also bake them into maps if you want to but because you can use the attributes directly in the shader can just do it like this for example and yeah here I've been using multiple different maps at the same time to also get the direction of the stretching for example oh yeah I didn't show this I wanted to show this but here this is basically the map so you can see the influence of the deformation right yeah that's also a little bit of kind of the point that I wanted to make some of these you might say okay isn't it just trying to replace some functionality that Bender should have on its own maybe but is that so bad that you're already able to do these things and the things that should definitely be in blender we would also agree that they should be they will make it eventually but doing doing that on the scale of implementing it into a software is very different from making your own little tool you can do that on a much shorter period of time because you don't have to make sure that works with everything else and maintain it because just use it by yourself or share it with other people but yeah that's what I would say to that some of these things definitely could also just be part of Blender from scratch and also some of these things are planned to be inside of Blender as node group assets that we're planning to ship with Blender at some point but that's an ongoing process I personally don't have made experience with that to be honest I don't know if there's a difference oh we're getting getting shut out there's gonna be oh yeah that's also something I wanted to mention there's going to be another session I forgot what it is but there's one of the developers so maybe you can answer there's gonna be a session by the main developers of geometry nodes in the developer attic so maybe that's a question that can be better there yeah and then maybe you can wrap it up thank you for your attention