From the brief time I’ve spent looking at the code, the way the heightmap works here is that when drawing with the new smudge brush in Lightness mode, it draws the color to a color channel, and the lightness to the heightmap channel, and then the two are combined for the final presentation of the layer. The color and height information is kept separate for the purpose of the smudge brush in that mode. All other modes and brushes, etc, will only act on the combined version. Also, I did find that if you quit Krita and reopen it (or I assume if you just close the image and reopen it), the channels are no longer separated, so you could consider the height information to be baked at that point.
To do a proper impasto engine, you would actually have a truly separate height layer, and a movable light source, and the lightness/darkness values would be calculated based on the normals created by the height layer. We currently just mimic this by directly drawing the lightness/darkness values baked into the brush. This means that the highlights and shadows won’t be consistent if the brush rotates, but even so, it’s a surprisingly convincing effect.
It would be cool to have a true impasto engine, but I’m pretty happy with our pseudo-impasto version for now. Eventually we could do that, but I think it would require a new layer type and new brush engine and a light source tool. A lot of work, for a marginal improvement.






