This forum has been archived. All content is frozen. Please use KDE Discuss instead.

[Request] Lineart to color workflow enhancements list

Tags: None
(comma "," separated)
User avatar
RalekArts
Registered Member
Posts
11
Karma
0
The context
For artists who work primarily in a sketch -> line -> flat color -> shade workflow, there are many ways to give color to lineart. The two major current methods implemented in Krita have their own problems and drawbacks, and their own strengths. Below I'll discuss both of them, and what I believe can be changed about each as to make the process significantly faster, and maybe even easier. I'm a full-time artist and not really a developer, so I will try to explain the ideas as best I can from my perspective, while providing context to how and when these tools or options would be used in the above artistic workflow.

To better understand each problem and solution, I drew a random shirt that I'll use throughout this to explain since I'm pretty bad with words.
ImageImage
__________________

Section 1 : The fill tool
My preferred way of coloring lineart, it's quick and easy, and since I'm the literal poster child for 'ideal situation' for this tool, it still has several limitations that I'll give suggestions for. My lineart is a standard round hard brush, producing lightly anti-aliased 100% dark lines. I never leave gaps between lines and my lines are usually several pixels thick. When I'm feeling adventurous, I may apply a slight texture to the edges. Theoretically speaking, fill tool should work well for me.

1. Unfilled crevices
This is #1 because it's probably the main reason I want to avoid the fill tool. Regardless of how ideal a situation it is, I can never fill the entire area of a section. If lines meet at too acute of an angle, it stops short and leaves gaps. Then I have to spend 5 minutes to an hour going over my entire picture and double checking every corner of every line to ensure it filled correctly.

I'm using pretty standard options, 1 pixel expansion to tackle the aliasing, borderline perfectly ideal threshold.
Image

Using our shirt, let's see how this works. Let's lay down the base color, a dark grey.
And we run into our first problem, the crevices of the folds don't get fully filled, leaving a very obvious white mark where the fill tool stopped.
Image
No problem, let's bump the expansion until it fills it. Setting it to 3 seems to do the job, but has unintended consequences, it actually goes outside of the lineart because it's expanded so much. Now it's even more work to clean up.

Which leaves us with several main solutions as an artist:
  • 1. After using the fill tool, scanning over the entire image manually and fixing every crevice you can spot with your eye
  • 2. Set the fill to expand very far, then go over the entire outside of the lineart and erase the overhanging sections
  • 3. outline the entirety of each color section in the color you'll fill with, then fill that 'bubble' you made, like so.
  • 4. Manually color in the entire image with a hard brush

Each of these can add precious minutes, and sometimes even hours as I've experienced, to what should theoretically take 5 minutes at most.

Solution
One way to fix this would be to add a tool, subtool, checkbox, or inherent change to the fill tool that will allow the fill tool to automatically creep into small crevices in lineart and ensure the entirety of the image gets filled, without having to max out the threshold or set expansion very high.


2. Reference layers other than selected or all
One major problem I had was when I was 600 layers deep in a project, I needed to put color on a layer behind some simple lineart. I figured it would be easy, until I found there was no reference layer option for the fill tool. As a result, I had to hide every other layer just to use the fill tool, which as you can imagine was very taxing on the system and took a lot of processing every time I had to do it.

Solution
Reference layers! On any tool that uses layer data in this way, it would be extremely useful. Wand and Fill are the only ones I can think of off the top of my head, but let's see how it'd work.

Could either be a tool-specific thing, or a program-wide thing, but it'd be a toggle switch for each layer.
For instance, if I wanted to place the fill result on layer 5, but I want to ignore the abstract background, and I want the fill tool to only consider Layer 1 (which is our lineart), I would activate the reference toggle on layer 1 and select the 'Limit to reference layers' checkbox in the Fill tool options panel.
Image

And for another example, what if I wanted to Limit the color to only one section of the shirt? Like make a line across the shirt? I would have to add lines to my lineart, but I don't want to do that. So Instead I make a new layer, draw the boundaries on there, and set both the original lineart and the boundaries as reference layers, like so.
Image




3. Processing speed
Now I have an extremely beefy PC, probably best you can get before going into enterprise level. But Krita really, really slows down when using the fill tool on large canvases. I understand it's probably processing the entire image each time you click, but it can get very frustrating and tedious if it takes 3-4 seconds to process every time I try and fill a section, and I have 300+ sections to fill that are each only like, 100x100px
Solution
That isn't really my area of expertise. It'd be nice if the fill tool processing time scaled with the size of the area it's trying to fill rather than the canvas as a whole. What should have been a 2 minute job turned into 30 minutes on a couple occasions.




Section 2: The colorize mask
While it's never been my preferred method of coloring, I can see it's use and it's place. Unfortunately, I don't have lines between all of my colors so this severely limits its use. Disregarding the fact that I'm a creature of habit and don't like switching workflows, I gave it a try for several pictures and here were my findings:

Better Boundaries
My first major concern with the new workflow was the idea that I had to use the colorize mask, rasterize it, then paint over it if I have more than one color per area. Lines are usually good boundaries, but sometimes lines for every color can be overbearing and make the piece look junky, so sometimes you just leave lines off the edge of colors and decide to color it later.

As an artist, there are 2 main ways to get more than one color in an area, that I can think of off the top of my head.
  • 1. Color the area as best you can with the most prevalent color. Then manually color the smaller area after setting the layer to 'transparency locked' - My favorite if the area isn't too big
  • 2. Draw a line of color bridging the 'missing' lineart, then use the fill tool with a threshold that takes into account that line. - I know some people who do this
And these are fine, but there is no room for them when using the colorize mask, except maybe #1 after it's all done and rasterized.

Solution
There are a couple solutions I can think of, some simpler than others but I'll list the main ones.
1. Allow for temporary boundaries during the color painting stage of the colorize mask. If a boundary doesn't exist between two colors, allow the user to set infinitely thin lines around the canvas that act as barriers for the color. This can be like drawing a line with stabilization, or something like a bezier tool, and can be a separate tool or alt invocation or such. Whichever works best. This addition alone would make the colorize mask amazing and very usable, I'd likely switch over from fill entirely.
here's an example using our shirt.
Image

Krita crashed when drawing up the shirt example for the second solution and I lost the shirt, but it's very similar so I'll just leave it out.



I thought I had more problems with the colorize mask but really that was the only major concern, but it was a big one that rendered it unusable so unfortunately it was all that was needed to get me disinterested.

Thank you for reading through, I hope I was concise and helpful enough in giving my perspective as an artist. I want to see Krita grow and make life easier for us artists in any way possible. Currently, unfortunately that's only through bug reports and suggestions.
ahabgreybeard
Registered Member
Posts
1269
Karma
11
OS
Your ideas are all good and it would be nice if they could be implemented eventually. That 'crevice filling' would be a difficult one to implement properly.

There are a couple of workarounds you might want to consider:

For the 'reference layers' when using the Fill tool, you can create a new image and then copy/paste the layers you want as reference to that new image and then do a colouring fill operation in the new image, then copy/paste the resulting colour filled layer back into your working image.

With the Colorize Mask tool, you can put a colourize mask on a group and have the group contain your original artwork plus additional layers with 'boundary lines' which would simulate your idea of temporary boundaries. After performing the Colorize operation, you can hide the layer(s) containing the additional lines. Here is a quick example using your original shirt lineart where I used one simple additional layer (not visible) for the temporary boundary lines. Any roughness is due to my shaky hands:

Image
User avatar
TheraHedwig
KDE Developer
Posts
1794
Karma
10
OS
The first one in your case can be solved by making the fuzzy higher so it will ignore the semi-transparent pixels, which is what is preventing the crawling into smaller areas.

For the fill tool speed, we would need someone to come up with a faster algorithm than we already use. The fill tool processing area is already scaled with the area it is trying to fill... at the least, when I try to use it here, bigger areas are slower than smaller areas.

For the colorize mask, it is indeed intended to be used within a larger workflow where you do cleanup afterwards. If you are getting crashes with it, you should report those.

The reference layers might be possible, but it is going to take a very very long time before we have room on our todo. It will require a different compositing of the layers for instance, new icons, new ui, etc. etc.
User avatar
RalekArts
Registered Member
Posts
11
Karma
0
ahabgreybeard wrote:For the 'reference layers' when using the Fill tool, you can create a new image and then copy/paste the layers you want as reference to that new image and then do a colouring fill operation in the new image, then copy/paste the resulting colour filled layer back into your working image.


Seems a bit tedious and it likely won't line up properly when copying back assuming the temporary canvas is a different resolution. The workaround I had been using up until now is using the magic wand on the lineart layer with 'only this layer' selected, then selecting the color layer, and doing ctrl+backspace (don't know if that's default or if I set it) to fill the area with foreground color.

With the Colorize Mask tool, you can put a colourize mask on a group and [...]

For some reason this idea completely slipped my mind. i knew you could put the mask on a group, but It never occured to me to use an invisible layer to define boundaries. I'll definitely be using that from now on. It'd be neat to have something built in for the future, though.

The first one in your case can be solved by making the fuzzy higher so it will ignore the semi-transparent pixels, which is what is preventing the crawling into smaller areas.

What is 'the fuzzy'?
If you mean the tolerance/threshold, even at 100 it still doesn't fill crevices.
If you mean feathering, that produces unwanted results across the board and I'd imagine would be used for more niche circumstances and not for hard lineart.

For the fill tool speed, we would need someone to come up with a faster algorithm than we already use.

I love problem solving, and while I absolutely don't have the expertise to tinker around with Krita itself, I might be able to concept up something in an easier language such as Python? If I knew how Krita stored layer data, I would definitely give both 'fill crevices' and speed testing a try.
Thing is I don't know if that would be helpful at all considering how insanely different the two are at processing things, but I wouldn't even know where to start on C++ and compiling. I'm willing to do whatever I can to help, though, and if that means trying to learn C++ to make proof of concepts then I'm down.

If you are getting crashes with it, you should report those.

Only time it's crashed was when i was working on the shirt example, caught me off guard. I would report it if it happened again, because right now I have no idea how to reproduce it. My bug report would be 'it crashed, and i don't know why or what I was doing at the time'


Bookmarks



Who is online

Registered users: bancha, Bing [Bot], Evergrowing, Google [Bot], Sogou [Bot]