User:HooglyBoogly/GSoC2019/Proposal

Project Home
Name

Hans Goudey

Contact

Forums: HooglyBoogly on Devtalk and developer.blender.org

Synopsis

The bevel modifier is extremely powerful, but there is constantly a list of requested improvements that could expand its use case and speed up the modeling process. One of these is user-drawn profiles, which is a commonly requested feature that is somewhat separate from the main functionality of the bevel operation, which makes it a good candidate for a GSoC project. There has been successful GSoC projects with the Bevel modifier in the past few years, and I hope with this project I can continue that success.

Benefits

Right now, the best way to get a custom profile along an edge is probably to use a curve and add a bevel object for its profile. While this can work, it’s awkward, and it’s not built in to an object. Whether it’s for an architectural molding, a sharper edge, or any other bevel that can’t be described by a profile number from 0 to 1, the ability to use a custom profile would add a lot of flexibility.

The custom profiles feature would be a part of the bevel modifier as an option, and as part of the bevel tool as well.

Deliverables

The user drawn profiles, or custom profiles task divides into a few discrete parts


 * UI widget for capturing custom drawn profiles
 * Creating beveled edges with the profile
 * Creating corners for where the custom profiles intersect with each other
 * Testing the feature to verify that it works as expected
 * User and developer documentation. And in the (unlikely) case that there is more time at the end of the project, there are always more bevel improvements listed here.

Project Details

UI widget for capturing profile description

Code can hopefully be adapted from the existing curve editor. Here is a mockup for what the input could look like. The two end vertices would be anchored, and new vertices could be added manually or sampled from a curve drawn more like the existing curve editor widgets. If it was useful, the widget created for this operation could become a template so it could be used elsewhere in the program.



Creating beveled edges with the drawn profile

This task should be the simplest part of the actual changes to the bevel operation (which lives in bmesh_bevel.c). The profile should not necessarily need to be symmetric, so the orientation (which way is up for the profile) will need to decided somewhat arbitrarily, and there would be an option to flip this direction. This works well for a loop of edges, but at intersections of more edges, it becomes more complicated.

Beveling intersections

With only two edges meeting, this code should not be too complicated, as the profile can continue. But with three edges meeting at a point, the problem becomes much more complicated. A mesh is built at each corner, and the profiles coming into the point will have to be merged in a meaningful way. The lack of a custom profile’s symmetry make it possible that the heights in the profile will not match up. There isn’t necessarily one correct solution to this issue, so user input and brainstorming will be necessary to solve this issue.

Project Schedule

I finish with this semester at college around the 25th of May. I don’t have other plans that interfere with this GSoC project, so I can get right started situating myself in the bevel code.

I have heard that (and my time looking through the code so far supports this) that the bevel operation has a steep learning curve, so I have made sure to give myself plenty of time to go through notes and the code to understand how the bevel works before I start to implement the custom profiles feature. I’ve also given myself what seems like a generous amount of time now to make sure that there is plenty of time in the schedule, and to give myself time to focus on quality when the time comes.

Bio

Hi! I’m Hans Goudey, a student at Middlebury College in Vermont, USA. I’m in my fourth year, majoring in physics and computer science. I’ve been a Blender use for years now, mostly as a hobbyist, but I’ve done some professional work with engineering visualizations as well. I’ve been interested in 3D graphics as long as I can remember, and for a while I did some programming using the Unity engine, but I’ve always loved building things in Blender, especially modeling and shading. I’ve recently started working on a short film with my college’s animation studio as well, and it’s been really interesting to see Blender used in a production environment.

As I’ve learned more about programming, I’ve discovered a passion for free software as well. I’ve switched to Linux and other free software, but it’s so cool that Blender is software that so many people use regardless of that. The whole community driven development process is so empowering. Over the past few months I’ve started familiarizing myself with Blender’s code by making some smaller UI changes. I’ve been involved with D4400, T61588, T57208, T62332, and D4706. Although not all of these have made it in yet, I’ve learned a lot in the process and discovered that I really enjoy contributing! So the idea of being able to continue this work full time for the summer is so exciting!

I have plenty of experience with C from my classes and some personal projects, and I feel comfortable working in the language. I have plenty of python experience from some machine learning projects in the past, and I know how to apply this experience to Blender with the experience of my recent contributions.