Krita/Group Painting Idea

From KDE Community Wiki

Overview

Group painting would allow the user to paint on layers Within a layer group by just selecting the layer group. The layer group should have its own lock, alpha-lock and alpha-inheritance buttons:

  • When painting on a "group", the user paints simultaneously on all layers within the group.
  • Locked layers will not be painted on. (this page includes a proposal to enhance the composition dock to remember locked layers, and have more advanced management features)
  • By using alpha-lock on the group, the user can basically paint safely on non-overlapping elements within a same group.
  • To avoid accidents, I suggest for there to be a button to explicitely turn this feature On.


The ultimate purpose of this set-up is to eventually allow simultaneous multi-layer painting for 3D textures. This is basically a proposal on how to implement such a feature step-by-step (well, just the first step) while including features that may be (potentially) useful to 2D artists as well.

This is just a vague idea for now, and has not been approved yet.

Basic usage scenarios

This feature could be useful in the following scenarios:

  • Simultaneous painting on different layers: this could be useful for painting on different animation frames, for example. Each frame can then be modified independently (which can't be done with clone layers), and unlike duplicate layers, you can still add elements later.
  • Quick access to non-overlapping elements: with group "alpha-lock" on, as long as the group elements are not overlapping, the user can safely paint on the right layer just by selecting the group.
  • Paint transitions between different layers: again with "alpha-lock" on, the user can basically paint on two layers at the same time to add a common element without having to merge the layers. With additional elements, could this be useful for matte painting?
  • Decomposition painting: some artists first paint on a greyscale layer then add a "hue" or equivalent layer on top. However, this setup doesn't work as well for some brush dynamics, for example leaves with slightly varying hues. Group painting allows the best of all worlds: hue and greyscale layers can still be edited separately, while the user can also paint on both simultaneously.

Enhancements to the composition docker

Some users abuse layers, then can't find their layers back. With the right setup, they could potentially just click the group and paint. Artists may have a large number of sub-layers though, for shadows, highlights and others.

Enhancements to the composition docker would allow them to toggle between locking states so they know that they are painting on the right layer. The composition function could basically be made to remember visibility, lock, alpha-lock and alpha-inheritance states as well. For example, the user could have a composition that locks all but the shadow layers. They can then proceed to fix the shading for all groups.

For easier management, a separate pop-up layer management system could be implemented.

Towards 3D texturing

As explained by mifth, 3D textures are typically represented as one layer and several maps:

  • Diffuse (Color)
  • Specular (Reflection)
  • Emissive (Illumination)
  • Normal (for 3d engines bumps)

The first three are RGBA layers, while Normal is a depth layer. The painting is done directly on a 3D model.

Group painting could be a small first step to making 3D multi-layer painting a reality. A lot of work would still be needed, including:

  • Implementing a basic 3D viewer into Krita: Krita should be able to import a 3D file and modify its view.
  • Implementing painting directly onto this model.
  • Add a "3D" category to paintbrush engines, allowing the brush to specify information such as Diffuse, Specular and Emissive simultaneously.
  • Make it possible to specify/restrict the type of input a layer receives (Diffuse, Specular, Emissive).


I'm personally not familiar with 3D painting, so any person interested in implementing this would need to do more research on 3D UI.