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

Coding KDE

Tangent Normal Brush GSoC interim post

So, I actually was supossed to start blogging on the first day of gsoc, but I was in the middle of exams and when doing exams adding your blog to kde planet’s blogfeed seems a task akin to reinstalling your computer.

Anyway, I am here now, let’s talk my GSoC.

Basically, it’s a brush that allows you to draw so-called ‘normal maps’, which are colourful looking maps that are actually encoding 3d vectors in the r, g and b channels of an rgb image. These 3d vectors are then used by a 3d program to pretend there’s little variations in the surface.

Thing is, because it’s encoded into the rgb values we can edit it in a image editing program like Krita. And advanced tablets have tilt-sensors, which means you can make a stylus tilt resemble a normal vector, and thus output the right colours. Hence, the tangent normal brush engine.

So how far am I? Feature wise, almost done.


Above you can see the normal map that is drawn with the tangent normal brush. You can tell it to use your tilt, rotation, or even drawing angle to determine the direction the output vector is in. Then, you can choose the type of encoding that is used for the normal map. This means whether you put the Y value of the vector in the green channel or red channel, whether it’s positive or negative, etc, and you can modify the strength of the stylus elevation on the resulting values, so you can choose to more easily have the neutral vector value.

I made a tilt cursor which can give feedback on stylus tilt, because that’s rather hard to determine for the user when they use a tablet, and wanted to make a color cursor, but this latter was recommended by boud to be put on hold indefinitely, because the code involved is rather complex.

Finally, I made the phong bumpmap filter that already existed, accept normalmaps. This filter then can convert the normal map to lighting information the way a 3d program would. Such as the image on the lower-left. This can be done via a filter layer or mask in Krita, so that the user can paint the normal map and get real-time lighting feedback.

The image on the lower-right is said layer set to overlay over the original texture, allowing me to match the shading. Then, the final image on the upper-right is the two textures on a plane in blender, assigned as diffuse for the regular texture, and ‘tangent’ normal for the normal map.

There’s still plenty of niggles left to be done:

  • Krita’s canvas navigation includes rotation and mirroring, which messes up my vectors. I have this half-solved, but I would like it to work with multibrush if possible.
  • The tangent normal brush itself needs some cleanup.
  • I need to add more features to the tangent normal brush engine, like flow, sharpness etc. This shouldn’t be complex.
  • Tilt cursor could be more visible.
  • I still need to look at the colour cursor.
  • I wanted to have an encoding preview in the brush settings.

The reason I am this far already is due to me starting once I heard I was accepted, partially because this period is exam and resit week, and I wanted to have a buffer if this period turned out to be too time-consuming for me.

If I properly finish this project, I’ll be working on bugs, colour management and the painting assistants of Krita, which were subjects I did before GSoC as well.

Old Google Plus Comments

Scott Petrovic
very nice progress so far Wolthera! You never cease to impress me.
Ryan Leach
I’d love to see this being edited live on a VR headset.
WoltheraNormal maps aren’t really 3d themselves though, so it would be just as boring 🙂
Bartosz Styperek
Could you add feature to convert normal map to cavity map? Here in example in PS .
It is great in overlay mode on diffuse texture.
Also I supose people may want to overlay details on normal map. Here it is explained how to do it in ok way. No perfect but ok. Maybe you could add something like overlayNormal blending mode?
And last thing – when people  overlay normals (with overlay blending mode) on top of each other result is not normalized. So my final request would be addition on ‘normalize normals’ function.
WoltheraI have no clue how to do the first part at all, so it’s not going to happen and the second part is done in the master branch, it’s called tangent normal.
Artwork Characters Illustrations

Failed Timelapse


I had intended to record a timelapse of her, but only saw after finishing it that I didn’t press ‘record’… Took about 1 hour and 20 minutes on this.

Coding Landscapes

Some work done with the new assistants in Krita 2.9

So, a while back I added new assistants to Krita.

The demonstration for how to use them is here:

<iframe width=”560″ height=”315″ src=”//” frameborder=”0″ allowfullscreen></iframe>

And here’s some images I did with them:

Old Google Plus Comments

Iván Yossi
Great work! i’ve tested them and they work great. 😀
Coding KDE

HSI and HSY for Krita’s advanced colour selector.

So, in the past few weeks, I spent some time hacking a new feature into Krita that I had wanted for a long time, and this monday I actually commited it. So, I figured it be best to make a little post about the new functionality.




A full-body test of one of the test characters I use in my drawing tutorials.

I thought it be nice if she has a light dress over most of her armour, and then as she moves the dress gets caught in the wind, and the armour underneath becomes visible.

Old Google Plus Comments

Ramón Miranda
the idea is cool, very romantic imo. but useful? hmm i doubt it. anyway is a painting so we can do wathever we want . But if the image is for a game with real time animations, then think twice and give her a useful clothes.

Sketches from march 31 to april 15

Old Google Plus Comments

WoltheraSketches made with Krita after my computer got fixed, so between 31 march and 15th of april.
vanhellenberghubar.orgJe bent weer op dreef. 🙂
Artwork Sketches

Playing with the settings of Krita brushes. Got a nice textured effect, so decided to do a drawing with it. Fire is a favourite subject of mine.


Some talk in the Krita IRC was about textured brush presets and lava, and somehow I ended up doodling this due to that.

Illustrations Landscapes


I recorded the progress of this one for a perspective tutorial. But… I forgot the pauze hotkey for the screen recording program. So I ended up drawing 2ish hours non stop. My arms hurt now.


Not very clean, but I am relatively happy with it.