GSoC 2016 Proposal: Sculpting Tools
Make better sculpting tools for blender users, including new brushes with specific functions and improvements for undo performances.
The existing sculpting tools in blender has basic functions that enable users to sculpt 3D models with details. However, comparing with other 3D modeling software like ZBrush or 3D-Coat which has a wide range of sculpting brushes and tools, the sculpting tools in blender seem not enough for artists to create highly detailed models as freely and conveniently. Some might want to have their models created and sculpted in other software with better sculpting functions and then import them to blender , and such phenomenon clearly is not desirable and could be prevented by integrating better sculpting tools in blender itself. With such tools provided by blender, more artists can use blender alone to finish their whole workflow and won’t need to deal with the export/import process.
A silhouette brush: a brush which can deform an object by sketching a new outline. A fill tool: a tool to turn a selected region into flat surface. An improvement of grab brush: an additional option for grab brush to only take effect on connected geometry. Improvements of undo performances (optional). The compatibility of the tools with multi-resolution mesh and dynamic topography. Documentations on all the tools and improvements above.
The implementation of the sculpting tools and improvements mentioned above involves with both internal logic and UI modifications.
The silhouette brush works a bit like ZBrush’s clipping brushes. User defines a new outline and the object will be deformed accordingly. The defining process can be done either by using a brush or by using something like a grease pencil, or a straight line, a curve or broken-lines. The implementation of deformation is pretty much the same regardless of the selecting method.
First we must calculate the area to be carved out or added on by auto-selecting the other half of the outline of the area. This half of the outline is on the back side of the object (opposite from user’s view) and symmetrical to the other half. Therefore, this task should be easily done and perhaps some of the code concerning symmetrically sculpting can be reused.
The deformation process is like normal adding and subtracting brush but more direct and the positions of the vertices can be certainly calculated. Note that the subtracting process is not the same as flattening since the edge of the deformed object should be smooth and if we simply replace the selected area by a flat mesh surface, the edge will be sharp and unacceptable.
Like the silhouette brush, the fill tool provides users with several selecting methods. Users may want to select a region by something like a grease pencil, or a straight line, a curve or broken-lines. After selection, the selected area will be replaced by a flat surface. This can be done also by calculating the resulting positions of the vertices and apply the modifications as a single process. Both the silhouette brush and the fill tool will have better performance if dynamic subdivision sculpting is enabled.
Additional option for grab brush
This addition enables the grab brush to provide with a similar function as ZBrush’s “Move topological brush”, which can move parts of the surface independently even if they are close together . This function has been wanted in the community for some time  so it would be great to implement it. If this option is enabled, additional check on whether the to-be-grabbed area is geometrically connected will be done before grabbing takes effects on the vertices and polygons. Also, the current grab brush does not work in dynamic topology mode and it won’t change the number of vertices and polygons when grabbing. However, with dynamic topology the grab brush can be more precise and achieve subtler changes of the model. The dynamic topology in the grabbing process will be slightly different from the normal sculpting tools because of the limited movement of the vertices.
Compatibility with multi-res mesh and dynamic topology
Along with the normal mesh data type, blender also has multi-resolution mesh and dynamic topology enabled. The tools proposed above mainly deal with deformation, thus they should be compatible with multi-res mesh and dynamic topology with some specific modification on some of the exceptions where the same code for normal mesh won’t work properly in multi-res and dynamic topology mode. Such modification will need some time to implement and debug, but it will be worth the effort.
Improvements on undo (optional)
The de facto undo process of sculpting is not fully optimized. The whole object would be rebuilt when undo was invoked. There could be cleverer ways to implement the update and rebuild process by partially update the object.
According to Google’s timeline for GSoC 2016, the coding starts on May 23rd and ends on Aug. 23rd. In all there are 13 weeks for coding, and the schedule will be as followed.
Before coding officially started: Fully research and understand the sculpting logics and internal data structures in blender (PBVH, multiresolution mesh, dynamic topography and so on), and make drafts on the UI for the brushes and tools. Maybe also think of an solid and plausible optimization method for undo process;
- 4 weeks to finish silhouette brush
- the math to calculate the correct positions of deformed vertices
- a fast and easy way to commit deformation
- an intuitive UI for the users
- check and ensure compatibility with multi-res mesh and dynamic topology
- 3 weeks to finish fill tool
- basically the same as silhouette brush
- 5 weeks to finish the additional option for grab brush
- the logic for checking geometrical connection
- optimize performance and debugging
- implement dynamic topology in grab brush
- 1 week to debug the tools and possibly optimize performances
- 2 days to document the tools and improvements
- (optional) finish optimizing undo
- implement the new method
- debug and polish the improvement
I'm a third-year undergraduate student of Zhejiang University, China, and I major in computer science.
I have been working under professor Yue Chen on a VTK-based project which deals with 3D modeling of Computed Tomography for a year. The project was mainly in C/C++ and python and that gives me sufficient experience in programming in such languages to finish this GSoC project.
I was once part of Zhejiang University’s ACM-ICPC team and participated in numerous training sessions for ACM-ICPC, during which I became familiar with algorithms and mathematics needed for solving a wide range of problems.
I have done several course projects in C and C++, as well as an OpenGL project on a computer graphics course. Besides, I am now taking a few more courses concerning computer graphics and I have been interested in blender for some time. I have used and compiled blender on my own computer before and wish to make it better.