 So starting off, this is no longer a single presentation. We'll be two people who are presenting here. Myself Rohan Rati. I am Rohan Rati from India. And I'm Hans Gaudi. I did Google Summer of Code this last year. And I'm from Vermont, United States. Yeah, so both of us are former GSOC students. I worked on normal editing tools. And he added custom profiles in the Bevel modifier. So that's pretty cool. So starting off, one thing I'd like to ask all of you is, who has actually used the weighted normal modifier? All right, weighted normal modifier. Nice. Which of you know that they are actually a set of normal editing tools currently in master? If you don't know, they are actually a set of cool tools, like normal rotation and all that. I'll be going through all of that and presenting it to you right now if you like me. So starting off, a little about me, I have taken part in Google Summer of Code for the past two years. 2017 and 2018, in 2017, I worked on normal editing tools, as I've said before. In 2018, I made some improvements in the Bevel modifier and tool as well. Currently, I'm a software engineer working at Uber, which has actually limited quite a bit of, it has constrained me to contributing to Blender. So starting off, I added normal editing supported Blender. The main thing being the weighted normal modifier, which I feel is very extensively used. Some other things are normal rotation, point normal to target, set from faces, merge and average normals, and normal interface tools. I'll be going through it and demonstrating them one by one. Cool. The first thing being the weighted normal modifier. If you'd like, I can show you a demonstration right now. Just a moment, a cue. So you have, I add a Bevel modifier. I add a weighted normal modifier on top of it. Enable auto smooth. This is not working. Yeah, so I'll just first. It should work without it, actually. So I actually added my stuff in Blender 2.79, changing it to as we progress to Blender 2.80. Some of the functionality has changed. There are some issues. So I'll just go through the weighted normal modifier right now. It's a modifier that weights the normal based on three things. Face area being the meaning that more face area gets more weight, the normal gets more weight, and it's aligned to the face. Corner angle means that the corner angle gets more weight for the normals, and there's a mix of face area and corner angle as well. Other than this, these are from Blender 2.79. You can actually see that there is a weight specified over here. Weight is 50 right now. So weight specifies how much weight a given normal gets. 50 meaning that the normal is getting an equal weight. Like, there's no additional bias to the weight of the normals. If you set it to 100, then the normal with more face area will get more weight. Normal with less face area will get less weight. And if you decrease it from 50 to 1, it'll be sort of an inverse function, meaning that less area faces will get more weight for the normals. So that's how this is working. Other than that, there is a threshold function as well. Threshold meaning that, say you have a face with five area, you have a face with eight area, do we want the both of them to have the same weight? So this threshold function works that way, and it's a pretty niche functionality, and it can actually improve the normal functionality even better. Other than that, there are supports for vertex ropes, which is, I think, pretty cool. Moving on, I think, have any of you ever used Yavne, yet another vertex normal editor? No, not really, all right. So other than this, I have actually incorporated the functionality provided by Yavne into normal editing as well. So you have an additional functionality. You see set face strength or get face strength in the UI when you look at that. What this does is you can set a strength through your polygon, the faces that you have, meaning that what this means is, you have weak, medium, and strong face strength. Each successive face strength, what it does it, it actually, it superimposes the weights that are given. So if you have two adjacent faces, one has a large face area, another has a small face area. If you set the small face area, one to say a higher value, say strong versus medium, it'll completely overwrite the area of the other face which has a lower value. So that's how it's working. Other than that, the weighted normal modifier, by the way, you can ping me and ask me any questions when you have regarding all of this later on. There are normal editing tools. I hope this will work fine. If not, I'll just close this right now. Yeah. So you have used rotation before, right? So this is exactly the same rotation functionality. You just have them in normals. Let's say the normal size this much, set auto smooth on. So this works exactly the same way as your normal, your basic rotation works. You can have snapping anything that you have in rotation. You have every single functionality in normal rotation as well. So this is pretty cool. And I'll be going on some additional functionality on this later on. Right, so this stuff, this is how it works. Other than that, there is an average normal functionality which is pretty similar to the weighted normal modifier but as a tool. So you have the bevel modifier and the bevel tool. This is sort of a similar contrast to that. And it's, you know, it gives more power to the user the way I think about it. The other thing is point normal to target. This is probably the most powerful tool that I've created in my Google Summer of Code program. Sadly, with the UI changes and the clicking changes and all that, some of the functionality is not really working that well but I'll still brief you through like all of the functionality that there is. So you have this cube. Yes, I press option L. All right, so, and I, you know, this is just pointing towards the mouse right now. Wherever I take it, it's just pointing towards the mouse and all that. If you see the option menu above it, there is a lot more functionality to it. A lot of, you know, stuff with the left mouse button, right mouse button and all that, with upgrading to 2.80 because my work I did was in an experimental branch in 2.79. Some of the functionality is not working really well. So, all right, other in point normal target, there are a lot of other function as well. You can actually invert the normals. They're pointing to a target. You can invert the normals. You can align the normals with a, to say a sun, that's an infinite distance away. So all these normals are parallel. The values are getting averaged and that average is, you know, pointing to the direction that you're pointing to. You can actually change the, what do you say? The x, y, z, the location where the normals are targeting as well. So this is all there. There's another function called sphere eyes. You can set the strength. It's actually sort of slowly converges to the value that you're targeting. Cool. There's smoothen as well. Smoothen, if you don't want completely soft normals or completely hard normals, you can sort of smoothen normals a little bit and add some factor and some strength, the phase strength values that I talked about earlier, weak, medium, strong, you can use them as well. And you can sort of get a moderate, normal, smoothing like thing. Now, this is pretty cool. You saw some functions in normal rotation and you saw some functions in more normal to target. You can act, what you can actually do is you can edit a single normal through what I'm displaying right now. So I'll add this cube again. Go to edit mode, auto smooth, all right. Say I just want to edit this one loop normal that's in the Z axis. I'll activate the multiple selection modes, vertex and phase. Select this vertex, select this phase, sorry. And it's just editing that one single normal. So this is some cool functionality. You can actually have this with point normal to target as well. All of the functionality that's in that. So it'll just point to that one location. So this is pretty cool. Other than that, I wrote a set of normal interface tools that are actually also like, there are two things that got affected from the transition from 2.79 to 2.78. Point normal to target lost a lot of its, what do you say, power. And there are a few changes as well. You can do copy paste and blend at 2.8 but add and multiply are not really supported right now. So case in point being, say I have this cube, right? I really like the way this normal, one normal is looking. I'll copy it. Yeah, so I'll copy it. I want this to have the same value as well. I'll paste it over here. It has the same, I mean, it's moving around. Now I really want this one to have the same value as well. So you do option N, option N, paste, and see all of them have the same values. And there are a lot of cases how this works and there's a lot more to it than what I'm displaying right now. But this is essentially the crux of it. Right, moving on. Here are a few examples on what you can do with normal editing and all that. Yeah, so that's my talk. Thank you. So let's find my talk here. Yeah, cool. All right, there we go. All right, so just to start off, I'm curious how many of you in the room have used Bevel in Blender? That's almost 100%. That's awesome, okay. So you all know then probably that it's a really powerful tool and it can be used in a lot of different situations. But one thing that has been requested for a long time with Bevel is custom profiles. And the developer that usually works on Bevel, Howard Tricky, is a lot to do. He's working on Boolean right now. So he put this as a Google Summer Code Project and I took it up this last summer. So here's a couple of examples of the sort of things you can do. So being in Amsterdam, there's a lot of these sort of eaves. So I was looking around last night and I made this as an example. So as users of Bevel, you probably know that this is sort of the extent of the options for profile you have at the moment. You can either make it curve out or curve in. And wow, that's really good for some situations. The sort of most common one is just profile equals 0.5, which makes it circular. So it'd be great if you could choose any sort of curve and use that as your profile. So that's what my goal was for the summer. And here's a quick example of that. So here I have two edges selected and I'm beveling them with weights. And then I activate custom profile down at the bottom. And I've got to increase the segments because that uses a lot of segments. So then here's some presets that are included. So that's all just one modifier on a very simple cube object. And then you see here, go in and you can change it and applies that to everything. So some edges are flat and some edges are curved. Here's another preset for steps, which creates a dynamic number of steps that I'm lowering the number of segments and creating the preset again. And there are fewer steps. So that's something people have asked for before. So I just decided to implement steps too as one of the presets. Hopefully that's useful to some people. One problem, so you can see here that, oh no, okay, whatever. So that's a continual line of beveled profiles. So there's about a few segments that are beveled and they continue in a straight line. One problem I ran in during the project was that you can end up in a situation where the bevel profile isn't actually symmetrical. So this one is sharp on one side and then really rounded on the other and they can just switch orientations. So with just the default implementation of bevel, there's no priority for which side of the profile goes on which side of the edge. So we ended up with situations like this where the profile switched directions and you're left with terrible geometry. So that's something I had to deal with in the project, just these things that come up. And hopefully a plan for all of them at the beginning, but not always. Here, some unexpected functionality is that you normally expect bevel to just be taking away area from so it's sort of like rounding an edge or something, but something I discovered is that, wait, this, okay. So here's that same profile in the last slide and if we just bring the control points down and turn on clipping, turn off clipping, sorry, we can sort of use more area than you'd normally use in the bevel. So you see how it goes below what you'd normally expect to use in the bevel and then we can bring it down even further, bring a point up out of the normal bevel area and all of a sudden bevel isn't subtracting geometry, it's adding geometry, which is the same code, but it's just a different profile. That's some really unexpected thing that came up. So hopefully this is useful, this sort of expands what bevel can do. See, all of a sudden you can use bevel in situations we hadn't even thought of before. I am excited to see that used. So this brings us to a tricky situation. Okay, so you see these situations on the left and you've got, so these are unsymmetrical profiles coming in at a three-way intersection. So I spent a lot of time thinking about this and so did other people on the forums, which were very useful by the way, the Bunder community is awesome at providing feedback to Google Summer of Code students and developers. That's one of the best things about the project. So we got a couple ideas about what to do and the sort of default method was that big picture there in the middle, which I don't know, it looks sort of insane but the profile is sort of insane too. What would you expect to happen when you bring these crazy shapes in at an arbitrary intersection? So you could have 20 of these profiles coming in at an intersection. Is there some proper solution about what to do? I'm not sure. So after going through all of this thought and talking with people, the forums about it, I decided to do a method that was sort of like this but also one suggestion I got was to add a cut-off method like this. So basically it avoids the whole problem by just chopping off the profile at the corner. So here's an example of the sort of weird geometry it creates. So this is no custom profile, it's just symmetrical and we can see that that sort of triangular shape in the middle is called a vertex mesh. So, and here's with a crazy custom profile which might be useful in Rewald, it might not. So there's sort of the smoothing going on and what you're seeing at the left is the orientation switching because it's sort of arbitrary which side of the profile gets placed on which side of the edge. So earlier on it was just switching sides. Yeah, when I move it around, you can see at the left all of a sudden it swaps. So there's no right solution, so it just is rather arbitrary. So this avoids that problem. The ideal solution would be to use booleans. So bringing those profile edges and seeing how they intersect each other and hopefully when the new boolean arrives we'll be able to do some of that in Bevel. But the big idea is that I started out basically less than a year ago being interested in bunder development and here you can see my first post on the forums. I'm responding to my compiling confusion. You see I'm responding to my own post few times trying to figure it out. So that took a while but the process of Google Summer of Code brought me from there to giving a big patch to arguably too big. There's sort of 5,000 lines which is terrible to review for Campbell and Howard but that's where we are. But yeah, that whole process allowed me to actually become a contributor to Blender and I hope to continue that in the future. I can give a small demonstration if we have time and it looks like we do. So here on the desktop I believe is Hans Blender. So it's not in master yet. It's supposed to be in 282 if everything goes well. So that's why we downloaded a separate build from the build bot which you can all do actually. This is free to experiment with online. Just from the same download page but you go to the experimental versions. So let's add a bevel modifier. Let's increase the interface resolution. That better. You can see it now. Okay, so we've also reworked the interface for bevel so you notice that actually it has the same interface as the bevel tool now which hopefully will be more useful. Let's get rid of that. And so we activate custom profile down here and then we can draw the custom profile and you notice it's not doing anything quite yet because it's sampling the custom profile with one vertex. So we're gonna go and increase the number of segments up here and then we've got this. All right, so and I don't know if you can see it but there's a lot of little black dots here. So that's to show where the sampled segments go. So if I decrease the number of segments you can see there are fewer and we also see fewer black dots here. They're really small. We should probably increase the size but and then we can see you can make some edges sharp. Yeah, yeah, grid fill is crazy. So the method to avoid that is just chop it off. Yeah, yeah. So like I was saying, hopefully in the future we'll continue that to use Boolean and just so that'd be like what real world Bevel does is you're actually going across the surface with some tool like a jointer for woodwork and then you end up with a corner that's just the continuation of the profiles. So that's the big idea and I can't wait to see artists get their hands on this and make things like buildings and cabinetry. It's gonna be really cool. That's the awesome thing about working for Blender is that so many people use it. Anyway, that's all we have. So if you all have questions, be happy to take them. Yeah, so yeah, I think I know where you're headed because there's, yeah, I'm gonna repeat the question. So the question was there's, we currently have ways to limit what Bevel does. We have only Bevel certain vertex groups and only Bevel from edge weight. I can show you both of those things here. Let's select the top loop here and add Bevel weight. So this is Bevel edge weight and then we can go in and add Bevel modifier and change the limit to use weight. Then it only does the top. But what if we want to do the bottom too? That's terrible. All right, so all of a sudden we're, it's sort of like we've lost some of the functionality we need, especially if we're using vertex groups. So Bevel weights are one way to get around that, but it's not a great solution. So we really do need edge groups in Blender and that's something that I think would be pretty doable. So I don't know, maybe we can work at that at some point. Yeah, yeah. So the question was, what about a mirror checkbox for the custom profile? And I've had that question online a lot on the forums. Maybe you were the one who asked it, probably not. But yeah, so if we could mirror around this line here, then we could just use the same code that already exists, hopefully, and just sort of bring that intersection into the middle of the vertex mesh. That's something I hope to do. Yeah. It's just annoying because you check hard and normal. Yeah. It's like, okay, so now either does it to itself? So like once you check the hard and normal, or it's just by default, it could be on. We didn't have the one with the default design there, yes. The suggestion was we should have Bevel automatically check the autosmooth box or just have that on by default. I know everyone does, and then we forget to do it. Yeah. Yeah, so we see this here at the bottom. Enable autosmooth. Be nice to avoid that. I agree. An okay button right here that does that. That's a great idea. Yeah. Right now, okay, we're gonna open the door. We had one more question. Thought I saw a hand. All right.