Synopsis
Layers are one of the core concepts of digital painting. They allow artists to control different parts of their artwork at once, for instance, color, lighting, lineart, as well as texture. A key feature of them is their ability to be resized, composited, renamed, grouped or deleted independently of the rest of the document.
Patterns and textures are also essential components of an artist’s toolbox, allowing them to represent the intricacies of a physical material. They come in two forms: bitmap textures, which are images contained in e.g. PNG or OpenEXR files, or procedural textures, which are generated on the fly using their mathematical representation.
KDE’s Krita painting suite supports using patterns and textures through two types of layers, File or Fill Layers. However, neither of them let artists create dynamically generated content: File Layers are inherently static, and Fill Layers support only color fills (like Paint Layers) or basic pattern rendering.
The goal of this project is to let artists create dynamic content through a new, scriptable Fill Layer. To this effect, I propose to integrate Disney Animation’s SeExpr expression language (Walt Disney Animation Studios (n.d.)) into the Krita painting suite.
Deliverables
The delivered implementation should be expected to include:
- support for dynamically generated content on a KisLayer
- an UI for creating and editing the associated script
- integration tests
- user documentation
Project Schedule
Weeks are measured from Mon-Sun to align with GSoC’s Coding Period start date. All weeks after the Community Bonding period include writing a weekly report that will be published on Planet KDE and amyspark.me.
Week | Timeframe | Plans |
---|---|---|
May 4 -- May 29 | Research SeExpr layout and dependencies, document KRA format and proposed layer specification. | |
1 | Jun 1 -- Jun 5 | Define the new generator. Build SeExpr and try calling it from within Krita. |
2 | Jun 8 -- Jun 12 | Test rendering of a script from a string. Write unit tests. |
3 | Jun 15 -- Jun 19 | UI design. Push a MWE for entering a script. |
4 | Jun 22 -- Jun 26 | UI design and implementation. |
5 | Jun 29 -- Jul 3 | Write UX tests. |
6 | Jul 6 -- Jul 10 | UI polish. |
7 | Jul 13 -- Jul 17 | Integrate SeExpr into the Krita packaging process. |
8 | Jul 20 -- Jul 24 | General testing and bug fixes. |
9 | Jul 27 -- Jul 31 | Push another alpha build. Testing and bug fixes. |
10 | Aug 3 -- Aug 7 | General testing and bug fixes. |
11 | Aug 10 -- Aug 14 | Document the new layer in the manual. |
12 | Aug 17 -- Aug 21 | Reserved week (just in case anything happens) |
13 | Aug 24 -- Aug 28 | Reserved week (just in case anything happens) |
Aug 31 | *Finish line!* 👍 | |
The full proposal is available at this Google Docs link.