2024-02-13 Sculpt/Texture/Paint Module Meeting

Practical Info

This is bi-weekly weekly video chat meeting for planning and discussion of development related to the sculpting and painting in Blender. Any contributor (developer, UI/UX designer, writer, …) working on these features in Blender is welcome to join and add proposed items to the agenda.
Write us a message in the module chat if you’re interested.

For users and other interested parties, we ask to read the meeting notes instead so that the meeting can remain focused.

  • Time: Tuesday 4pm CET
  • Next Meeting: February 27, 2024
  • Module Chat


  • Raul Fernandez Hernandez
  • Sergey Sharybin
  • Julien Kaspar
  • Dalai Felinto
  • Daniel Bystedt
  • Hans Goudey
  • Thomas Dinges


Welcoming Raul

Raul is a new developer as part of the module.
For the time being the goal is to get him accustomed to the source code. He’ll pick up various bugs and small QoL improvements.
Julien collected a list of good task candidates and will update the module workboard to make them available.

Daniel and Julien will be available for user testing and feedback.
Hans and Sergey offered to handle code review with Sergey offering guidance on the code side.

Short term plans

Soon after there are some projects for Q1 and Q2 to tackle, which we talked about.
Dynamic Topology still needs Face Corner Attribute interpolation. Some operators support is also missing.
But major improved performance might be a long term goal istead. The Bmesh data structure will not be future proof and will need bigger refactors.

Hans pointed out that refactoring of existing features will make developing much easier. So this will be best to focus on soon. This will also lead to better performance and can happen on the side of feature development in Q2 with more devs on the module.
He shared an example Design task for code refactor.

Work on the brush assets project continues. That should make it much easier to have a large customized brush library. There is hope to have a testable build this week. Progress can be tracked in a dedicated task.
Expanding the default set of brushes will be tackled separately though.

The 3D texture paint brush project will also continue development by Jeroen but will likely for now be focused only on essential features with a new Texture Paint Mode to come after.

Coordination & next meetings

Julien will soon be taking time off until late August.
He’ll be around the official channels and available on a volunteer basis for feedback and testing.
Coordinating the meetings will be taken over by Sergey and Hans.

Meetings will continue Tuesdays 4pm CET every 2 weeks. These will ideally be short and focus on active tasks and catching up.
Workshops can be scheduled too with more time and bigger design discussions.


“But major improved performance might be a long term goal instead. The Bmesh data structure will not be future proof and will need bigger refactors.”

I did a lot of testing on this. I had a bunch of users test a couple of mini-implementations of BMesh meant to increase cache coherency. One reordered the mesh using a clustering algorithm, while the other simply replaced all pointers with 32-bit integers. By far the greatest performance improvement came from replacing pointers with 32-bit integers.

Later on I did write a clustering defragmentation allocator for BMesh. It does help with performance but probably not as much as getting rid of pointers (and allocating attributes in separate memory pools) would.


Got a question, if there are plans for refactoring bmesh, is there a chance to make a support for n-gons with holes (n-gons without support edges)? Last time it was closed because there was no developer to have work with it.


That’s not really related to sculpting. But I’d say the odds are near zero that this would be looked into with that method. I think it would be more valuable to selectively hide some edges to make it look like we support holes.

1 Like

Fun fact, that’s how ngons were originally implemented :slight_smile:

Seriously though, the decision not to support holes in faces is my biggest regret with BMesh. I actually did implement them at first (there is still some #ifdef’d out code). But this was a few years before 3D printing took off and CAD didn’t seem like something Blender needed to support (holes in faces are quite useful for CAD tools; part of the reason the boolean code is so numerically unstable is the need to tesselate the result).