From BlenderWiki

Jump to: navigation, search

GSoC 2017: Sculpting Tool Improvements - Emphasizing substance and material

Disclaimer

Due to overlap with Raja Kumar Kedia's, project I will work on slightly different features. The clipping brush proposed by Raja will replace the subtractive mode of the proposed silhouette brush.

Name

Sebastian Witt

Email / IRC

  • Email: sebastian.witt@rwth-aachen.de
  • IRC: witt

Synopsis

Improve the sculpting tools by adding a silhouette brush and other minor improvements to the toolset. Giving the sculptor the freedom to add and subtract new geometry contrary to just shaping the existing.

Benefits

In traditional sculpting the material is substantial to the work-flow. Adding or carving away material allows to define and create new shapes. In Blender the sculptor is not limited to a certain material but to an abstract web of vertices edges and faces. Most of the tools give a certain feeling of just pushing around vertices. The substance and volume is just a surface grid. The Goal is to give the sculptor better tools to add new geometry and the ability to reshape not only by dragging vertices but to cut and draw new silhouettes.

Deliverables

An additive and subtractive silhouette brush to create new geometry. Lasso and polygon lasso stroke methods to be able to define not only strokes but areas in 2D. Minor brush improvements like a connected geometry option for existing brushes (Grab,Mask etc). A Documentation of the new tools and improvements.

Project Details

Intuitive to use, quick workflow, good performance and flexibility. The silhouette brush is the main goal of this project.

Silhouette brush

SebastianWitt proposal.gif

The silhouette brush shall enable the sculptor to draw a new silhouette for his model. A tool for quick sketching of new shapes and clean cuts. It can create and alter completely new geometry. It has an additive and a subtractive mode. The additive mode adds a volume in the shape of the stroke. The subtractive mode cuts wherever drawn. As an example, to add a horn to a head, the sculptor shall draw the rough shape from the side. Geometry is then added and connected to the mesh. The sculptor can further define it with the existing tools. When designing such a tool, two challenges need to be addressed: The drawn stroke is painted in 2D, additional information needs to be gathered or assumed to create a 3D shape. The new geometry needs to be attached to existing geometry.

One possible implementation could be:

  • Switch add / subtract
  • Slider for thickness (strength)
  • Switch whether to use adaptive thickness
  • Slider to control smoothing
  • Value to control resolution (may be adaptive/constant detail)

If in additive mode, when drawn out of context (in air), a shape is formed, centred on the cursor viewplane with the set thickness. When drawn in context (on a model), a shape is formed with the footprint of the overlapping parts if adaptive thickness is enabled. Smoothness controls the hardness of emerging sharp edges, like the transition to the existing geometry or the edges of the new shape.

If in subtractive mode, the stroke defines parts of the mesh which get cut out. It works like a subtractive boolean operation of the additive shape with the existing geometry. The resolution regulates the vertex and loop density in the newly created geometry. It has an option for even vertex density to copy the density of the existing mesh.

Further details need to be defined and tested in a prototyping phase. In the last GSOC, work on the silhouette tool has already been done. Even though the tool already works for some basic cases it needs to be redone. The existing approach uses the normals to push existing geometry into the new silhouette. More complex shapes with cavities and convex features can’t be done with this method.


Lasso and polygon lasso stroke methods

With the silhouette tool, big chunks of new geometry can be quickly created. As described, the sculptor defines a 2D shape. Contrary to other tools it does not work with lines/strokes, more so it works with an area. Defining an area with the current stroke methods is tedious. Therefore I propose to create two new methods, the lasso and polygon lasso stroke methods. As common in painting software like gimp or photoshop, areas with complex shapes can be quickly defined by drawing an outline. Apart from the silhouette brush, other tools like masking or the layer brush benefit from this.

Stretch Goals

To improve the existing tools, lots of minor improvements can be done. Most of the tools need an option to restrict to connected geometry. Brushes currently influence geometry around the brush stroke in a sphere with the strength and size fallof. If two separate parts are close in 3D, brushes often affect both. Calculating the falloff on the connected geometry solves this problem. If possible in the limited timeframe and after the gsoc other tools can be tackled, like a gradient mask tool or improving the fill brush.

Project Schedule

04.05 - 08.06 Prototyping, first rough version, gather feedback
08.06 - 25.06 cleanup, new revision from scratch, silhouette brush
- add
- subtract
- mesh intersection
- shape footprint approximation
- thickness control
25.06 - 09.07 finishing touches, smooth option, UI (strength/thickness indicator)
09.07 - 16.07 testing, documentation, bugfixes, performance improvements
16.07 - 30.07 lasso stroke options
- lasso
- polygon lasso
- UI feedback/guides
30.07 - 04.08 testing, documentation, bugfixes
04.08 - 11.08 connected geometry option for brushes
11.08 - 29.08 cleanup, testing, documentation, bugfixes, stretch goals

Bio

Hi, I am Sebastian Witt! I am 21 and study computer science at the RWTH Aachen University in Germany. I am using Blender for nearly a decade now, a bit commercially but mainly as a hobby. GSOC is the perfect opportunity to boost my contributions to the community. I am skilled in C++/C and know my way around the common other languages. Apart from that I have experience with CUDA and OpenCL as well as OpenGL. Most of my experience comes from smaller personal projects like writing a raytrace engine or attending hackathons. I am looking forward to gain more experience in working with a larger team/community and learning to apply to coding standards or experience the hassle of review cycles.