2022-4-13 Sculpt/Texture/Paint Module Meeting

Attendees

  • Brecht van Lommel (Developer)
  • Daniel Bystedt (Artist)
  • Julien Kaspar (Artist)

Agenda

Design discussion for Paint Mode based on open questions

  • Discuss open topics and paint mode design
  • Define clear questions, known issues and proposed solutions
  • Create a dev-talk thread from the outcome

Progress on current tasks with developers will be discussed again next week.

Notes

Paint Mode discussion

All of the following notes should also be compiled into a clear design with open questions.
This design will be shared later to get more focused feedback from the community.

  • Custom modes (T97234)

    • How much should this design proposal affect paint mode?
    • Takeaway: Focus on Paint Mode functionality first
    • Texture Layers might make it really necessary to have a focused Paint Mode later on
    • Mixing that with sculpt mode might be difficult
    • Color attribute painting might just as well stay also in sculpt mode. UI/UX just needs more attention still
  • Masking features and workflow in Paint Mode

    • Using selection based masks in sculpt mode
      • It’s possible. Just confusing on a design
      • For texture painting: Selection based masking & stencil based masking covers most use cases
      • Focus should be on supporting that at the least
      • The choice which features to include is mostly
    • What if we build on top of sculpt mode masking & face sets
      • We are missing face selection masking and stencil based masking then
        • Both are not natively supported in sculpt mode right now
        • Reusing old face selection masking or implementing something new is both taking up time.
      • Face sets were previously suggested as a way of getting face masking (for sharp edges while painting) but face sets are not ideal for that purpose
        • They are not as regularly changes as masks
        • They obscure the color information of the surface
      • So instead we’d need to add functionality to the sculpt mode masking
    • Proposal to add face selection to sculpt mode:
      • There would be an additional toggle (or two) for including the edit mode selection as a mask in sculpt mode (in extension also paint mode)
      • The visualisation of these 2 masks need to blend together well → Make the sculpt mode masking and edit mode selection masking look similar
      • Issues:
        • Can the user edit only the sculpt mode mask or also the selection mask?
        • If both can be edited then how do we know which mask is which? How will it be synced with edit mode?
          • Syncing sculpt mode masks with edit mode selection will likely be difficult since it’s easy to lose information
        • if only sculpt mode mask can be edited then how do we communicate in the I which mask is which (2 different types of masks at the same time …)
    • Proposal to add selection modes for masking:
      • Make the sculpt mode mask not stored per vertex but per face corner
      • Then add selection modes in the header similar to edit mode vert/edge/face selection
      • With this the user can change the behaviour if the masking toolset is masking vertices (smooth transitions) or faces (sharp transitions)
      • A third option for pixel based masking can also be available there
      • Based on what data is being painted different selection modes will be shown
        • On vertex color data → Only vertex masks
        • On Face corner data → vertex and face masks
        • On textures → all three
  • Keeping edit mode selection untouched for the sake of keeping workflows separate?

    • What if you don’t want your edit mode selection synced with masking on sculpt/paint mode?
    • We agreed that it would definitely be useful to have them synced. The issue is just more how that can be achieved
    • Even just having an operator to create a mask from edit mode selection would be useful
    • Edit Mode will likely always have some specific selection operators that are too useful to exclude from the workflow
    • There could also be an option to sync edit mode selection with sculpt/paint mode masks
      • Always having it synced would then always be better
      • There are probably no cases where the selection or masks are accidentally destroyed
      • Or if there are there should be an option to save elaborate masks as an attribute for later use
  • Current takeaway

    • Make sculpt/paint mode mask per face corner
    • Add masking modes in paint mode for per face masking
    • Sync masking with edit mode selection
      • There would likely have to be a threshold when a masked vertex is selected in edit mode. What the threshold is needs to be discussed
  • Inverting behaviour and visualising of masking?

    • For painting color information and for the case of syncing/transferring edit mode selection to mask
    • It’s important then to flip the behaviour of masking
    • The parts that are masked with masking tools are selected → the areas you can paint/sculpt
  • Should sharp transitions between faces and masking be handles separately?

    • Maybe sharp transitions are defined in the geometry in a more permanent way?
    • That way we don’t need per face masking in paint mode?
    • From the artists perspective the sharp transitions between colors are not permanent but should be able to freely repainted them any time anywhere
    • In that case the it shouldn’t be handles separately → Use masks in sculpt/paint mode
  • There are 2 separate use cases for masking: Mask for current painting and isolating work areas

    • Masking tool-set could be used for both
    • In that case it’s necessary to quickly regain the masks to create work areas
      • Face sets / id maps are useful here
      • Saving masks as attributes or layer masks in material as well
      • Then provide operators to convert attribute into mask
  • Pixel mask vs geometry mask (vert/face)

    • How do we convert pixel mask with geometry mask?
    • Have them synced. Or an option to sync them
    • This would lead to losing information?
    • Where is the texture stored? The texture layers? Or set per object like stencil mask?
    • Takeaway: For now, choose stencil texture per object instead of waiting for texture-layers
    • Try to sync them. This needs testing.
  • Face Sets vs ID maps

    • Face Sets do not replace the need for ID maps
      • Per pixel id colors are very important
      • In id maps it’s important to choose your own colors for exporting
    • An issue to solve is anti-aliased borders between id colors
      • This can lead to gaps when using them as masks
      • Internally, Blender could solve this issue by saving id maps as individual b/w maps and auto-normalising them so there are no gaps between them
      • This needs more technical design exploration but it would solve the issues
      • No need for importing/exporting within Blender, so no need to store use id maps as standard texture file formats within Blender
      • With this smarter internal use, we avoid users having to change id colors or rebake id maps to avoid gaps or bleeding between id colors
        • Maybe even just using 4 color theorem
      • This relieves work on the users side to fix issues
    • Keeping id map and face sets in sync is too unlikely
      • Instead add operators to convert face sets from current id map or the other way around
    • Store id map for now in object just like stencil mask
    • Add toggle to either use id map or face sets for face set related functionality in paint mode
    • Still open question: How useful would it be to use an id map for face set functionality
  • Toolset and accessibility was not a topic during this meeting. Needs to be discussed after

    • Most tools have no shortcuts or are not efficient to select
    • There’s not occlusion support yet in sculpt mode (Only “Front faces only”)
  • Dynamic face set overlay

    • Having face sets always visible is not ideal when painting colors
    • We could enable the overlay only when necessary
    • When expanding and snapping to face sets → Show face sets
    • When using face set editing tools/brushes → Show face sets (Maybe even force the overlay to be on, even if overlays are disabled?)
    • When using atuomasking by face sets → Show face sets as subtle contours
      • Alternative could be to dynamically face any geometry that is automasked
      • Would lead to slow performance though
    • Turning on/off overlays is not as intuitive as a dynamic overlay
  • Image Editor

    • Stencil masking is currently broken
    • In general the paint mode functionality should be fully supported in the image editor too
    • Same for syncing and visualising masking, edit mode selection, face sets & id maps
    • This will be its own project that comes afterwards though
    • Full live baking of viewport shading is not as important

Links

Daniel shared some notes via a separate document:

Other topics

  • Paint brush issue with square shape

    • When changing the “tip roundness” shape to square, it doesn’t use the full size of the brush radius
    • Instead the square shape fits inside the circular radius
    • Should be the other way around
    • Maybe even visualise the radius shape as the correct square shape?
    • The main issue behind this is that the brush can never use a full square texture
    • This should get a to do task to keep track of the issue
  • Baking UDIMs was brought up

    • Should be discussed and addressed with rendering module?

Practical Info

This is a 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.

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

12 Likes

Little suggestion - since Sculpt & Paint module now has a community workboard column, maybe you could look at some accepted / needing review patches to have them move a bit faster?

Something like Animation Module does with “Patch Review & Decision Time” for their meetings:

2 Likes

That’s a good point. This meeting was rather a mini workshop. But in the following meetings I’d like to stick closer to the workboard as the topics on the agenda.

I’m not happy with how the current review process is going either. It’s important to address that.
A “Patch Review & Decision Time” sounds great!

We are also opening up the module meetings more. You are welcome to join next time if you like!

8 Likes

2022-4-20 Sculpt/Texture/Paint Module Meeting

Tittle should be the 13th April not the 20th for upcoming

Great, I’ll try to attend then!

Although old code for face selection is not kept in new Paint mode, I have to say that display of face selection is made for painting in Texture Paint mode and Vertex Paint mode.
Distinction is done by making unpainted surface brighter or by displaying black wireframe.

I think that similar choice for Face Selection in a new Paint mode would make sense and would be still compatible with current masking in sculpt mode.
Face Sets could also be represented by coloured wireframes.
Face Sets could be a new selection mode with coloured wireframe for unselected ones, and white or invisible wireframes for selected ones.

IMO, that is making sense to keep selection synchronized between modes, because selection tools are more numerous in that mode. But if custom modes are the goal, that would no more make sense.
If selection tools and modes are as numerous and pertinent ones are available in all modes, mode switches should not be necessary to work. Synchronization would become an annoyance.

I think that ideal solution would be to have selection synchronization as an option of mode switch operator.
That way, it would be possible for user to create shortcuts for both uses (synchronized switch or unsynchronized switch).
But I understand that storing several selections per object could increase memory usage. So, there could also be a User Preferences to always synchronize.

Ideal solution for pixel mask is to be able to store several of them.
In 2D image editors, it is possible to store a mask per layer or per group of layers.
So, I would say that the most intuitive solution is to allow granularity, to have ability to have a mask per texture layer, per shader, per object, (per collection if multi-object painting becomes a reality).

1 Like

Aren’t these custom modes overlapping with workspace functionality a bit ? register addons, change active tool, etc…

@Kalel-Zamo-2 lease report any bugs via https://developer.blender.org/.
Any help on creating addons for Blender can be found on other forums like blenderartists.org