 Yeah. Hello, everyone. I guess we can start. So, hello. I'm Amélie from Le Fais Special and I'm going to present Grispensil Rules for Animation Productions. So, some of you may know Le Fais Special. Maybe you've seen my colleagues talk this morning about the making of of the Siren. But if you don't, it's an animation studio that's based in south of France and it's been founded in 2015 using Blender since the beginning and Grispensil since 2018. As for me, I'm a research engineer there. I started in January of this year and I've been working with Grispensil and developing tools for artists and animators there. Yeah. If I'm also occasionally contributing to Blender, the Blender code, and maybe you've seen me on the chat under the mysterious pseudo of Amélie. So, in this talk, I'm going to show to you some of the tools we've been doing this year, especially with Grispensil. So, there are two parts of this talk. In the first part, I'm going to focus on materials and colors and showing you some small and efficient tools that can be used for different purposes. And in the second part, I'm going to show you more experimental work we've been doing on strokes and surfaces. So, I don't know if you recognize these images. Maybe you've seen these characters yesterday in the animation festival. This is Tiny Keen. It's a video game for which we have done some animation sequences for the trailer and also some in-game sequences. So, here there's a bunch of characters. You can see the style of the drawing. It's a very clean, flat style of art. That actually, for each of these characters, there are lots of different colors that are used. And one of the challenges we had was to define all these colors very in a clean way so that many different artists can use the colors and don't make mistakes in the animation with these colors. Actually, in Gris Pencil, we use color as materials, 2D materials. So, the first thing you have to do there is to create all the list of material. And then, once you're drawing in Gris Pencil, you have to switch between them. As you can see in this screenshot, if the list is very large, it can be tedious to find which material you want to use. And so, many errors can be made and it's disturbing the animation process. So, we were thinking of another solution for picking material, a more visual solution. That's what I'm showing here. Basically, you have your list of materials and you're going to separate it in different color palettes that you are going to define and display in context with an image. So, that's actual screenshots. That's what you are going to see in the viewport of Blender when you're invoking the operator, the picker. So, let me show you. So, it's a demo of how it's working. I'm just going to turn quickly because I don't see the video. So, here you see how the materials are picked. You can also switch between palettes by pressing the tab key as I'm just doing this. And there's also an editor for palettes within Blender. So, you can move material across the wheel, add pick lines, add materials or remove them. And you can also create new palettes from scratch directly within Blender. It also comes with an import and export module to put it as JSON file so that other people can import your palettes and materials. I'm also going to show you a time lapse of one of our artists that's been working with it on this project. So, you can see how she uses it. So, she's doing first the lines and then the filler parts. So, what's really interesting is that she can work directly in the viewport, not switching between viewport and list of material on the right. And it's quite efficient to do it this way. Okay. So, it's perfect, right? No mistakes except for maybe this little guy. So, here this character named Nebus was drawn with the wrong materials actually. So, we had to change it. And it's quite tedious to do this actually because you have to go in edit mode and change every stroke of every frame of the animation. So, we developed a fix up tool for those cases. So, the idea is that you're also going to go to edit mode, select a stroke and tell the tool what's the range of frame you want to affect for this new assignment. So, what it's going to do is going to take your reference stroke and look in all the other frames, another like the closest stroke it finds within the same layer with the same material. So, to compute the closest stroke, we are using a measure distance called observed distance which is really standard measure for curve distances. But maybe it can be improved because as you can see here, so I've assigned from the first frame on the left the material and it automatically assigned all the other ones. But as you can see like the last one is not really correct. So, this is caused by the observed distance and I think it can be improved but still we have this tool is useful and if you want to change the distance, now it's quite easy, you just have to change the measure. So, once we've done this work on material management, creating palettes and switching between them, we wanted to work on color exploration. Like, how do you do to, you have your palette, you have your character and you want to try out other colors. But you don't want to affect your existing materials. You don't want to distract to kill your own work. So, we've been working on a tool called Color Mapper in which you can add alternative color palettes into your list of materials. So, it can be used for many purposes. For example, if you want to create variations of one character or if you want to maybe adapt your character to another lighting environment or also maybe if you want to change the level of details in your drawing. For example, if you, in one of the drawings, it's your character is really far away, then you may want less details in your drawing. So, how does it work? Here's a screenshot of the tool. So, the tool is displayed in the middle. Actually, you have this list with one line per material. On the left, you have the color of the actual material. And on the right, you have the color to which you are going to map it. And actually, the add-on is creating modifiers, grease pencil modifiers, which is good because it works in a non-destructive way. You're not going to affect your materials. And for example, if you're using linked materials, it works the same because you're not affecting the actual material. But, yeah, the issue we had, like, it works really nicely. But it's not perfect in terms of interface because still you have to enter each material one by one and then choose each color one by one. And you're doing it in the list on the right side of the viewport. And so, it can be a bit disconnected and not intuitive compared to the drawing at the viewport. So, the first thing we tried to change the interaction is to use presets. It's the first idea. So, the idea is that you have a list of material and you're going to create a mapping by applying the same function to all of the colors. So, I'm showing it on a really simple example, which is grayscale. So, no, sorry. Sorry. That's the demo of the mapper. So, that's what I was saying before. You add each material one by one and do the mapping one by one. Yeah. So, then you can hide it and you can change the mapping that you've done. Sorry. And now is the preset. So, here I'm applying a grayscale. It's like a filter, but you're just working with your list of material and it maps every color through the grayscale function. Of course, for grayscale it's not really interesting, but you can think of other functions, more complex functions that you may want to apply. Another thing we did to improve interaction was to be able to pick directly in the viewport the material that you want to modify and you want to map, add mappings and also modify them. So, that's here a demo of how this works. And actually, to do that, we had to do a bit more of a development than expected because I think some of you are familiar with Python API. There's a ray tracing function that's doing exactly that, like picking what's under the cursor in the viewport. But unfortunately, it doesn't work for grayscale object. So, I had to just redo this. So, we released it as a standalone add-on as well because I think it's really useful for other things. So, in this eyedropper add-on, we are going to just go over the viewport and see what's under the cursor. So, what is the object, the grayscale object, layer and material. So, there are two modes in this eyedropping. The first one is on fly. So, it's in the top here. In this mode, you just go along with the cursor and it automatically shows you what's directly under the cursor and visible. And if you click on it, it selects the object layer and material that's under the cursor. And in the other mode, what I call onclick mode, you click in the viewport and then you can see all the list of stuff that's under the cursor but also what's hidden. And you can see it in the order of visibility in the viewport. And here you can change visibility of layers, select materials, layers and everything. So, that's it for the first part of my talk. Here I sum up all these add-ons that I've been showing to you. They are all in our GitLab. The code is available. You can look at it, download it. Please, you can send us a message if you use them and if you find any issues. The GitLab is here for that. So, now for the second part. I'm going to talk a bit about some more experimental developments that we've done. So, the first one is about strokes. So, here we are going to... We are working in another project which is animating this really cute character which prefers to remain anonymous. So, please respect its privacy. So, yeah. So, actually, this animation is done with 2D rig that was developed in the studio as well. And we were wondering if it could be possible to add some patterns in the dress of this character and what would be the best way to do so using Chris Spencer. So, we don't want to do it by hand frame by frame because it's really tedious. So, yeah. So, the idea is that we can't really do UV mapping in the same way that in 3D because you have these strokes that are 2D, essentially. And so, we came up with a solution that looks a bit like UV mapping but is really redrawing strokes in the character. And it's based on these deformation grids that are computed per frame in the animation based on the dress control here. So, how do you compute this grid? So, the idea... We are in the very specific case of a cone-like shape which has four boundary curves. Two of them correspond to silhouettes and two of them correspond to border of the patch. So, we are going to simply swipe the silhouette curves along the border once on the left side and then on the right side as I'm showing here and then interpolate the two grids that we have. So, it gives us one grid per frame which have a specific topology which is guided by the resolution like just the number of lines and the number of columns that you have in the grid. Then, the idea of this... What I call the mapping is that this cone-like shape can be interpreted as a projection of an actual cone that will be in a 3D space but we don't want to explicit this 3D space. You don't want to create this cone geometry but actually this cone is the developed version of a template. It's like if you had a fabric on which you can draw patterns and then it's developed and that's what you're sketching. So, we are going to explicitly define this template flat shape, draw patterns on them and then put it into the sketch. To do that, we are going to also compute a grid on the template space that I'm showing in the right side. It's actually quite straightforward. So, the template has a dimension as you can see the whole shape has a specific dimension but within it there's a visibility range. It's just what is visible from the cone in the sketch and this during the animation it can change depending on how the character moves and stuff. This visibility range can change. It's represented here with purple lines. So, once you have those two grids, the correspondence between them is actually also quite straightforward because they have the same topology and you can just map all the coordinates of the strokes from the template space to the sketch. So, actually what we are doing here is not like a texture mapping, it's really we are taking all the coordinates and redraw strokes in the sketch space and it's useful because then you also have a grisp pencil stroke and you can edit them in the same way as any grisp pencil stroke. So, for the purpose of illustration I'm showing this on a really coarse grid but actually for the in the sequence we use a higher resolution grid so that it's smoother. So, what kind of animation can we do with this? I'm going to show you four kinds. So, the first one I call squash and stretch. Sorry. It's basically you don't change the visibility range of your pattern, you just redraw another frame and it has a different shape than before. So, it's going to squash and stretch like with the grid deformation is going to move the patterns this way. The other one is what I call rotation. So, it happens when the character turns around in the cone axis and here you're just moving the visibility range in the templates. So, that's that's one example. The other one is what I call a very simply visibility change. Here the character raised her arm and shows a bit more fabric than before. So, you're not really turning in a thermal rotation but you're just expanding the range of what's visible in the pattern. And the last one it's also a visibility change but in the other direction I'm showing I'm showing it in this example of with a sleeve. First she has her arm like this so we can see the whole length of the cone in this way. But then when she has her arm like this only half of it is displayed. So, that's another type of animation. Let me show you some results. Yeah, so that's the first animation. Another one with more complex motion. And for the last one I've been I'm going to show you. I've been attempting not repetitive patterns but really putting buttons pockets and drawing behind just to see if the location remains consistent. In the last one I'm just going to see if the location remains consistent through the animation because that's something that we want to have and we can't really see it with the repetitive patterns. So, all the buttons pockets and drawing behind is done in the template space. Yeah, so the result is not perfect but still we have some really good improvement in terms of rapidity like quicker. Yeah, you don't have to do it every single frame one by one so that's good. Okay, so the last work I'm showing you is now 3D animation. Here you also may have seen this character for those of you that were in the animation festival yesterday. So, it's a 3D animation and it's the style is very realistic but also kind of stop motion like. So, there are a few frames per sequence and we wanted to add some smear and ethics elements in the animation but we wanted to keep this style specifically that is stop motion like. So, we came up with this idea to draw these elements in grease pencil directly in 3D space and then have a tool that just combines that to surfaces and especially for this project felt like material surfaces with sickness as you can see here on the right. So, how do you do that in Blender? So, the first thing you can try is convert grease pencil to a path so that's an operator in Blender and then you can have it filled but the problem we came across with this first is that the triangulation is not really topologically clean as you can see there and also it only works with planar curves. So, if you have a curve actually in 3D space it's going to just flatten it and it's not really a result that we want. Actually, there's another way to do like this with a bit of scripting you can use the inner triangulation that's on the grease pencil objects. So, that's what I'm showing here. You can see that the triangulation is still a bit topologically not clean especially because it doesn't add vertices inside the shape and as for 3D curves it has a result that is 3D as you can see there but still the topology is not really neat and shows some geometry discontinuities. So, we developed another algorithm to create a triangulation in 3D space. So, I'm showing just an overview of the pipeline. It's based on really standard methods but we just implemented in Python. So, the first step is to compute a plane to which you are going to project the coordinates of the stroke tool so that you work actually in 2D in the first place. So, it's yes standard method to compute this plane with the covariance matrix of the coordinates and for this I used NumPy which is already I think in the blender Python. Then I'm using an external library which is triangle maybe some of you know it and it computes meshes in particular deloni meshes for 2D curves. So, it creates a triangulation in 2D and then you have a last part of lifting that's in 3D and for this I implemented an optimization that's using the boundary as a constraint like you're going to move your vertices in 3D use the boundary as constraint and then trying to minimize the curvature of the surface. I'm putting here the reference of the research paper that explains the method. It's called Laplacian minimization. So, here are some results on the right side you can see our triangulation here. For the other shape also it works well. There are more triangles than with the inner triangulation of course but it's more regular and then for the 3D curve. The only thing is that this last step of optimization it's quite expensive is using also NumPy a linear algebra library and so it's smarter to only perform it if the curve is actually not planar because otherwise you're just wasting time. The last steps are to add some thickness maybe some bevel and the materials that we want for the felt we also added some particle or system to put some hair kind of hair on it but that can be done with like modifiers and materials. Some results that we have it's like a smear like elements. You can see in the first row what was drawn with a grease pencil and in the last row what was output by the algorithm. What's interesting here is that the elements actually are really blended in the 3D space they cast shadow on the character and they react well to light. So yeah that's for the ongoing work because there are many many things to see to still work on with these two works. For example for the stroke mapping I'd like to expand it a bit because I wanted the user to be able to draw directly actually on the sketch and then map it back to the template. I think it would be a better user experience. Also we have this project of extending it to other kind of shapes. We were thinking for example to faces so that we can add marks in the face and just follow the animation. And for the triangulation part we still have some some things to fix in particular for shapes that have holes that are not really taking well into account for now. So thank you for this. I'm just if you want to stay tuned of the development we are doing I'm just putting the links of La Cuisine or technical blog which is supposedly going to be more active in the next few months. And also you can check our GitLab repo because we put all the code in it. We also have a Twitter account if you want to follow us and yeah thank you for attending. So I think I went a bit fast so if you have questions I think we'll have some time. We did an animation for this but the question is where are we in France? Montpellier. I guess that's it then.