From BlenderWiki

Jump to: navigation, search

Final Report - Silhouette Operator

"Sculpting Tool Improvements - Emphasizing substance and material"

Code Branch




Development Status

Wrap up

Now after 13 Weeks, the Google Summer of Code is over. It has been an exiting journey and I learned a lot.

My Project: The Silhouette Brush.

With it a lot of challenges, new algorithms, unexpected bugs, unexpected fixes and a lot of head scratching. In my proposal I planned to finish the brush on the 16.07. It is now the 28.08 and I can say that I still need a couple of months to get the bare basics running stable. Nevertheless the now called silhouette operator works. With it a 2D to 3D shape analysis, approximation and generation algorithm with an integrated complex mesh intersection boolean operator. I clearly underestimated the problem but still a working silhouette brush is the result. I will need to do a lot of bugfixing and I need to add some crucial features in the future. Not with the intensity in the GSoC context but slowly I will finish it.

Silhouette Operator demonstration

What has been done?

I have implemented two new features. Besides the main focus, the Silhouette Operator, I have implemented adaptive spacing.

The Silhouette Operator features following aspects:

  • Add mode - draw a 3D shape while sculpting
  • Subtract mode - cut a 3D shape
  • Smoothness setting - control the smoothness of the shape
  • Depth setting - control the thickness of the object
  • Resolution - regulate the vertex density
  • Transitioning the shapes - boolean mesh operations

The adaptive spacing option calculates stroke spacing based on the objects surface rather than screen-space.

The Challenges

The biggest unexpected challenge was the sculpting system. In contrast to edit mode and modifiers the sculpting system does not use an interlinked mesh structure. It was designed to manipulate the positions of vertices, not to generate new topology. With the exception of dyntopo it does not use BMesh. I didn't want the tool to be restricted to dyntopo. Converting from and to BMesh is a very compute heavy operation. So I decided not to use an interlinked mesh structure. With this I couldn't use features like boolean operations, intersection testing or even bridging loops. At the same time I am able to design the methods specially fitted to the Silhouette Operator.

Another challenge was the complexity and flexibility the operator has to allow. Maximum freedom for the artist was one goal of the tool. Complex shapes with a random amount of intersections, sharp turns and varying thickness, produce a lot of corner cases. As an example: The intersection between two random shapes is not really predictable. Honestly I am really glad that it turned out to be working to some extend. I had my doubts at some places that i couldn't make the whole thing work at all.

What needs to be done still?

I have collected a list of bugs and features which will need to be implemented and fixed. You can follow the development status here. I will keep on working on this until it is in master and have intentions to keep contributing to blender in the future. I think I can combine it pretty well with my studies and interests.

Thanks a lot!

I have learned a lot in the past weeks. Working on such a big project with a schedule in a system created by a whole community was a great experience. I learned to structure myself, structure the code and approaching problems the right way. Special thanks to my mentors Thomas Musgrove and Sergey Sharybin for giving me the advice that i needed and answering all of my questions! Also thanks to the artist from Blenderartist like erickBlender or Yafu for testing and feedback.

Sebastian Witt