Coding KDE

Tangent Normal Brush Merged.

So, as the saying goes finishing something up to 90% takes as much time as the last 10%.

Anyway, important things first:

(embed to

Past month I mostly spent stressing over finals and getting enough credits(I am allowed to stay btw), but once that was over I could get back to work.

A small detour was made into the world of improving the Krita manual, and with some hard work we managed to make a really nice crash-course into the basic concepts of using Krita.

I contacted someone who had a bit more experience with renderers and normal maps than I did to test it out, and got a lot of valuable feedback.

So I shuffled around some settings, got the tangent encoding preview to work, got canvas rotation to work, did a lot of clean-up, and made the brush engine more robust in the face of Krita’s powerful colour management system(It will now always attempt to draw in the RGB space of the image, if the image has an RGB space, and if not it’ll use sRGB).

The most important detail of the feedback was getting a normalize filter in. While technically the brush engine should always provide colors that are correct coordinates for a normal vector, Krita’s many many features in the brush engine create for a million ways to screw that up. Instead of disabling those features, it makes more sense to give artists a normalizing filter which just takes the pixel colour, puts it in a QVector3d, and then normalizes it.

The last part was getting the preview widget to update properly. This consisted of making a simple filter that took a given pixel, and then would invert and reassign the channels of a given pixel depending on three qcomboboxes that would indicate how they needed to be inverted and assigned. Then I made a widget that extended QLabel, because the easiest way to make updates was to connect the comboboxes to the widget, and then change the image from there.

In my experience the most important things someone can do if they have radical new functionality and they want users to use it, is the following two: 1. You need to see this feature as part of a workflow. 2. You need to demonstrate and document this workflow in detail.
Hence why it was part of my GSoC proposal to actually provide the documentation, and why I made that video, and thus also why the manual page already exists!

Today I merged my branch into the Krita stable, as well, the monthly new builds of Krita are coming up, so people will be able to start testing the brush engine soon.

The person I contacted became inspired, and made a blending mode that mixes normal maps while maintaining a lot of detail, which is also going to be in the next build. We’re now discussing how to further extend the normal map authoring workflow to as far this is still Krita’s domain.

If I don’t get burried under bugs, I’ll probably be spending the rest of my GSoC on getting a nice widget that gives feedback about the ICC profiles Krita uses.

Old Google Plus Comments

Camille Bissuel
In a word : Congratulations ! It will certainly be useful and fun to use, and unique to Krita ! Nice implementation too 😉
WoltheraYes, it will be super exciting to see what people are going to do with it!

By Wolthera

Artist, Krita manual writer, Color Management expert and also busy with comics creation.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.