Mockup for the GUI for Lazy Brush functionality
Closed, ResolvedPublic

Description

We need a GUI for the lazy brush functionality. Basically, the filling should be done by a special kind of a mask. This mask can work in two modes: "mask mode" and "split layers mode". We can implement either both modes or just one of them. It should be decided.

If using split layer mode, the folloowing questions should be answered:

  • what naming scheme should be followed by the automatically created layers?
  • should they be grouped and, if yes, what naming convention should it be?
  • what composite op should be used for the filling layers? Should it be configurable? What about opacity?

Here are my very rough mockups/ideas of how it can be implemanted:

Transcription from the example mockups:

Split into fill layers:

  1. The fill colors are extracted into a set of new layers.
  2. "Show filling" becomes disabled on the mask.
  3. On every "Update"-click, the alpha-channel of the fill layers is updated.
  4. The link between a mask and a layer persists until the mask is deleted.
  5. If a layer got deleted, the mask recreates it on the next update call.

^

  • Property of the mask.
  • editable by lazybrush only.
  • Every painted color is automatically added to the palette in the tool options docker.

Related Objects

dkazakov created this task.Dec 1 2015, 2:40 PM
dkazakov updated the task description. (Show Details)
dkazakov raised the priority of this task from to Normal.
dkazakov assigned this task to scottpetrovic.
dkazakov added a project: Krita: Animation.
dkazakov moved this task to GUI design on the Krita: Animation board.
dkazakov added a subscriber: dkazakov.
Restricted Application added a subscriber: woltherav. · View Herald TranscriptDec 1 2015, 2:40 PM
dkazakov updated the task description. (Show Details)Dec 1 2015, 2:43 PM
dkazakov added a parent task: Restricted Maniphest Task.Dec 1 2015, 2:46 PM
Deevad added a subscriber: Deevad.Dec 1 2015, 4:38 PM

Is this specific to animation, or could non-animators use this as well. My first thought was there would be a tool like "brush fill" where there would be tool options on what type of type you wanted.

Dmitry -- could you explain your sketches a bit. Are these tools specific for animation? Do they need to be?

This is applicable to both artists and animators, both need a quick way to do flat colours quickly and to produce masks so they can keep their painting within the lines. There's only one feature that's different for animators, and that's the ability to colour across multiple frames in onion-skin mode.

woltherav updated the task description. (Show Details)Dec 1 2015, 5:31 PM
blurymind added a comment.EditedDec 1 2015, 6:06 PM

Here is how lazybrush CTG layers work in TVP11 for reference:
https://www.youtube.com/watch?v=FDjQNvbgzmw

A CTG layer is a layer that is attached to a lineart layer. The ctg layer allows the user to draw scribbles and these scribbles generate color fills. Scribbles visibility can be toggled on and off and scribbles never get rendered on export. Scribbles can be copy and pasted between frames and between layers - that makes them easily reuseable. Also since they are scribbles they require a single natural motion of the hand (no clicking) to mark areas that need to be filled.

In an idea scenario, krita's lazybrush layers would work just the same, but each scribble color would be changeable after the fact via a palette where each color is stored. A way to replace a color globally would be very beneficial to the creative process.

A coloring workflow ideally would not clutter the layers - It will require only one layer to do color fills - thus color scribbles and their fills will be available on the same layer.

Another beneficial feature would be the ability to remove fills and deform scribbles.

Ability to use a single scribble frame in order to generate color fills for multiple lineart frames

If each color goes onto its own layer, then they should be grouped somehow and collapsed. Ideally it should be optional - so the user would have the ability to separate on a per color basis all the fills on a color fills layer only if they want to. By default when coloring for animation I prefer to have all my color fills on a single layer. But when coloring for illustration it is essential that I have them split on a per color basis- each color onto its own individual layer.

Deevad added a comment.EditedDec 1 2015, 6:26 PM

Hi, Thank you Dmitry for exposing your notes: I found the ideas very good
I especially liked the 'update icon'.
To answer your questions and propose something a bit simplier on the GUI side,
I took the time to write a mockup and a usage scenario in a long long picture.
( edit: I'll post picture in another comment )

I think we would have a consensus if we say we

  1. focus on 'mask mode'(single layer from scribbles that can be updated with the lazy brush tool) while setting up the architecture mindful of a future split layer mode.
  2. get this to work with animation somehow.
  3. make splitlayer mode a future possible extension type of thing. Depending on how tired you are of poking at lazy brush :p

This way you can get to the prototyping stage as quickly as possible.

For composite op, use the default over/normal op. We do need to define a special indicator for transparency for the stroke view(Like a checkered stroke, if lazy brush is going to be a special tool) I think for the rest we can let users do the rest themselves.

I really like the direction that deevad has for the workflow. I am still trying to understand how everything works and his explanation seems the most straightforward and clear to a new comer to the tool.

One thing I wasn't clear with is that the line art layer is a new type of layer. It seems like the only reason you would use a lineart layer is to use this lazy brush. I don't see why adding a line art layer can't just automatically add a colorize mask as well.

I am guessing this functionality cannot work with a paint layer. Does it use the same type of pixel data that a paint layer uses?

The 'Line-art layer' in my mockup is just a (normal) paint-layer with black lines on it, and named 'Line-art'. I also don't think line-art needs a specific layer type. Sorry if my texts in the mockup were confusing about this.

blurymind added a comment.EditedDec 6 2015, 9:41 PM

I really like Deevad's mockup. It seems to fit well with krita's overall design and the functionality that we require for animation. This colorize mask would of course need to be exposed to the timeline in the same way that the standard lineart layer is exposed.
The current gmic implementation can also do "replace color". Replacing a color globally with another color is usually an advantage of vector based animation tools, but if we get that in krita as well, it would be amazing!

Just to add my two cents.
Deevad's mockup sounds pretty good, like the others said, but I would also add the option to convert the different color areas to their own layers instead of one single layer.

blurymind added a comment.EditedDec 11 2015, 10:26 AM

krita already has an operator that breaks apart a layer into different
layers by color. It also still has gmic, which allows single frame
illustrators to use a layer for each color (a feature I suggested to the
author). For now I say - stick to Deevad's mockup proposal for a single
layer coloring (the way it is with the original lazybrush implementation on
tvpaint) - as it is better suited for animation.

If possible, add the ability to replace a color globally ( a feature that gmic's implementation has). Replacing color globally (all frames and all layers) would allow creative control over the palette by the director.

The mockup is done, please track the status of the feature in T372

dkazakov closed this task as Resolved.Aug 30 2016, 2:23 PM