Weekly Reports 2023

February 06 - February 10 (week 1)

I tested and reviewed some critical fixes by Amélie Fondevilla:

  • D17214 Fix T104371: Grease Pencil merge down layer duplicates wrong frame
  • dc9f7fe64f1 Fix #104514: GPencil merge down layer misses some frames

This week I continued development of the (hair) curves edit mode. Although this seems very unrelated to grease pencil, curves make use of the CurvesGeometry structure which will be the core component for the upcoming GP 3.0 project. This work allows me to get familiar with the structure as well as the C++ patterns that are used. I made sure to also implement these features in a way that the code can be used by other objects that use CurvesGeometry. This means that GP 3.0 can use this code as well.

Next to the development work, I also planned, coordinated, and summarized some meetings. I also talked to Clément Foucault and Shen Ciao about grease pencil rendering.

I also began working on a principles documents for the upcoming grease pencil 3.0 project.

February 13 - February 17 (week 2)

This week I continued the work on the curves edit mode. With the addition of the toolbar and some fixes regarding the overlay drawing, it was ready to land for 3.5 and is now out of experimental.

I also had some meetings regarding the GP 3.0 project and started to work on a technical outline of the current plan that I will present to the team in Amsterdam in the next week.

February 20 - February 24 (week 3)

This week I mostly focused on fixing bugs in the new hair curves edit mode.

  • 33cbd063d36 Curves: Fix proportional editing not working
  • 8a135a9a5f2 Curves: Add cursor snapping support
  • 2fef2f707a5 Fix: Unable pick select first point/curve in Curves
  • 061d1916771 Fix #105043: Add shortcut for proportional editing
  • 2e7bd1dfb1b Fix #105044: Crash when rotating hair curves
  • 059ba28b299 Fix #105026: Texture space operators in transform menu
  • PR #105184 Fix #105109: Pick selection with multi object edit

Next to patching bugs I began working on the Duplicate operator.

I also organized the Grease Pencil Module meeting and finished the technical outline of the GP 3.0 project. This plan will be presented to the team in Amsterdam next week.

February 27 - March 03 (week 4)

This week, I was in Amsterdam at Blender and mostly worked on the technical design of Grease Pencil 3.0. After multiple meetings throughout the week with Bastien, Brecht, Dalai, Francesco, Julien, Sergey, and more, this is the design that was approved:

I also planned the next 5 weeks or so of development with some target milestones. The goal is to confirm the performance improvements that we expect from this new design.

I also committed some fixes to curves edit mode:

  • 00ca7c5221e Fix #105109: Pick selection with multi object edit
  • e6af81c5367 Fix #105028: No update exiting curves edit mode

March 06 - March 10 (week 5)

Due to the strike in France this week, I ended up spending Wednesday and Thursday in Amsterdam. I was also sick on Friday.

I began the work on the Grease Pencil 3.0 project this week by doing some refactoring:

  • 53bb713eda7 Refactor: Rename OB_GPENCIL and ID_GD
  • PR #105597 Refactor: Rename grease pencil files to legacy

I created a local branch for adding the new data-block and object called grease-pencil-v3. This branch might get pushed to the main repository for the initial development.

I also organized the module meeting as well as a meeting specifically on the future of LineArt:

March 13 - March 17 (week 6)

I began the week with some more refactoring.

  • 2788fa915be Refactor: CurvesGeometry read/write function
  • df0c2693b6b Refactor: Rename grease pencil files to legacy

Then I spent the rest of the week working on the grease-pencil-v3 branch. Here is a summary of what I worked on:

  • DNA for the new data-block (DNA_grease_pencil_types.h). There were a couple of decisions made here.
    • the map structure for the frames in a layer is stored in DNA as an array of keys and an array of values. The map will then be created at runtime.
    • the layer tree is also created at runtime and stored in DNA as an array of tree nodes (pre-order serialization of the N-tree).
  • Classes for the layer tree:
    • There is now a TreeNode class that is the base class for the Layer and LayerGroup class. The TreeNode is used to store the tree data (every node owns the data of its children) and also for easy iteration and searching through the tree. The Layer class will give access to the frames data. The LayerGroup class has an API for adding layers and creating groups.
  • Conversion between a bGPDframe and a GreasePencilDrawing:
    • As of right now it supports the following attributes on the point domain: positions, radius, opacity, .selection (UI attribute). And the cyclic and material_index attributes on the curve domain.
    • I also began working on converting the layers, this is still WIP.

I tested the conversion function by converting a single frame to a drawing and storing it in a Curves object.

  • New grease pencil data-block and object.
    • Next to adding the data-block and object (still WIP), I made it possible to convert between the old and new object with the object_convert operator (WIP).
  • Tests
    • I added a test file. Right now this is just testing the TreeNode, Layer and LayerGroup classes. More individual tests need to be added.

March 20 - March 24 (week 7)

This week I spent most of my time setting up the rendering code for the new grease pencil data-block.

  • Continued working on the blend read and write. This seems to be fully functional now.
  • Fix the copying of the layer tree.
  • Copy materials when converting to the new object type.
  • Merged in the gpencil-next render engine. Use this render engine by default with the new object type.
  • Implement the initial draw caches for the new data type.

March 27 - March 31 (week 8)

April 3 - April 7 (week 9)

April 10 - April 14 (week 10)

April 17 - April 21 (week 11)

April 24 - April 28 (week 12)