 I got a thumbs up. Welcome, everyone. It's a bit suspicious, guys. This is a rigging talk, guys, so whoever might have gotten lost feel free to find the talk that you actually meant to go through. My name is Demeter, or Met, and I am the character rigger at the Blender Animation Studio. So I rigged all the movies, Coffee Run Onwards, so Sprite Fry, Wing It, Charge, and the upcoming one. And for those who haven't seen Wing It, it looks something like this. We don't need audio. And in this talk, I'm going to be talking about the face rigs, specifically the mouths. So as you can see, we have some pretty wild deformations going on there. And we used geometry nodes and a lot of different layers of geometry nodes tech to make this work. And I'll also show you, let's just jump into a short file real quick, so you can see it more up close and personal. So here's a short file from the production, and it plays. And you see this 2D mesh thing, which is going to be the biggest topic of the talk. You can see how it deforms. And in turn, it deforms the 3D mesh as well. And it is controlled by an armature, like normal. So if I grab this guy and move it around, it moves things around like so. Like that. Of course, it still takes a lot of time and effort and talent to create nice, beautiful poses, which our animators have done. But I hope this gives you kind of an initial idea of what's going on. So you can see kind of it's deforming the mesh along the original silhouette of the character. And that's what we want to achieve today. I don't promise that this will be possible to follow along on. But if you want to try, like definitely not live, I'm sorry guys, there's no way. But if you want to follow along at home, then what you can do, and I don't have the URL saved, I'm just going to browse it. But you know what, maybe it's better that way. So if you go to studio.blender.org, we have all the assets of our film, maybe not all the assets, but all kinds of stuff that you can get about our films. Some of it is free, some of it is behind a paywall. The thing I'm about to show you is free, which is the files that I'll be using today. If you go to Wing It, see movie, explore content gallery. And then I think I put it in rigging. So research and development, rigging. And then if you go all the way to the bottom. This is all the tech live as I was coming up with it here in the beginning, you know, it's a previous production's assets when we didn't have assets yet. And then here at the bottom, we have Blender Conference 2023 files. And you can download it from here, different checkpoints. And yeah, so that's where you can find it. And so let me get started with this file right here. This here is my friend Jerry. And he is, he happens to be a sphere, but this tech will work on any character shape. On sharper edges, it might act weird, but you probably wouldn't have sharp edges in a character like where you would use this tech anyways. As you can see this thing, this ball is pretty simple. All I did was like some in a cube, subdivided it three times, rotated it a bit. And that's pretty much it. And maybe I will give you a sneak peek of the final result real quick. She's going to look something like this. Okay, but now let's go back to the beginning. Okay, so first thing that we have to do is create a UV map, which is going to be obviously that kind of 2D shape that you guys have been seeing. And so to do that, it's kind of like creating a regular UV map except with some principles. So I'll just open my UV editor and I'll hide my asset browser. And hello, why do I not see any? Oh, because I don't have any UVs yet. Okay, this is fine. So you want to have the area that you will be deforming on a single UV island. And also in case anybody is confused why UVs are involved in rigging, a UV map is just a generic 2D coordinate system. It's not only useful for shading, it can be useful for any kind of data or whatever. In this case, we're going to use it for rigging. So I have made this cut through my subdivided cube, which I will be using as a UV seam. And that means I'm kind of aiming to deform this half of the sphere. We shall kind of start making sense in a sec. So I have my UV seam. I'll unwrap that and then I want to... So this backside, which is not going to deform, I kind of don't care about, but just to be nice and clean, I'll try to make it reasonably positioned and whatnot. But there's going to be a bit of eyeballing involved here in a second. So I want, it's kind of important for these. Also, they don't have to fit into the one by one grid. It doesn't matter at all. What does matter, and you'll only see why quite a long time from now, is that... Oops, that's not what I meant to do. What I mean to do is to move the 2D cursor to 0.5 on X. And it's important for the UV map to be symmetrical along that point. And so I'm just going to kind of rotate this thing and just kind of eyeball it initially. And then I'll do a more proper step in a second. So I'm going to select the middle loop here. I'm going to set my period to the 2D cursor and I'm going to say SX0. And so now at least that center line is perfect. I'll do the same for this one, even though it really doesn't matter. SX0, there we go. And then, because I want it to be perfectly symmetrical and right now it isn't, there's probably nicer ways to do this, but I think the easiest way, and for the sake of this talk to keep it simple, I'm just going to delete this half and do a mirror modifier, which has an option to mirror UVs. And I think I want the V axis probably. And if not, we'll undo and then we apply. I guess not. Then we try the U axis, apply. There we go. So now we have perfectly symmetrical UV map along the center. And the reason this will be important later is for symmetrical posing. So once we have this 2D mesh in the 3D world and we have bones hooked up to it, our bones are going to have names like .L and .R that signify whether it's on the left or right side. And Blender has tools for symmetrical posing and that kind of stuff and that's where it's going to come into play, which is far future. That's what now you know. Okay, so the next step is indeed to create that 2D mesh and this is where GeoNodes is going to first come into play. I don't know if I mentioned it yet, but I am not intending to go into actual node setups very much. Maybe I will quickly pan through them, but for the most part, I'm just going to be using preexisting GeoNodes and the reason for that is just like, if there's to get this setup working, it's going to be quite a few GeoNodes setups. So if I went into them, it would be a seven hour long talk, unfortunately. But still, I think the title is valid. We are going to be using GeoNodes as you'll see. So I'm just going to duplicate my mesh and this will become our 2D thing. So I add a GeoNode modifier and maybe it's already in my file. Yes, so I have a transformed UV map node setup. So this should be kind of a simple one if I open the correct node tree. So this actually I stole from Simone, who you guys might have seen yesterday. It looks like that. And what that will allow us to do is if we specify a UV map, we should specify the one we just created, then we get this mesh and you can see with the factor that that will get created like this. Oh, and that actually reminds me we... Okay, there is one thing I forgot to make sure but it might be fine. So if I go back to my UV map, I want to make sure that up is up and left is left. Okay, I got lucky. So this is fine. Yeah, it looks good. For this one, it doesn't matter. Okay, so this should be good. So I'm just going to let this do its thing and then I'm going to apply this and now we have this 2D mesh. And of course our goal is to sort of transfer the formations from this guy to the 3D mesh. I'm doing some transformations here kind of for convenience. I am never going to apply those transformations because that would ruin the sort of, what's the word, the correlation between the objects coordinate system which the next geo node setup is going to expect which we can already do. So this is going to be kind of the main heart and soul of everything which is the UV deform geo node setup which is kind of what it implies. It's going to deform our 3D mesh based on its own UV map as well as a representation of its UV map that exists as an object which of course is the UV object. So I'm just going to picker that thing. I also give this a proper name, cherry head, let's say 2D mesh, there we go. And then I'll select my UV map and it is broken. Oh, right. So also from Simon's talk yesterday, some people have learned of the address position attribute which is, and there was a question of like, why is it useful? It's not only useful for shading stuff and like sticking coordinate systems to things but also for rigging. And I need it on both objects here and there we go now it no longer explodes because this geo node setup somewhere in there I probably can't find it but somewhere it relies on the attribute that is called exactly rest underscore position which is kind of a hard coded attribute in blender that gets created by this checkbox. And what that contains is just the vertex positions of this mesh before any modifiers, before any shape keys, before any deformation which is handy when we're trying to figure out sort of deltas of movements which is what it's going to be relying on. That probably didn't make sense but maybe in just a second it will. So because this setup is kind of already done and what I like to do for naming my geo node modifiers is just mouse hover disk, control C, mouse hover disk, control V. Kind of wish blender just did that to be honest. But anyways, so now, because this geo node setup is now kind of already set up and by the way, I mean, it looks like this. It's like splitting up the mesh again then it's taking deltas from the difference between bringing the 2D mesh and UV map and then calculating depth of set and all that garbage. So I'm sorry, the files like I showed in the beginning are available online. You're free to delve into this yourself but I don't have time to know the brain cells. I mean, I made this but I don't remember what half of this does anymore. So anyways, the point is this already works and we can prove that by, well, first I'll do it wrong. So now if you just try to sculpt on this, it's not gonna work. And that's because you are deforming its resposition. So to do something that is not that you can add the shape key. And now the resposition stays untouched and you are instead transforming, you know, the final result of this mesh and the geo nodes can then tell the difference between that and its original and use that to deform the sphere along the UVs. So great, job's done. Except there's so many, so many things that can go wrong and that you still need for this to be a usable character. I'm not even sure, I haven't looked at my notes yet. Here we have a few steps where the order doesn't matter that much but let me try to stick to my order. So yeah, masking, okay. So obviously you want your character to have a mouth and that would mean like getting rid of these vertices in my case or in your case, you might have a character that is modeled with a mouth and then bad news, you need to fill it in because when the geo nodes is going to be looking, okay, so let's say that in the future you want to deform this vertex to this position like this, it's going to look like, hey, where is the original vertex coordinate of wherever I am now? And if there's no geometry here, then it's just gonna say, well, there is no vertex coordinate, UV coordinate. So I will just return zero zero and that's not gonna be good. So as far as this modifier is concerned, you need a complete mesh so that any area that you want to slide over needs to at some point exist. But after this modifier is done, it's processing, you are very welcome to mask it out which you can do with the mask modifier, except not in this case because the mask modifier will hide vertices which is going to look like this which is hiding more than what I want. I want to just hide the faces which would look like this and we can only do that with geometry nodes which is nice because that's what this talk is about. And in this case, I don't think I have it prepped but this is a node setup that costs exactly one node. So I think I'll just do it and I'll just call this mask by attribute and I like to prefix it with GN dash and Ctrl C, Ctrl V. And so to create a simple masking node setup, you would just do a switch and then you say if the switch is true, then you showed the mesh and the switch is of course your mask and it's probably it and then, hey, why is this not a, why is it non-attributes? Hi, yeah, now it is. Okay, I'm confused. Instead of a boolean, do I want something else? Like mix, boom, yeah. I'll just use that then, whatever. Oh yeah, I guess. Okay, I mean this will work. I thought the other one should also work. No, okay. Wait, sorry? Did it delete geometry node? Oh yeah, I guess that's what I used. No, but I thought I used the switch. Oh no, that's a different thing. Okay, my bad. Thank you, Hans. Okay, then let's just go back to what we were doing. There we go. It's useful to have Gino's devs in the audience. Mask, mask. Okay, and then we use an attribute and we haven't created it yet, but I have my selection here already because I was making that selection while explaining stuff. So if we go to attributes, we add a new attribute, we call it mouth mask, let's say. The domain is faces and the data type is, I just want the boolean. And then what we should be able to do is set attribute, which I'm sure this operator exists somewhere in the interface, but whatever. So now it's not really represented in the 3D view, but now we've assigned a value of true for these faces on this attribute. And so now we specify that attribute to this modifier here. And instead of deleting points, we want to delete faces. And there we go, we have a mouth. I also made Jerry teeth, but I'm not actually gonna use them, I'm sorry. So there we go, we have a mouth. And then if you wanna be fancy, you can add your solidify and your subsurf and your edge crease. If I can make a proper selection here, just to make Jerry look a little bit nicer. So if you do shift E1, there we go. There you go. So Jerry has a mouth. And so now this still works, not because we don't have a shift key question mark. No, because shift key is a zero. So there you go, this still works. So we're making progress. Now it really looks like a mouth. And hell, if you wanna make a still frame of a character, then maybe this is already enough. But you want to animate this and just Scott mode is not enough to animate this. Unless you're gonna animate this frame by frame, which honestly, I mean, if you're making a few seconds thing, go for it. Okay, so thankfully this is non-destructive, so we can just get rid of it and reset to where we were. Okay, and then the next step, what is the next step? Oh my God, we're really far gone already actually. Okay, the next step, okay, this is gonna be fun. So when it comes to this 2D mesh, you could deform it in a million ways. And also there's something that is a useless point that I forgot to make, which is that when it comes to rigging Jerry, if you don't wanna do it this way, the way that you would normally do it, you could just give him a regular old shape key-based rig where you sculpt a bunch of shape keys, you hook it up to a bunch of drivers. And I mean, it's gonna work, but creating those shape keys is gonna be a pain if you want to preserve the silhouette perfectly. If you don't care about that, if that is not part of your style, then go for it, whatever. But if you're going for a style, whether you want a sphere to stay a sphere or your curvy character to preserve those curves while they are emoting, that's when this tech is gonna be useful. So it's quite specific. But again, this is mostly about wing it. And that's what we wanted there. Although we do want to break the silhouette in some ways, which we did with like armature modifiers and lattices in special cases. So yes, that's one problem with if you try to just use shape keys for this kind of setup. And another is even if you sculpt it to a perfectly spherical shape, for example, by using a shrinkwrap modifier in your process, the interpolation between the two poses is still gonna be linear, which means like when your character is halfway through an expression, even if your final shape is perfect, which mine isn't obviously because I was just doing this quickly, even if your final shape is perfect, your transition might still be a bit janky, which you can again try to address with shrinkwrap. And that is in fact, what we did on sprite fright. And clearly it worked because we made sprite fright, but the fact is it was difficult and pretty annoying. And this is basically just an evolution of that tech in my eyes. So there you go, just wanted to get that out of the way. So when it comes to deforming, not the 3D mesh directly, but the 2D mesh, you could also do it in a bunch of different ways. You could set up a shape key base trig on this. And honestly, that would probably be totally fine. You could also rig this with bones, and honestly, that would probably be totally fine. But that would all be too simple and this talk would be too short. So instead, we're gonna do something kind of complicated and new, and I think exciting, which is to rig it using a curve. And so I'm just gonna go ahead and add a bezier circle. I'll just rotate that 90 degrees. Maybe I should do this in edit mode. I don't think it matters. No, it doesn't matter. But I will scale it in edit mode. And what I wanna do is of course just match this roughly to my mouth, which if I want to signify that better, I can kind of repeat the steps that I just did earlier for the, yeah, when you enter edit mode, things get a bit wacky. So let me repeat some of the steps that I did for the 3D mesh, which by the way, if I did this in a better order, then I wouldn't have to repeat. But it's fine. I think we have plenty of time. Actually, I have no idea how much time I have. Oh, so much time. And so what I wanna repeat is the attribute stuff. And we're gonna have a mouth mask, domain, face, type, boolean, okay, select, set attribute, mouth mask, yes. Modified, oops, modified geometry nodes, mask by attribute, attribute, mouth mask. There we go. This is just so we can see better that area of the mesh on the 2D mesh doesn't actually matter. It has no effect on this whole setup. It's just nicer as a visual thing. In fact, we can also use this while we're at it to hide this area, which is not going to deform because it's the back of the character and it doesn't matter. So let me just do that. Just do set attribute again. And then if, interesting. Okay, Hans is watching, it's fine. So now that we can see kind of better what we're doing, I want to snap these curve points kind of perfectly to my vertices. It technically kind of doesn't matter if it's perfect, but you wanna do a nice job and it's probably better if it is perfectly placed. So there we go. I'm just using, it's a shame I have to do so much object mode switching for this one, but there you go. And then this is the pie menu that I think is built in now for cursor snapping. That's why it's quite fast to do. And this is not enough curve points. You can have as many as you want. I have decided that I want just four more for those points. And I can do it easily by just pressing W and say subdivide and then I get more points. And then I'll do the same snapping and again for those guys, which will just take a minute of rapid and violent clicking. And then there will be a kind of weird aspect to this as well, which is the fact that, okay, so obviously this curve, you can see it better if I go into ice. You can still, okay. In object mode, you can see it. It's all wobbly. We want to rotate things a bit so it's nice and smooth, but you can't symmetrically edit curves in Blender as far as I know. So what I tend to do is just, I say I'm strictly in front view and I say R 15, too much R 10, good enough. And then I go on the opposite side. I remember the number R minus 10. R 10, cannot make segment, wrong button. R 10, R minus 10, oops. R minus 10, there we go. Okay, so it's better, it's better. But yeah, so you get the idea. It's kind of silly, but it works. And then I want to set the handle types from automatic to aligned, which may or may not matter, but I think it matters. Because I mean, we're gonna hook, yeah, it will matter because in the future we are going to hook up these curve points to bones. And if the curve points were set to automatic, then the bones, the hook modifiers for the handles, I think would not work. I'm pretty sure. Okay, so they need to be aligned. And then I'll also shrink these down along individual origins. So yeah, when doing stuff like this, my main point in this section being that while symmetrical editing of curves is not possible, if you know what you're doing and you're careful, then you can get it done. For example, if you wanna move these curve points outwards, then you would just select both of them, set your pivot to banding mock center and just scale them like this. And that way you can be sure that everything stays symmetrical. Okay, we have a curve. I'm gonna give it a name. I'll call it curve mouth. And now the next node setup comes into play. So I'm gonna select this guy. And by the way, this is all gonna look very simple, but then you'll see the problems. So we can just have another geo-node setup. And then, okay, this is where I need to go to my asset library because I don't have the nodes that I want. Become 323. And the node setup that I want is, I wish I could see the full name. Hello. Curve the form singleteracy. That's not the one. Curve proximity, the form iterative. How do I do this? Can I drag and drop it here? No, here. Ooh, okay. That works. Oh, and in this case, it sets the name. Interesting. Okay. So this node setup is actually, can I show it to you in a different environment where I think it's a little bit better? So it's this guy here. No, it's not, is it? No, it's this guy here. So what that node setup lets us do is have a curve and kind of deform the mesh in a really cool way, which was kind of, Simon also gave me a tip for this. So the node tree, as you saw, was called Curve the form iterative. Geonodes don't have for loops, but it turns out you don't need for loops, you can just copy paste stuff. So there's the single iter, there's one iteration of this logic, there's the formation logic, and then that looks like this, which is not too bad, I guess. And then you just repeat that 10 times, but then you have a limiter here, so how many times you wanna use it? Obviously, this is pretty expensive, so the more iterations you use, the more expensive it will be, but now, as for the purpose of what is the point of it being iterative as opposed to just one iteration, is because what that lets you do is notice how these outside vertices do not deform when I'm jiggling this, but as I move closer to them, they do get deformed eventually. And that is because of the iterative aspect of it, that as I'm moving this, it runs, in this case, four times, and you can kind of think of it as it's running, so let's say that I have a movement from this point to this point, and I drew it in the opposite direction, whatever. It's gonna start picking up new vertices to influence four times throughout this journey. And that's what allows you to kind of get this really cool effect of it, you know. Yeah, I don't know, it's all squishy and squashy and nice. And this kind of reduces the amount of masks that you need to paint, and you can get really nice deformation before the mesh starts breaking, so I can illustrate that by reducing the iterations to one. You can see that here the, because it's not picking up more vertices to influence, it just starts clamping these vertices and then stuff starts getting inverted and all that, whereas if you allow it to pick up more vertices to deform, then it's nice like that. Okay, so that's the nodes set up that we are going to be using. Do you think I saved the file before I came here? Yes, nice. We have all to save, it's fine. So, now here's the thing. You guys remember this very important checkbox that meshes have called address position? Curves don't have that. So, you know, on one hand, I could say Hansi is watching, but in theory, hopefully in the future, because now hairs have this new curve data type, I don't know where it is. For, hopefully we will be able to control those, like the old style Bezier curves, but until then, because these old style things don't support the address position feature, we will just have to duplicate this. Hello, yep. And we are gonna have one that is called underscore rest, which is going to basically store the rest position for us, which means we are never gonna, we don't wanna touch this object anymore. It is important that this doesn't change, so I can hide it like that. And then I can rename this to underscore def, which stands for deforming. So, this is going to be the object that stores our deformed curve. And so now, you can go back to this node setup, you can see it demands rest curve and deformed curve. So, I just specify those like so. And now, in theory, if you move the deform curve, ah, there you go. You can kind of deform the thing and in turn deform Jerry with a curve. So, there you go, progress, but obviously this is pretty rough still. So, first things first, I think I will create the deformation on this, but to make that non-destructive, I will just do it in a shape key. And the reason for that is because I want to nail down one of the parameters here, which is the max distance, which is just an absolute space distance that one iteration of the vertex deformation logic picks up, so I just reduce that until I am kind of happy. We are on three iterations, which I think is reasonable, and so I just play with this value until it's fine. There you go. Another thing we want to set is that we don't want to affect the outer rim since that's pretty much the edge of where we want to deform things. And I mean, if Jerry's topology was different, then he could allow for even more deformation, but in this case, you know, we're keeping it simple. And yeah, we always want to not deform the outer edge of the UV island that we're working with since then the node setup is just gonna, you know, like you can see here, it's kind of, it's actually not as bad as I expected. But anyways, it's not ideal. Oh, that's just from the subdivision, right. Okay, there you go. So without subsurf, you can see it is breaking. Subsurf cleans it up a bit by coincidence. But so we want to avoid that. And to do that, we can just simply paint an influence mask, like on many GeoNodes setups that you might be familiar with. So to do that, I'll probably just actually use weight painting. Maybe disable these things for a second. Yeah, so I want to use vertex masking in weight painting, and that doesn't work when some, in some cases it doesn't work. I think it's probably when you're modifying the geometry in this case, like by deleting geometry. Okay, so anyways, I want to paint. So I have entered weight paint mode, and I want to just add weights to the inner area. So notice how the outer vertices don't have a white dot. Oh, and I would like to have accumulate, please. They don't have a white dot, so I cannot paint on them. So I'll just paint this fully red. And then, and this is, I wish this was symmetrical. Maybe I can make this symmetrical. Let's try this one. I don't actually need for this one. And I'm just gonna hold shift, and smooth and this symmetrical, okay nice. Oh, but I want that to accumulate as well, please. So I need to go to this, and this, and this, and back here and shift. Okay, so now we're gonna have our influence kind of fade out towards the edge of this UV island. And this is going to, you know, it's going to limit how far we can push Jerry's facial expressions. So you do want to actually kind of spend time to make this mask, to experiment with this mask later on and try to push it as far as you can. But for now, let's just see what we got. What was that group called? By the way that I just painted is just called group. I'm gonna call it influence mask, I guess, like UV deform influence mask. And then I paste it here. And there you go. So now you can see the silhouette is no longer changing and the geometry is not really overlapping. It's not breaking. It's pretty fine. So that's good. Next problem, however, let's say I put this back roughly here. Now notice if I try to move the top of this thing, it actually ends up affecting the bottom as well. And in the 3D character that also is not ideal. And the reason that's happening, short story, because we have a single spline and Blender doesn't necessarily know, that's like this bottom half of the spline should not move. Like even though the curve points are not moving, that in a way the spline is moving. It may be that doesn't make any sense, but whatever, let's just fix it. And how do we fix it? Well, it's complicated. So first things. So what we want to do basically is just split this into more than one spline. In wing it, we had four splines. We had a top, bottom, left and right. For Jerry, we'll go a little bit simpler. We just have a top and a bottom. So I'm gonna select all the top curve points. And I'm gonna press, I think Y. Yes, Y. And that splits the curve. So now we have one spline up here, which I can hide. This thing is the, I don't know what the thing is, whatever. And then you have the bottom half. And now the issue is of course, we had our rest curve, which is now has nothing to do with the deform curve. So we have to basically just delete that one, duplicate the deform curve, rename it back to rest, go to this geo node setup again and fix that reference. And there we go. So now we have two splines in our curve. So when we move the top section, it no longer affects the bottom section, which is great. And the node setup itself doesn't care if there's multiple splines, this will work, which is good. Except now we have two control points for the corner, which is weird and not ideal and not what you want, especially in the near future, because I'm going to be hooking up these curves to an armature. Procedurally using CloudRig, and CloudRig will not automatically create a combined control for these overlapping curve points or anything like that. So one thing that I could do, which I'm not going to do, is just let CloudRig generate whatever it wants. It's gonna have an overlapping set of controls for this curve point. And then I could make a parent control for those that unifies them. But that's a bunch of extra bones, extra complexity. I choose that complexity in a way that doesn't add complexity to the armature itself, but instead other stuff that the animators don't have to touch. So what I'm going to do, first off, I'm gonna rename this just to suggest what I'm going to do. I'm gonna have a multi-spline version of this curve. And this also gets called multi-spline. And then I duplicate it again. I wish I had saved it back up earlier because we're now just gonna recreate the previous version of it. And I'm gonna call this one single-spline. And now I'm gonna make this go back to being a single-spline curve. And the way I do that is I just grab one, move it away, select the other one, press F, and then delete this guy. Same procedure on the opposite side. F, delete. Now we have a single-spline curve again. And this is what we want to use to control the multi-spline curve. And again, reminder, the reason it's important this is multi-spline is so that we can move the top half without affecting the bottom half. Okay. I think before I actually make one follow the other, what I'm going to do first is bust out Claudric and generate that curve armature. And to do that, I'm actually gonna duplicate Jerry's armature. For those who don't know what Claudric is, it used to be a Rigify extension up until tomorrow. But in, as a 4.0, so the future, it's going to be a standard on add-on. Claudric is a tool for generating armatures. And the reason it's going to become a standard on add-on is because it's also going to include other tools. So it's gonna become a bit more feature creep, I guess. And it always was, anyways. But anyways, so you can Google for Blender or Claudric and you'll find its repository and you can download it. And so currently it's a Rigify extension. You just slap it into Rigify, you enable Rigify, you learn how to use Rigify, which you can do from last year's talk of mine. So to use such Rig Generation systems, we need two armatures. One is our MetaRig, which contains information and the other is the GeneratedRig, which contains the result, I guess. So I'm just gonna rename this guy to Meta-Jerry. And I like to not have it in the Characters Collection but in the Scene Collection. And then what I wanna do, currently Jerry's Rig is a root bone and he is like object-parented to the armature, so it doesn't really matter. I'm gonna keep this root bone. I'm gonna give it the Cloud Copy Rigify type or in the Future Cloud Rig Component type. And I'm gonna do some stuff here, like Disable Unified Psyched Ethnic Cutlers, it's just a preference. And I'm gonna Disable Create Root because I have a manually created root bone here, which is not important, but whatever. And then the next thing I'm gonna do is just add a new bone. Maybe I'll just snap a cursor there, do Shift-A, so it creates a single bone. I'm gonna parent this to the, interesting, why is VSC picking up the input weird? Anyways, there we go. Oh, I think it's because I tapped on it with my finger. Okay, so now this bone is parented to the root and I'm gonna rename it to mouth, I guess. And then I'm going to assign Cloud underscore curve as the Rigify type. And this is one of my favorite Cloud Rig types where you can just specify a curve object which I'm gonna give it, you know what, first I'm gonna show you what would happen if you did it wrong, again. So I'm gonna specify the multi-spline one just to see what would happen if you just try to rig the curve while it is made of multiple splines. And another thing I want to do is specify the target rig is rig Jerry. And then I think we already have a rigid collection so I'll specify that also. And that should be enough. And then in theory, we should be able to click this button. And this rig object is gonna have a bunch of bones, maybe on some hidden layer, whatever. And it's gonna be great. Looks good. Okay, oh, I knew I would forget something. So the bones are massive. I'm gonna fix that. So I can jump between my generated rig and my metric using Shift-T, that works. And to make the bones not massive, this is a bit unintuitive and you only know it if you know it and I'm sorry about that. But what determines the display size of bones is not this, not the length of the bone, it's the bendy bone scale, which is, yeah, I know. So we make it smaller with Ctrl-Alt-S, which is a shortcut that I think already got removed. But I put it back, if it doesn't work for you, there's a tool here somewhere, I don't know. It's still kind of big. And here's a cool thing about Cloud Rig, okay, now it's smaller. Not just this idea of going back and forth and iterating on a million controls, but also I have a couple of checkboxes here, which I forgot to check. One is X-axis symmetry and the other is controls for handles. So I'm just gonna check those and regenerate again, which I'm, by the way, doing with, okay, I forgot something. With Ctrl-Alt-R, that's my regenerate hotkey, which I think now comes pre-done in Cloud Rig. So in my earlier generations, I've created, well, Cloud Rig created all these hook modifiers, but when I changed my settings, these hook modifiers are no longer valid. So we wanna remove all of these hook modifiers and how are we gonna do that? Basically what you do is, and this is why a wireless mouse is very important, you pick up your mouse, you use two hands here, and you go either that or you use a line of Python, but I think this way is way more fun. Or you would think you could just have a button here that says remove all modifiers, but the technology is not there. Okay, so now we've nuked all our hook modifiers, so these don't do anything now, but if we regenerate, then only the good hook modifiers get recreated on this guy, which we will need to remove again, by the way, because like I said, this is the wrong object. But so anyways, hook modifiers are there. So now this works, which is nice, and it just has this one problem that I mentioned before that these controls are doubled. So we have one there for, I don't know, the top, and one for the bottom, no, the other way around. Anyways, two is more than what we want there, which is the reason for why we created this single spline curve. So we go back to Cloudrig, to this bone, and we change the target curve to the single spline one. We can regenerate, ignore, ignore, ignore, go away. Okay, we regenerate, and then yeah, again, we do the thing. Okay, see, but isn't it much faster when you pick up the mouse and you do this? Way better, more ergonomic. Okay, so now our hook modifiers are on this object instead, and that means we only have one control for the corner, but it's not doing anything because even though the curve is moving, if you squint your eyes, you can see a black line there, it's moving, but the curve that is deforming our object is the multispline one, and we are moving the single spline one. So we need a connection between those two, and here is gonna be a bit of manual labor, which I intended to skip over, but I'm, oh, wait, I'm not that good on time, only I have six minutes. Then I might actually skip in the future, but I will show you one iteration of this. First things first, I'm gonna just do some arbitrary deformation of this so that I can see what I'm doing. Then I go to the multispline one, and then my next geo-node setup is to, yeah, I don't have it either, so I need to hop into my S browser, and I want to have, first of all, I wanna ask for the subject, glue curve points, there we go, and so this is kind of a one at a time type of deal. This geo-node setup, it needs a parent curve, which I want the single spline one, and then it wants a parent and a child curve index, and it's just gonna, yeah, just glue those curve points, and you have to repeat this no set of a bunch of times, it's a bit sad, so, but you can just basically play with these index values until you find the correct point, oh, and to actually see what you're doing, though. There you go, so that seems like the correct, that seems like the correct one. Yes, there we go, and then you would go ahead and duplicate this, and then you would increase the child's index, and then the parent index, and this is very boring, and yeah, in this case it didn't work, so you wanna go back around until you find the correct pairing, and you repeat that a bunch of times until, ah, shit, too far? No, no, yeah, this is, yeah, so that's the thing. Once you've done that, it all kind of works, so here you have, I think I might have called the objects a bit differently, sorry, yeah, so here I call this master, so this is supposed to be called single spline. So now the multi-spline guy has a bunch of these geo-node modifiers that are all the same, just with different index numbers, and that glues them to the single spline one, and that now means that you don't have a double control in the corner. You can move the top section without affecting the bottom section, and it took a lot of steps, but there you go. Now this kind of actually works, and you can use it to make expressions. Wah, that's not what I meant, but you can indeed also make him angry. And also, something I forgot to return to is that symmetric opposing also works. I have it bound to shift x, so as you can see, we can pose this symmetrically, which is super nice, and there you go. You can make some pretty cool expressions just like that, and there is one last problem, a potential problem that you might run into, which is that when you try to go for really small, small shapes like this, what you'll notice is that it's not nice, but what's weird is that when you look at your curve that is responsible for this, for driving this deformation, the curve looks pretty great, it's fine. So the problem is that, like I was doing in the beginning, the sort of perfect snapping of the curve points, well those points are fine, but then there are points like this one that is not perfectly on a curve point, so at small scales that becomes noticeable in precision. So to fix that, we have one last genote setup, which is probably not in the file again. No, it's not. So asset browser, nodes, nodes, beconf nodes. The last node setup is attach verts to nearest point on curve, and this again just requires your two curves, the rest and the deform, and it requires a mask of just the loop that you want to affect, which in my case is going to be not this guy, but this guy which is already happens to be selected, so I'm just gonna create a vertex group called lip loop, hit assign, and then specify that here on the mask, lip loop, and there you go. Now you can have nice and precise small mouth shapes and everything else, and you can create, I tap my second screen with my finger again, and in the end, you can make all kinds of funky shapes. And there you go. And I believe that's pretty much my time, so thank you very much. Thank you.