User:HooglyBoogly/Reports/2022/

December 19 - January 1
Since I didn't work full time the past two weeks I combined them into one report. I mainly spent time fixing bugs, doing code review, and working on some existing refactors. I also made some progress on using node declarations for group nodes though, which is a prerequisite for the simulation branch.

I made one new design task about converting files to C++:.

Changes / Features
 * Curves: Remove option to disable selection
 * Geometry Nodes: Avoid mesh copy in some cases
 * Geometry Nodes: Reduce socket logging overhead
 * UI: Use vector instead of linked list for block button groups
 * UI: Use vector instead of linked lists for context store
 * Nodes: Rewrite group creation operator

Fixes
 * Fix: Set position node doesn't tag mesh normals dirty
 * Fix T103301: Active and default color attributes lost in many operations
 * Fix T103136: Cannot activate viewer node in group
 * Fix T103307: Crash reading particle hair key.co
 * Fix T103520: Incorrect selection in paint mode operators
 * Fix T103452: Active & default color attributes reset on modifier apply
 * Fix T103463: Repeat last crashes in node editor
 * Fix: Wrong const iterator type for blender::Vector
 * Fix: Assert failure in mirror modifier
 * Fix: Debug build failure after recent variable name change
 * Fix: Crash when grouping frame node but not its children

Tests
 * Geometry Nodes: Add test for mesh set position normals dirty tagging
 * Tests: Remove random shuffling from modifiers test
 * Tests: Print when mesh test starts, to help debugging crashes

Cleanup
 * Cleanup: Simplify node clipboard, use Vector instead of ListBase
 * Cleanup: Move context.c to C++
 * Cleanup: Use simpler vector for dragged node links
 * Cleanup: Improve documentation in Curves DNA header
 * Cleanup: Rename flag for node socket link status
 * Cleanup: Use indices in curve to mesh, decrease variable scope
 * Cleanup: Use inline function for node socket visibility
 * Cleanup: Simplify node duplicate operator
 * Cleanup: Clang tidy
 * Cleanup: Remove unused modifier and BMesh includes
 * Cleanup: Use const parameters for node poll functions
 * Cleanup: Use const arguments for node interface socket functions
 * Cleanup: Simplify arguments to deselect all nodes function
 * Nodes: Add non-const access to cached group output node pointer
 * Nodes: Make more node and socket declaration fields public
 * Nodes: Make socket declaration member variables public
 * Cleanup: Grammar in comments

Review
 * `Accepted` : Mesh: Move UV layers to generic attributes
 * `Requested changes` : New C++ ply importer/exporter WIP
 * `Accepted` : Cleanup: remove 'UNUSED' macro definition in C++
 * `Requested changes` : Mesh: replace 'BKE_mesh_merge_verts' algorithm
 * `Commented` : Sculpt: Stroke Texture Mapping
 * `Accepted, committed` : Fix T103453: Don't allow call Attribute Convert operator in edit mode
 * `Accepted, committed` : Cleanup: delete boolean templates from Blur Attribute node
 * `Accepted, committed` : Fix T103011: custom data layers aren't copied when using Boolean
 * `Accepted` : BLI: Refactor matrix types & functions to use templates
 * `Commented` : Fix T103354: Author extents on UsdGeomMesh
 * `Commented` : Geometry Node: Gather link searche: Ability to move values to the top using a new link
 * `Requested changes` : Node Editor: Controlled node link swapping
 * `Accepted` : Geometry Nodes: Skip logging socket values for invisible node trees.
 * `Accepted` : Geometry Node: Geometry socket supported types tooltip without computing
 * `Commented` : Animation: Add Select Linked Vertices to Weight Paint Mode
 * `Accepted, committed` : Fix T103370: missing UI context members
 * `Requested changes` : Cleanup: Use generic in Accumulate Field
 * `Accepted` : Fix uninitialized ColorSceneLinear4f occuring in certain situations.
 * `Commented` : Geometry Nodes: Select Linked Node
 * `Accepted` : Fix T103394: default/active color status lost after remeshing
 * `Accepted` : Geometry Nodes: SDF Volume Sphere
 * `Commented` : Fix T101766: Curves sculptmode: orbit around selection / view selected
 * `Closed` : Curves sculptmode: hide select menu when selection is not used
 * `Closed` : WIP: EXPERIMENT: Use dynamic declaration as socket update function
 * `Closed` : Fix T102027: Add set origin support for pointcloud objects

Tracker
 * Investigated: 41
 * Confirmed: 1
 * Resolved: 12
 * Known Issue: 2
 * Archived: 12
 * Duplicate: 3

Next Week

Next week I'd like to commit some refactors and continue working on various 3.5 features.

December 12 - December 18
This week I worked more on the backend of group nodes and group input/output nodes, getting them to use the node declarations system and making the creation of new links more explicit. That's a bit of an involved refactor, so it's taking longer than I hoped. I think it's important that the simulation nodes aren't the first place to use that system though.

I committed a few refactors for meshes, including storing active attributes in a more solid way and replacing the old edge split implementation.

After Erik asked about a more specific plan for implementing volume features, I made a task describing how I would go about implementing it:.

Changes / Features
 * Mesh: Store active & default color attributes with strings
 * Nodes: Allow skipping node attachment after dragging
 * Geometry Nodes: Add error message when applying modifier with no mesh
 * UI: Use vector instead of linked lists for context store
 * UI: Use vector instead of linked list for block button groups
 * Refactor: Replace old Mesh edge split implementation

Fixes
 * Fix T103225: Line Art modifier skips loose edges
 * Fix T103321: NodeSocket.node is None in Node.copy callback
 * Fix T103143: Cycles can lose default color attribute
 * Fix T103052: Box trim does not create face sets attribute
 * Fix T103186: Missing anonymous attribute reference
 * Fix T103136: Cannot activate viewer node in group
 * Fix T103195: Initialize face sets from bevel weights broken
 * Fix T103051: Changed behavior when removing a material slot
 * Fix: Wrong const iterator type for blender::Vector
 * Fix: Crash after mesh color attribute name commit
 * Fix: Uninitialized variable in mesh primitive refactor

Tests
 * Cycles: Add a test for mesh default color attribute
 * Geometry Nodes: Update icosphere test file for recent UV map change

Cleanup
 * Cleanup: Move context.c to C++
 * Cleanup: Return early in node link operator, remove useless comments
 * Cleanup: Slightly refactor cancelling link drag operator
 * Cleanup: Move mesh modifier apply function to editors module
 * Cleanup: Various improvements to modifier apply operator
 * Cleanup: Remove redundant information from node link drag struct
 * Cleanup: Remove cryptic "PET" acronym
 * Cleanup: Remove unnecessary node link flag
 * Cleanup: Remove ifdef'd node transform code
 * Cleanup: Remove duplicate UV islands header
 * Cleanup: Remove runtime node flag, various node transform cleanups
 * Cleanup: Use LISTBASE_FOREACH macro
 * Cleanup: Use const variables in node drawing
 * Cleanup: Reduce indentation when setting node active
 * Cleanup: Use standard node function names and namespace
 * Cleanup: Add a bit more detail to curves offsets comment
 * Cleanup: Remove disabled code
 * Cleanup: Move two modifier files to C++

Review
 * `Requested changes` : Support for export curves on alembic
 * `Accepted` : Curves editmode: edit points are drawn from evaluated curves
 * `Accepted` : Geometry nodes: Optimize Set Position node
 * `Accepted` : Geometry Nodes: Output uv map from primitive nodes as anonymous attributes.
 * `Committed` : Fix std::optional value build error on older macOS SDK
 * `Accepted` : Fix T101765: Curves sculptmode: object origin and 3D cursor are visible
 * `Closed` : Nodes Editor: Draw lines across the center of the grid
 * `Closed` : Curves: Fixed Switch Sculpt mode
 * `Closed` : A Mesh Smooth node, as designed in T86903.

Tracker
 * Investigated: 15
 * Confirmed: 1
 * Resolved: 9
 * Needs Information: 1
 * Archived: 2
 * Duplicate: 1

Next Week

I'll hopefully finish up the refactors to group node declarations, and implement the next feature for edit mode attribute editing, like I had hoped last week.

December 5 - December 11
This was a productive week. Though I didn't make that much progress on simulation, I got the branch back to a working state and made the simplifications we talked about like removing the extra sockets. The implementation should be much more solid now. I'm more confident dealing with it anyway.

I also did a bunch of refactoring to mesh face corners and face corner normals. I ended up with a >20% performance improvement by mistake, just by removing redundant information in allocated memory. Indices are really so much better than pointers! On the way, I ended up implementing "On Cage" editing for the split edges and extrude nodes.

I went over a bunch of patches too, and closed some old abandoned ones. One new design task this week too, about socket naming:
 * : "Face Group" / "Group Index" / "Face Set" concept naming

Changes / Features
 * Mesh: Reduce memory consumption when calculating corner normals
 * Mesh: Avoid storing redundant pointer in corner normal calculation
 * Geometry Nodes: Support original index layer in split edges node
 * Geometry Nodes: Support original indices in extrude node
 * Nodes: Improve search weights for mix node sockets
 * Geometry Nodes: Improve switch node search for booleans
 * Geometry Nodes: Improve search weight for named attribute exists socket
 * OBJ: Avoid retrieving mesh arrays, improve const correctness

Fixes
 * Fix T102940: "Mask by Color" sculpt tool crash
 * Fix T103015: Line art crash after recent refactor
 * Fix: Assert failure when joining nodes with frame
 * Fix: Uninitialized variable in mesh primitive refactor

Cleanup
 * Cleanup: Add accessor for node index
 * Cleanup: Organize and comment bNode struct
 * Cleanup: Use Span instead of MutableSpan for normals array
 * Cleanup: Comment formatting in normal calculation
 * Cleanup: Remove unnecessary MLoop argument
 * Cleanup: Remove unnecessary indentation in cone primitive
 * Cleanup: Reduce use of redundant local variables in normal calculation
 * Cleanup: Reduce indentation in mesh operator
 * Cleanup: Reduce indentation in corner normal calculation
 * Cleanup: Split sharp edge tagging from face corner normal calculation
 * Cleanup: Avoid double negative in face corner normal calculation
 * Cleanup: Various improvements to old mesh edge split code
 * Cleanup: Const correctness for node find functions
 * Cleanup: Simplify naming in UV sphere primitive
 * Cleanup: Rename adjacent mesh loop accessors
 * Cleanup: Make mesh primitive topology building more parallel
 * Cleanup: Use topology cache of group output node
 * Cleanup: Use array in face corner normals calculation
 * Cleanup: Return early in mix node link-drag-search
 * Cleanup: Tweak variable name in extrude node
 * Cleanup: Resolve unused variable warnings in modifier
 * : Cleanup: Replace old Mesh edge split implementation

Review
 * `Requested changes` : BLI: Refactor matrix types & functions to use templates
 * `Requested changes` : USD Export - New Curves/Hair Support
 * `Accepted, committed` : Autofill for Attribute Convert Operators
 * `Accepted` : Fix T102740: Don't insert the group into itself
 * `Accepted, committed` : UI: fix several labels and tooltips
 * `Accepted, committed` : Geometry Node: Change output socket name to Instances: Consistent tooltips
 * `Accepted, committed` : Geometry Node: Input Image node
 * `Accepted, committed` : UI: fix more labels and tooltips
 * `Accepted, committed` : Autofill for Attribute Convert Operators
 * `Accepted, committed` : Cleanup: Use topology cache of group output node
 * `Accepted, committed` : Geometry Node: Blur Attribute: Add preferred domain based on Value input
 * `Requested changes` : Geometry Node: Input Image gather link search
 * `Requested changes` : Geometry Nodes: Add selection field to realize instances
 * `Accepted` : Fix T102966: Curves editmode selection drawing not stable / flickering
 * `Accepted` : Fix: UI: broken texpaintslot/color attributes/attributes name filtering
 * `Accepted` : Docs: Geometry Node: Sample Index node: Tip for sampling point domain from specific component
 * `Accepted` : Cleanup: replace "UV's" by "UVs"
 * `Accepted` : Fix T103001: Width of some compositor nodes is incorrect
 * `Accepted` : Docs: Geometry Node: Collection Info: Consistent output socket name
 * `Commented` : BLI_timeit: tabulate benchmark
 * `Commented` : Geometry Node: Edge Rings node
 * `Commented` : Geometry Nodes: Add Selections to Curve to Mesh Node
 * `Requested changes` : Geometry Nodes: Trace Image Node (WIP)
 * `Requested changes` : Configurable rotation angle increments
 * `Requested changes` : Migrate Movie Clip Editor to new tool system
 * `Closed` : Add Bisect Modifier
 * `Closed` : Geometry Nodes: Group Face by Edge Node
 * `Closed` : Geometry Node: Dynamic label for Switch node
 * `Closed` : Geometry Nodes: Collapse Node, Dissolve Node, Unsubdivide Node
 * `Closed` : Geometry Nodes: Remesh Voxel
 * `Closed` : Geometry Nodes: Remesh Blocks
 * `Closed` : Geometry Nodes: Solidify Node
 * `Closed` : Geometry Nodes: Add a minimum distance attribute to the Attribute Proximity Node
 * `Closed` : Geometry Nodes: Mirror node
 * `Closed` : UI: Popover triangle alignment tweaks
 * `Closed` : Boolean Modifier: operand display operators and render/visibility settings
 * `Closed` : Use prev/next naming for media keys
 * `Closed` : Fix T86602: Redo Last Panel in the bottom left disappears on left click (regression)

Tracker
 * Investigated: 17
 * Confirmed: 1
 * Resolved: 3
 * Needs Information: 1
 * Archived: 4
 * Duplicate: 1

Next Week

I'd like to get more socket types working with the simulation nodes, make more progress on my mesh refactors, and implement another mesh attribute editing feature.

November 28 - December 4
This week I worked more on simulations and bug fixing and cleanup. For the simulations I added unique integer identifiers to nodes. That involved some more bug fixing and cleanup, in order to do it properly anyway. I've also been working on refactoring mesh corners (`MLoop`) in the `refactor-mesh-corners-generic` branch. I'm at 100 uses of `MLoop` out of the original 1000 at this point. I also committed some cleanups and performance improvements from that branch already.

I one design/todo task to help share some refactoring work with Jacques:
 * : Lazy Face Corner Normal Calculation

Changes / Features
 * Nodes: Use persistent integer to identify to nodes
 * Dual Mesh: Avoid transferring position attribute twice
 * Subdiv: Avoid repeatedly accessing mesh arrays
 * Multires: Avoid retriving mesh arrays for every element
 * Mesh: Avoid retrieving edge and loop arrays repeatedly
 * Line Art: Use local spans for mesh arrays

Tests
 * Geometry Nodes: Add scene and node benchmark files
 * Geometry Nodes: Add basic performance tests for a few nodes

Fixes
 * Fix T99592: Exact Boolean: Skip empty materials, add index-based option
 * Fix: Various mishandling of node identifiers and vector
 * Fix: Node Editor: Hide compoitor-specific menu items
 * Fix: Reversed attribute is_internal RNA property
 * Fix: Mishandled creases in Cycles adaptive subdivision
 * Fix T102861: Store named attribute warning with empty geometry
 * Fix: Node sorting broken after node identifier commit
 * Fix T102895: Grammar in apply scale operator
 * Fix: Assert in subdivide curves node after span slicing change
 * Fix T102772: Propagate edge creases in subdivision surface modifier
 * Fix T102804: Click & Drag on toggles no longer possible
 * Fix T102827: 3D View header layout broken after C++ conversion

Cleanup
 * Cleanup: Use Span to iterate over nodes instead of ListBase
 * Cleanup: Use spans and lambdas for mesh normal calculation
 * Cleanup: Use new node identifiers when copying tree
 * Cleanup: Remove "done" variable from node runtime
 * Cleanup: Remove node tree runtime fields
 * Cleanup: Remove useless comments in node.cc
 * Cleanup: Remove unused node socket cache handling
 * Cleanup: Move dual mesh topology map to blenkernel
 * Cleanup: Remove unnecessary list clearing in node tree reading
 * Cleanup: Remove unnecessary use of deprecated DNA define
 * Cleanup: Remove unnecessary BMesh unique pointer in OBJ code
 * Cleanup: Remove unused mesh array variables and arguments
 * Cleanup: Correct comment in hash description
 * Cleanup: Grammar in BMesh mesh conversion comment
 * Cleanup: Unused variable, RNA description warning
 * Cleanup: Use spans for voxel remesh mesh data
 * Cleanup: Pass spans by value in cone mesh primitive

Review
 * `Commented` : Mesh: Move UV layers to generic attributes
 * `Accepted` : BLI: Add atomic disjoint set data structure
 * `Accepted` : Geometry Nodes: Add Smooth Attribute node
 * `Requested changes` : BLI: Refactor Matrix C++ API to be fully templated
 * `Commented` : Geometry Node: Change output socket name to Instances: Consistent tooltips
 * `Requested changes` : Geometry Nodes: Operator to convert input node to group input socket
 * `Accepted` : Fix: UI: broken texpaintslot/color attributes/attributes name filtering
 * `Commented` : [WIP] Add initial version of Node Sections to keep sockets more manageable
 * `Commented` : Fix T102740: Don't insert the group into itself
 * `Commented` : Geometry Nodes: Trace Image Node (WIP)
 * `Commented` : Geometry Nodes: Select Linked Node
 * `Accepted` : Fix T102882: Crash when there are link cycles and a viewer in a node group.
 * `Committed` : BKE_attribute_math: DefaultMixer: remove asserts for negative weight

Tracker
 * Investigated: 16
 * Confirmed: 1
 * Resolved: 8
 * Archived: 1
 * Duplicate: 3
 * Known Issue: 2

Next Week

I'd like to finish up some smaller patches and start working on attribute editing in edit mode, and work more on simulations.

November 21 - November 27
This week I started working on simulations, worked on bug fixing, and moved the rest of the interface directory to C++.

I got the simulation input and output nodes to a point where they worked in my very basic tests, but it turned out the branch was actually stable enough for people to do some really cool testing, we saw a lot of that this week. It's been motivating, but the next step of the project is harder.



Changes / Features
 * Geometry Nodes: Modify existing mesh in split edges node
 * BLI: Remove clamping from span slicing
 * BLI: Follow up and fix recent span slicing change
 * Nodes: Remove "level" building pass on update
 * Nodes: Use topology cache for node exec node list
 * Geometry Nodes: Add "Exists" output to Named Attribute input node
 * Geometry Nodes: Parallelize bounds compuation in points to volume
 * : Nodes: Avoid updating topology cache when changing properties

Tests
 * Tests: Automated geometry nodes benchmark
 * Geometry Nodes benchmark: Add split edges test files

Fixes
 * Fix T102522: Geometry nodes boolean doesent respect material index
 * Fix T102700: Viewer node missing check for empty geometry component
 * Fix T102420: Outdated mesh edge crease API used in FBX import
 * Fix T102670: Crash after deleting attribute in edit mode
 * Fix T102752: Missing default radius when joining point clouds
 * Fix: Assert, invisible instances with mixed instancing types
 * Fix: Use after free when removing attribute
 * Fix: Missing caches in curves bounds evaluation
 * Fix: Hide "Squeeze Value" node from node search

Cleanup
 * Cleanup: Use array_utils to copy evaluated field array
 * Cleanup: Remove unused math min max utility
 * Cleanup: Move poly normal calculation to mesh_normals.cc
 * Cleanup: Use const arguments for custom normals
 * Cleanup: Group deprecated mesh DNA fields, improve comments
 * Cleanup: Decrease variable scope, change names in BMesh layer handling
 * Cleanup: Remove .blend1 files committed mistakenly
 * Cleanup: Remove unnecessary includes
 * Cleanup: Avoid using macros to refer to theme global variables
 * Cleanup: Move interface_intern.hh to C++
 * Cleanup: Move interface eyedroppers directory to C++
 * Cleanup: Move interface_handlers.c to C++
 * Cleanup: Move six more interface files to C++
 * Cleanup: Move four interface files to C++

Review
 * `Accepted` : Nodes: Move node registration to nodes module.
 * `Commented` : Geometry Nodes: Add a selection input to the store named attribute node
 * `Commented` : RNA: Use C++ for sequencer properties
 * `Commented` : Cleanup: Pass vec_base types by value in its class methods
 * `Accepted, committed` : Geometry Nodes: Rename Transform node to Transform Geometry
 * `Accepted, committed` : Cleanup: Integer types, references in geometry node image texture node
 * `Commented` : Geometry Node: Smart Scene Time update relations
 * `Accepted, committed` : Geometry Node: Collection Info: Change output socket name to Instances
 * `Commented` : Image to Points geometry node
 * `Closed` : Docs: Sample UV Surface in Mesh page
 * `Closed` : Geometry Nodes: Yuksel's sample elimination algorithm

Tracker
 * Investigated: 21
 * Confirmed: 1
 * Resolved: 7
 * Archived: 6
 * Known Issue: 1

Next Week

I'll make some progress on simulation and fix some final bugs for 3.4.

November 14 - November 20
This week I looked into performance improvements with mesh caches, looked into some performance improvements in various edge cases of sculpt mode, and did the usual code review and bug fixing.

Changes / Features
 * Geometry: Cache bounds min and max, share between data-blocks
 * Mesh: Move loose edge flag to a separate cache
 * Mesh: Use shared cache for derived triangulation
 * Mesh: Avoid calculating normals when building BVH tree
 * Mesh: Don't tag normals and triangluation dirty when translating
 * Sculpt: Avoid retrieving vertices attribute when flushing positions
 * Sculpt: Remove some normal calculation with deformed sculpting
 * Nodes: Replace implementation of select next/prev type operator
 * Nodes: Simplify view panning when selecting node
 * Curves: Add descriptions for normal mode RNA enum
 * UI: Simplify description for geometry node socket
 * : Mesh: Use shared cache for normals

Tests
 * Geometry Nodes: Add test files for split edges update

Fixes
 * Fix T102502: Collada import sets incorrect material indices
 * Fix T102611: Unable to change file output node sockets from python
 * Fix: Crash when writing mesh after previous commit
 * Fix T102365: Wireframe skips edges after recent cleanup
 * Fix: Crash when deleting node
 * Fix: Missing bounding box dirty tag when clearing mesh geometry
 * Fix: Build error on MSVC with mismatched struct/class keywords
 * Fix: Missing clearing of mesh triangulation data
 * Fix T102537: Curve subdivide mishandles single point curves

Cleanup
 * Cleanup: Simplify freeing and clearing mesh runtime data
 * Cleanup: Use C++ BitVector instead of BLI_bitmap for BVH utils
 * Cleanup: Reduce indentation and variable scope in BVH utils
 * Cleanup: Allow using C++ features in BMesh header functions
 * Cleanup: Resolve unused variable warning in draw module
 * Cleanup: BVH utils: Remove print, use spans instead of pointers
 * Cleanup: Improve comment about copying mesh shared caches
 * Cleanup: Move bmesh_iterators.c to C++
 * Cleanup: Remove unused node operator property
 * Cleanup: Remove unused boolean in node select function
 * Cleanup: Split UV sample geometry node into two functions
 * Cleanup: Sort includes in mesh header
 * Cleanup: Remove unnecessary clearing of mesh runtime data
 * Cleanup: Remove unnecessary dirty normal tags
 * Cleanup: Remove DerivedMesh use in UV unwrapping
 * Cleanup: Remove unnecessary using keyword and namespace
 * Cleanup: Remove unused node clipboard type handling
 * Cleanup: Remove unnecessary mesh normals debugging function
 * Cleanup: Use simpler check for Bezier curves
 * Cleanup: Slightly improve mesh normals and runtime comments
 * Cleanup: Improve curves comments
 * Cleanup: Don't set mesh normals directly for metaballs

Review
 * `Accepted, committed` : Geometry Nodes: Use Mesh instead of Bmesh in edge split node
 * `Accepted, committed` : Fixes versioning problem with cyclic bezier NURBS
 * `Accepted, committed` : Partial Fix T102428: Invertible Bezier curve trim for endpoints within the same segment
 * `Accepted, committed` : Geometry Node: Image Info
 * `Accepted, committed` : Nodes: "Exists" boolean for the Named Attribute Input node
 * `Commented` : (WIP) Geometry Node: Curve Intersections
 * `Accepted, committed` : Allow pasting nodes between editor types
 * `Requested changes` : DRW: Recreate method to calculate edges factor
 * `Commented` : [Work In Progress] USD Export - New Curves/Hair Support
 * `Commented` : Geometry node: Add a point selection input to Fillet Curve Node
 * `Commented` : Geometry Nodes: Add a selection input to the store named attribute node
 * `Commented` : Geometry Node: Edge Rings node
 * `Requested changes, accepted` : Sculpt Mode: Resolve `Shift R` shortcut conflicts
 * `Accepted` : UI: Refactor Node Context Menu
 * `Accepted` : Fix T102520: Positioning of nodes added via search
 * `Accepted` : Image Info docs page
 * `Accepted` : USD CI Tests
 * `Accepted` : Fix T102620: Display dynamic socket label in uiTemplateNodeView
 * `Accepted` : Sculpt: Standardize face set undo steps, optimize memory usage
 * `Accepted` : Fix T99125: Curve mapping widget removes all vector points
 * `Commented` : Geometry Nodes: Add Select Edge Ring Node
 * `Commented` : Geometry Nodes: Add Tile Count to Image Info Node
 * `Commented` : Fix T100904: Shader Nodes: Optimize-out inactive mix branches
 * `Commented` : Cleanup: Geometry Node: Image Texture
 * `Commented` : Realtime Compositor: Warn about unsupported setups
 * `Commented` : Geometry Nodes: Rename Transform node to Transform Geometry
 * `Requested changes` : Cleanup: Migrate UV pack geometry node to updated API.

Tracker
 * Investigated: 13
 * Confirmed: 2
 * Resolved: 6
 * Duplicate: 2

Next Week

Next week I'll finish up some of the patches I worked on this week, and start experimenting with implementing simulation caching.

November 7 - November 13
This week I worked on bug fixing and a bunch of cleanups. I was involved in two new design tasks this week too:
 * : Struct of Arrays Refactor for Mesh Face Corners
 * : Image Texture sampling by int X and Y pixel indices

Changes / Features
 * Geometry Nodes: Add preferred domain to many field inputs

Fixes
 * Fix T100706: Object instances with different geometry type invisible
 * Fix T102358: Sample curve node all curves factor mode incorrect
 * Fix T102003: Spline parameter length wrong for NURBS
 * Fix T101972: Crash converting 1 or 2 point NURBS curve to Bezier ,
 * Fix: Failing instance visibility test after recent commit
 * Fix T102404: Behavior change in CustomData API
 * : Fix T102365: Wireframe skips edges after recent cleanup

Cleanup
 * Cleanup: Simplify handling of loop to poly map in normal calculation
 * Cleanup: Clarify and deduplicate attribute convert implementation
 * Cleanup: Miscellaneous cleanups to trim curves node
 * Cleanup: Remove unnecessary node type registraction functions
 * Cleanup: Decrease variable scope in mesh loop normal calculation
 * Cleanup: Disable mesh normal debug time printing
 * Cleanup: Remove unnecessary struct keywords
 * Cleanup: Make loop normal calculation function static
 * Cleanup: Use spans for loop normal calculation input data
 * Cleanup: Use simpler timers for mesh normals debug timing
 * Cleanup: Rename curves sculpt selection variable
 * Cleanup: Improve curves sculpt code section names
 * Cleanup: Use string argument for attribute API function
 * Cleanup: Move lineart_cpu.c to C++
 * Cleanup: Move sculpt.c to C++
 * Cleanup: Move mesh_remap.c to C++
 * Cleanup: Move cloth.c to C++
 * : Cleanup: Remove DerivedMesh use in UV unwrapping

Review
 * `Requested changes` : Geometry Nodes: Add Smooth Attribute node
 * `Requested changes` : (WIP) Geometry Node: Curve Intersections
 * `Requested changes` : Geometry Nodes: Add a selection input to the store named attribute node
 * `Accepted, committed` : Selection input for curve trim node and behavior corrections
 * `Accepted` : BLI: New basic CacheMutex.
 * `Commented` : Geometry Nodes: Use Mesh instead of Bmesh in edge split node
 * `Accepted` : Fix T102318: crash smoothing vertex weights in editmode
 * `Requested changes` : Cleanup: Migrate UV pack geometry node to updated API.
 * `Accepted, committed` : Convert Color Attribute operator
 * `Accepted` : Fix T102385: Set frame node active after joining nodes
 * `Accepted` : Geometry Node: Image Info
 * `Accepted` : BLI: Improve CPPType system.
 * `Commented` : Texture Nodes: Refactor procedural node type
 * `Accepted` : BLI_disjoint_set: Use template and const
 * `Accepted` : Geometry Nodes: Improve alignment of exposed properties in the modifier
 * `Accepted` : Fix T100988: Flickering when using sculpt brush in drag dot mode
 * `Accepted` : Geometry Node: Raycast correct field dependencies
 * `Accepted` : Fix: Curves sculptmode: deduplicate checks for being in mode

Tracker
 * Investigated: 28
 * Confirmed: 4
 * Archived: 4
 * Resolved: 7
 * Duplicate: 3
 * Known Issue: 2

Next Week

More work on various cleanups, then starting some larger new feature projects for 3.5, once we decide what they are.

October 31 - November 6
This week we spent most of the time discussing design for the next phases of the geometry nodes project. The workshop was really productive, so hopefully it's helpful when we actually work on these things. The intial notes are here, though they'll end up on devtalk soon. I also did some performance investigation and did some cleanup on the weekend.

One new design task this week:
 * : Group Index input for the fill curve node

Changes / Features
 * Nodes: Add node group assets in add menu
 * Geometry Nodes: Add index and value inputs to sample curve node
 * OBJ Export: Remove edge recalculation ,
 * Nodes: Improve socket node lookup performance
 * Geometry Nodes: Use attribute API in deform curves on surface node
 * : Mesh: Mapping performance experiment (WIP)

Fixes
 * Fix: Missing initialization curves bounds in set origin operator
 * Fix: Broken debug build after recent cleanup commit
 * Fix: Crash adding rest positions to empty mesh

Cleanup
 * Cleanup: Nodes: Use const arguments, avoid recursive iteration
 * Cleanup: Mesh: Remove redundant edge render flag
 * Cleanup: Use Vector in group input/output node update functions
 * Cleanup: Remove unused node function
 * Cleanup: Remove unnecessary node type registraction functions
 * Cleanup: OBJ: Simplify access to loose edges
 * Cleanup: Move legacy mesh conversions to proper file
 * Cleanup: Move function to legacy mesh conversion file
 * Cleanup: Remove redundant assignment of loose edge flag
 * Cleanup: Use mesh API functions

Review
 * `Requested changes` : Geometry node: Add a point selection input to Fillet Curve Node
 * `Commented` : Geometry Nodes: Use Mesh instead of Bmesh in edge split node
 * `Requested changes` : Allow pasting nodes between editor types
 * `Commented` : Node Editor: Controlled node link swapping
 * `Requested changes` : Fix T102027: Add set origin support for pointcloud objects
 * `Commented` : Nodes: "Exists" boolean for the Named Attribute Input node
 * `Commented` : Fix T101979: Edge Angle Node returns wrong sign
 * `Commented` : Image to Points geometry node
 * `Requested changes` : Geometry Node: Raycast correct field dependencies
 * `Commented` : USD CI Tests
 * `Committed` : Reuse input sockets when creating new node groups
 * `Accepted` : Fix Curves Smooth modifier appears to be able to act on control points
 * `Accepted` : Refactor: Rename Object->imat to Object->world_to_object

Tracker
 * Investigated: 9
 * Archived: 3

Next Week

A normal week again. I expect we'll talk about prioritizing the next steps of the project too.

October 17 - October 21
This week I spent time bug fixing, and I looked into updating some of my old patches for refactors. Didn't commit too much work besides bug fixes. Though it was fun to make one sculpt operator 4000x faster and the Blender Binary 173KB smaller. And I made one design task:


 * : Consistent socket name for Collection Info node

Changes / Features
 * Sculpt: Improve performance of face set creation from selection
 * Geometry Nodes: Use common utility for copying attribute data
 * Sculpt: Remove face sets from default cube

Fixes
 * Fix T101926: Curves: Remove type-specific attributes when deleting
 * Fix: USD & Alembic importers might not initialize material indices
 * Fix T101883: Issue applying modifier to mesh with shape keys
 * Fix: Geometry Nodes: Memory leak when deleting instances
 * Fix: Sample nearest surface node crash with empty mesh
 * Fix T101872: Curves sculpt deform node crash with changed curve count
 * Fix T101882: Division by zero in mesh topology nodes
 * Fix T101871: Realize instances node can skip material indices ,

Cleanup
 * Cleanup: Remove unused grease pencil / RNA includes
 * Cleanup: Move versioning_defaults.c to C++

Review
 * `Requested changes` : (WIP) Geometry Node: Curve Intersections
 * `Requested changes` : Geometry Nodes: Add a selection input to the store named attribute node
 * `Requested changes` : [WIP] Curves editmode: edit points are drawn from evaluated curves
 * `Commented` : Selection input for curve trim node and behavior corrections
 * `Commented` : USD CI Tests
 * `Accepted` : Nodes: "Exists" boolean for the Named Attribute Input node
 * `Accepted` : Nodes: Restrict Python API on built-in nodes.
 * `Commented` : UI: Refactor Node Context Menu
 * `Accepted` : Fix T101922: transforming surface points misses redraw
 * `Accepted` : Nodes: Link to Output operator

Tracker
 * Reported : Tweaking material property causes assert failure
 * Investigated: 17
 * Duplicate: 2
 * Known Issue: 1
 * Resolved: 6
 * Archived: 2

Next Week

The Blender conference! So, preparing for giving part of a talk about geometry nodes, and lots of other stuff. Hopefully I can find time to commit the add menu patch too, Julian has figured out dynamic menu redrawing in the last week.

October 9 - October 14
This week I worked on some performance improvements: bounding boxes, draw module data extraction, and BMesh to mesh conversion. I also worked a bit more on the node assets menu patch. It seems like rebuilding the menu dynamically won't work without larger changes though, so for now I'll find a simpler solution. I also went over a bunch of older patches.

One new design task this week:
 * : Node group operators

Changes / Features
 * Point Cloud: Support applying modifiers
 * Cycles: Use 0.01m as default point cloud radius
 * Nodes: Add "Legacy" to legacy node UI names, skip in search
 * Curves: Multithread position vertex buffer extraction
 * Mesh: Move runtime data out of DNA
 * Draw: Add missing TBB define to draw module
 * Build: Add TBB define to BMesh module
 * : Geometry: Cache bounds min and max, share between data-blocks
 * : BMesh: Multithread BMesh to evaluated Mesh conversion
 * : Nodes: Allow skipping node attachment after dragging

Fixes
 * Fix: Attribute layers can be skipped in Mesh to BMesh conversion
 * Fix T101711: Curve to points node sometimes skips initializing radius
 * Fix T101746: Node copy and paste changes multi-input socket order
 * Fix T101773: Mirror Vertex Weights operator broken
 * Fix: Missing part of previous BMesh bug fix
 * Fix: Crash updating draw cache of original curves data
 * Fix: Curves sculpt adding resets attribute values
 * : Sculpt: Standardize face set undo steps, optimize memory usage

Cleanup
 * Cleanup: Simplify node insert after drag code
 * Cleanup: Remove macro usage in vertex group mirror operator
 * Cleanup: Reduce variable scope in vertex group mirror operator
 * Cleanup: Use std::mutex for mesh runtime mutexes
 * Cleanup: Use const vertex pointer argument
 * Cleanup: Convert two nodes files to C++
 * Cleanup: Move draw_cache_impl_volume.c to C++
 * Cleanup: Small changes to curves draw cache
 * Cleanup: Decrease variable scope in UI region popup code
 * Cleanup: Use correct blenkernel namespace for mesh functions
 * Cleanup: Remove link drag search operations for socket templates
 * Cleanup: Reduce indentation in node attach operator
 * Cleanup: Comment formatting in BMesh operator
 * Cleanup: Remove unused spreadsheet geometry cache item

Review
 * `Requested changes` : Nodes: Show nested node-group in the header
 * `Requested changes` : Geometry node: Add a point selection input to Fillet Curve Node
 * `Requested changes` : Selection input for curve trim node and behavior corrections
 * `Commented` : UI: Refactor Node Context Menu
 * `Commented` : T101705: Don't create a lazy socket for dangling connections
 * `Accepted` : Nodes: Change Mix node link drag weighting
 * `Accepted` : Node: Add blend modes to Mix node link drag search
 * `Commented` : Fix T101746: Create copible links by order in multi socket
 * `Requested changes, accepted` : Nodes: Duplicate Linked operator + User Preference option for Node Tree
 * `Requested changes` : BKE: Attribute type name identifier
 * `Accepted` : Nodes: Link to Output operator
 * `Requested changes` : Geometry Nodes: Add a selection input to the store named attribute node
 * `Requested changes` : Geometry Nodes: Add Loose Ends mode to Curve Trim node.
 * `Requested changes` : Geometry Nodes: Support curve component in attribute proximity and attribute transfer nodes. (WIP)
 * `Requested changes` : Geometry Nodes: Add Message Node
 * `Requested changes` : Geometry Nodes: Add Instance Dimensions Input Node
 * `Accepted` : Fix: Muted curves connect to the Fac socket
 * `Requested changes` : Geometry Nodes: UV sphere: Change pos calc and parallelize
 * `Requested changes` : Geometry Nodes: Add Pick mode to Switch node (WIP)
 * `Requested changes` : Geometry Nodes: Curve Connect Splines Node
 * `Requested changes` : NURBS surface knot insert operator
 * `Requested changes` : Nodes: Add subtype selection to socket editing
 * `Requested changes` : Move solidify code to geometry module
 * `Accepted` : Hair Curves: make the "surface_uv_map" a searchable dropdown
 * `Commented` : Add Option To Skip Temporary Layers
 * `Commented` : UV editor: Improve Ui alignment in overlays panel
 * `Closed` : Geometry Nodes: Curve to Point Index Node (WIP)
 * `Closed` : Geometry Nodes: New Face Vertex/Edge node.
 * `Closed` : Boolean targets can now be any object providing a MESH in GeometrySet
 * `Closed` : Geometry Nodes: Mesh Inset
 * `Closed` : Fix unexpected twist and asymmetry in curve using tangent mode
 * `Closed` : Nodes: Pointer from socket to node for faster lookups
 * `Closed` : Build lookup table to help parallelize normal accumulation after the deformation process

Tracker
 * Investigated: 16
 * Duplicate: 1
 * Resolved: 5
 * Archived: 2

Next Week

Bug fixing for 3.4, module meeting, finish the node add menu asset integration, more code review.

October 3 - October 9
This week I almost finished adding node assets to the geometry nodes add menu, worked on bug fixes, and spend some extra time working on some performance projects.

I started work on improving bounding box caching. I'm trying to make the project more manageable by breaking it into smaller steps.

I also made two tasks about mesh naming: the first a general improvement, the second in order to move forward with the "position as a generic attribute" patch.
 * : Improve consistency of mesh face naming
 * : Mesh vertex internal naming (especially position data)

Changes / Features
 * BLI: Unroll vector loops for better performance on GCC
 * Geometry Nodes: Change order of outputs in topology nodes
 * Geometry Nodes: Rename Control Point Neighbors Node
 * Geometry Nodes: Add soft min for points node radius input
 * UI: Avoid unnecessary label in set curve normal node
 * : Nodes: Add node group assets in add menu
 * : Geometry Nodes: Add curve index and custom value to sample curve node
 * : Geometry: Cache bounds for curves and points, share between data-blocks
 * : Mesh: Move runtime data out of DNA

Fixes
 * Fix T101583: Issues applying modifier to mesh with shape keys
 * Fix T101424: Empty group node added to node add search
 * Fix: Properly free non-trivial node editor runtime type
 * Fix: Use after free in geometry node group logger
 * Fix: Crash when reininitializing empty generic array
 * Fix: Incorrect field status in offset point in curve node
 * Fix: File menu broken after recent commit
 * Fix: Crash versioning transfer node with animation data
 * Fix T101610: UV Sphere missing from geometry nodes menu
 * Fix: Bump subversion after forward compatibility breakage
 * Fix: UI: Warning for description with period at end
 * : Boolean: Avoid transferring empty material slots

Cleanup
 * Cleanup: replace UNUSED macro with commented args in C++ code
 * Cleanup: Fix outdated mesh data comments
 * Cleanup: Avoid inconsistent naming in mesh topology API
 * Cleanup: Use helper function for previous mesh loop
 * Cleanup: Clang tidy
 * Cleanup: Remove unnecessary MOD_nodes.h includes
 * Cleanup: Remove unused includes
 * Cleanup: Fix sign conversion warning in BMesh log
 * Cleanup: Move eight modifier files to C++
 * Cleanup: Move subdiv_ccg.c to C++
 * Cleanup: Move editmesh_undo.c to C++
 * Cleanup: Move shrinkwrap.c to C++
 * Cleanup: Move subdiv_modifier.c to C++
 * Cleanup: Move multires.c to C++

Review
 * `Accepted, committed` : BKE: Mesh attribute adapt domain improve
 * `Accepted, committed` : Retains active NURBS curve after point deletion
 * `Accepted` : Geometry Nodes: Separate Instances from InstancesComponent.
 * `Commented` : Geometry Nodes: New Relax Face Sets node
 * `Commented` : Selection input for curve trim node and behavior corrections
 * `Accepted` : USD Import: Custom Data Update for Colors
 * `Accepted` : USD Export: Custom Data Update.
 * `Accepted` : Fix T101628: Correct frame node intersection in add reroute operator
 * `Requested changes` : Convert Color Attribute operator
 * `Accepted` : Attribute Node: access geometry node instance attributes.
 * `Accepted` : I18n: disambiguate New in file menu after previous mistake
 * `Accepted` : Geometry Nodes: Set Curve Normal
 * `Commented` : Sculpt: Auto-masking UI improvements
 * `Commented` : Reuse input sockets when creating new node groups

Tracker
 * Reported : Node group timings aren't displayed for node groups
 * Investigated: 11
 * Duplicate: 1
 * Resolved: 5
 * Archived: 1

Next Week

Hopefully I'll get to the point of committing the node editor add menu asset integration. Other than that, I'd like to make progress on some of the changes with bounding boxes, and I also started some experimental changes to mesh data extraction for drawing that I'd like to finish.

September 26 - October 2
This week I worked more on mesh and curve topology nodes, did a bunch of code review, and did a fair amount of the work for adding node group assets to the geometry nodes add menu.

Changes / Features
 * Geometry Nodes: Curve and mesh topology access nodes
 * Nodes: Use plain menus for geometry nodes add menu
 * Geometry Nodes: Miscellaneous changes in control point neighbors node
 * Mesh: Add C++ implementaiton of topology mappings
 * : Geometry Nodes: Add index input to Edge Vertices node

Fixes
 * Fix: Incorrect handling for crease layers
 * Fix: Viewer node overlay alpha broken on NVidia GPUs
 * Scew Modifier: Remove eager normal calculation
 * Fix T101348: Sculpt smooth brush artifacts with hidden faces
 * Fix T101118, T101471: Crash with bevel weight in solidify modifier
 * Fix T101398: Transfer Attribute node still defined in menu
 * Fix: Assert in legacy mesh conversion
 * Fix: Order of node mixins in custom nodes python template

Cleanup
 * Cleanup: Deduplicate logic in CustomData access functions
 * Cleanup: Use variable and const for sculpt mesh vertex to poly maps
 * Cleanup: Use signed integers for mesh vertex indices
 * Cleanup: Unused variable warning with path guiding turned off
 * Cleanup: Remove unused BMesh function
 * Cleanup: Remove more unused CustomData API functions
 * Cleanup: Typo in forward declaration
 * Cleanup: Naming in edge vertices node
 * Cleanup: Move draw_manager_data.cc to C++
 * Cleanup: Move files that use mesh runtime data to C++ ,
 * Cleanup: Move object_update.c to C++
 * Cleanup: Move modifier.c to C++
 * Cleanup: Move three modifier files to C++

Review
 * `Commented` : 3D Texturing: Fix seam bleeding.
 * `Accepted` : Geometry Nodes: Viewport preview.
 * `Accepted` : Geometry Nodes: Control Point Neighbor Node
 * `Commented` : Geometry Nodes: Relaxed Catmull-Rom Trim (improvement suggestion)
 * `Accepted` : Fix T101339: Animation on nodegroups breaks when socket is moved up/down
 * `Accepted` : Fix T101393: Vertex Crease operator does not create vertex crease layer
 * `Requested changes` : USD Export: Custom Data Update.
 * `Commented` : Potential Fix T101378: Missing update with complex node update functions.
 * `Accepted` : Retains active NURBS curve after point deletion
 * `Accepted` : Alembic/USD: use geometry sets to import data
 * `Accepted` : Alembic: import arbitrary attributes
 * `Commented` : I18n: fix geometry nodes field tooltips
 * `Commented` : BKE: Mesh attribute adapt domain improve
 * `Commented` : USD Import: Fixed vertex colors import for Color3f.
 * `Accepted, committed` : Fix T101361: Check if node is hidden
 * `Accepted` : Fix missing Outliner updates when adding nodetrees
 * `Accepted` : Geometry Nodes: New uv map based attribute transfer mode.
 * `Accepted` : Fix T101341: make nodegroups active input/output non-animatable
 * `Abandoned` : Fix T99161: Set reroute node active when adding through lasso gesture

Tracker
 * Reported : New geometry nodes viewer overlay makes mesh edit mode overlays invisible
 * Investigated: 11
 * Resolved: 7
 * Archived: 1

Next Week

I'll try to finish getting node group assets in the add menu, and I'll probably work more on the sample curve node, do more code review, and work more on various mesh data refactors.

September 19 - September 25
This week I committed a bunch of changes for 3.4 and did some code review and bug fixing. It was nice to commit some of the mesh refactor patches that have been around for a while. I worked on a few mesh topology access nodes too.



I also made these two design tasks:
 * : Add a selection input to the store named attribute node
 * : Splitting the "Object Info" node, access to object original geometry

Changes / Features
 * Nodes: Add node group assets to search menus
 * Geometry Nodes: Split transfer attribute node
 * Mesh: Move selection flags to generic attributes ,
 * Mesh: Move edge crease out of MEdge ,
 * Mesh: Move sculpt face sets to a generic attribute ,
 * Mesh: Use cached looptris in draw cache extraction
 * Curves: Use early out when apapting domain of single value
 * Geometry Nodes: Add Self Object Node
 * Attributes: Allow calling "finish" on empty accessors
 * Attributes: Correct implementation of typed "write_only" method
 * : Geometry Nodes: Mesh topology access nodes
 * : Nodes: Use plain menus for geometry nodes add menu
 * : Curves: Support boolean attribute selection type, other simplifications
 * : Curves Sculpt: Comb brush performance tests (WIP)

Fixes
 * Fix: Invalid CustomData type map created for legacy mesh conversion
 * Fix T101249: Node groups don't show in node search
 * Fix: Assert calculating mesh triangulation
 * Fix: Missing DNA rename for recent mesh refactor ,
 * Fix: Crash with empty vertex group in mask modifier
 * Fix: BMesh to Mesh conversion does not create all necessary layers
 * Mesh: Avoid uninitialized values when converting BMesh to Mesh
 * Fix: Use correct node group for add node search
 * Fix: Add missing drag link search item for store named attribute node
 * Fix T101262: Crash in spreadsheet selection filter with empty domain
 * Fix T101208: Missing original index handling in extrude node
 * Fix T101188: Fluid modifier doesn't work
 * : Fix T101235: File with no mesh poly or loop layers crashes (option 2)
 * : Fix T101235: File with no mesh poly or loop layers crashes (option 1)

Cleanup
 * Cleanup: Remove unused data transfer function
 * Cleanup: Grammar fix in lazy function
 * Cleanup: Improve comment for curve component legacy curves
 * Cleanup: Improve consistency when nodes run without OpenVDB
 * Cleanup: Remove BKE_ prefix for local functions
 * Cleanup: Miscellaneous cleanup in distribute points in volume node
 * Cleanup: Use const arguments for node group poll function
 * Cleanup: Move versioning_300.c to C++
 * Cleanup: Move mesh_mapping.c to C++

Review
 * `Accepted, committed` : Geometry Nodes: Distribute Points in Volume
 * `Requested changes` : Geometry Nodes: New uv map based attribute transfer mode (WIP).
 * `Commented` : I18n: fix geometry nodes field tooltips
 * `Requested changes` : Alembic/USD: use geometry sets to import data
 * `Requested changes` : Alembic: import arbitrary attributes
 * `Accepted` : Fix T100846: Bump blender file min version for forward compatibility warning
 * `Accepted, committed` : Nodes: Fix GroupInput and GroupOutput showing in Add Menu
 * `Accepted` : Geometry Nodes: Lazy threading.
 * `Accepted` : Reuse input sockets when creating new node groups
 * `Accepted` : Fix race condition in memory freeing in edit mesh wrapper to mesh
 * `Accepted` : Curves editmode: show point selection
 * `Accepted` : Node Editor: Adjust node link curving
 * `Commented` : Geometry Node: Convert Curve Length Node
 * `Commented` : Hair Curves: make the "surface_uv_map" a searchable dropdown
 * `Commented` : UV editor: Improve Ui alignment in overlays panel
 * `Commented` : Fix T100141: Header Alignment of New Editors

Tracker
 * Investigated: 7
 * Confirmed: 3
 * Resolved: 2
 * Archived: 1

Next Week

I'll look into a bunch of high priority bugs that have come up recently, and work on adding assets to the node add menus.

September 12 - September 18
This week I looked into making sculpt mode hiding more consistent and found a couple other performance improvements there.



I also converted the last curve node to the new data-block. I could finally remove the old curve implementation. 8 months later or so!

Changes / Features
 * Curves: Improve sculpting performance by reducing allocations
 * Geometry: Avoid unnecessary initialization when resizing data arrays
 * Sculpt: Make storing mask and face set layers optional
 * Sculpt: Separate hide status from face sets, use generic attribute
 * Sculpt: Improve performance when initializing face sets
 * Curves: Port Curve to Points node to the new data-block
 * Curves: Remove CurveEval and old Spline types
 * Attributes: Validate some builtin attributes for untrusted inputs
 * Sculpt: Respect hiding when creating face sets from loose parts
 * Curves: Don't allow resolutions less than 1
 * Curves/PointCloud: Avoid quadratic cost for retrieving positions
 * Nodes: Avoid unnecessary sorting when selecting or moving nodes
 * Attributes: Add function to retrieve span without adding attribute
 * BLI: Add utility functions to generic spans
 * Mesh: Fix quadratic cost for accessing normals with RNA
 * : Mesh: Move positions to a generic attribute
 * : Nodes: Use plain menus for geometry nodes add menu (WIP)

Fixes
 * Fix: Mesh SoA format conversion skips versioning
 * Fix: Missing updates for multires sculpting
 * Fix: Node edge pan and remove on cancel doesn't work
 * Fix T101025: Cycles motion blur crash with changing point cloud size
 * Fix T101027: Sculpt tools don't respect visibility after recent commit
 * Fix: Multires crash after recent face set refactor
 * Fix T101013: Reordering materials broken with only one assigned
 * Fix: Crash after recent attributes commit
 * Fix T101031: Crash with Initialize Face Sets operator
 * Fix: Geometry nodes crash with undefined node
 * Fix: Merging mesh and non-empty BMesh creates "flag" attributes
 * Fix: Build error after previous cleanup commit
 * Fix: Resolve deprecation warning when copying polygon struct

Cleanup
 * Cleanup: Fix grammar in IndexRange header
 * Cleanup: Remove unused member variable in lazy function graph
 * Cleanup: Rename attribute required functions
 * Cleanup: Remove unused argument from modifier data mask callback
 * Cleanup: Use attribute API for curves functions
 * Sculpt: Move sculpt_face_set.c to C++
 * Cleanup: Comment formatting
 * Cleanup: Make format
 * Cleanup: Add missing licence headers

Review
 * `Requested changes` : Geometry Nodes: Control Point Neighbor Node
 * `Requested changes` : Geometry Node: Add Face Corner Info, Face Corner Loop nodes
 * `Accepted` : Geometry Nodes: New evaluation system.
 * `Accepted, committed` : Geometry Nodes: New Face Set Boundaries node
 * `Accepted, committed` : Geometry Nodes: Port the trim curve node to the new data-block
 * `Accepted, committed` : Fix T101137: Crash with Transform Node
 * `Accepted, committed` : BLI: Add generic utlity for gathering values with indices
 * `Requested changes` : Reuse input sockets when creating new node groups
 * `Accepted, committed` : Curves: Correct and improve Catmull Rom interpolation
 * `Requested changes` : Fix T100627: Rejection of recursive calculation of frame nodes.
 * `Commented` : Geometry Nodes: Lazy threading.
 * `Commented` : Alembic: import arbitrary attributes
 * `Commented` : Alembic/USD: use geometry sets to import data
 * `Commented` : Nodes: Add persistent identifier to nodes (WIP).
 * `Commented` : Hair Curves: make the "surface_uv_map" a searchable dropdown
 * `Accepted` : UI: Add Mix Node to color section of add node menu
 * `Accepted` : Fix: Make node position consistent when added through link drag search
 * `Accepted` : Fix: Prevent clipping of node drop shadow
 * `Requested changes` : Remove hidden socket links
 * `Commented` : Nodes: Add subtype selection to socket editing

Tracker
 * Investigated: 17
 * Confirmed: 1
 * Resolved: 3
 * Archived: 1

Next Week

Next week I'll try to finish some of the patches I've created recently, and hopefully commit the node editor assets in search menu patch. I'd also like to make progress on the mesh topology input nodes.

September 5 - September 11
This week I worked more on mesh data structure refactors, cleaning up the node editor, fixing bugs, and code review. I committed one change I've been working on for a couple months, removing custom data pointer usage from `Mesh`. It was great to finish that. I also committed the bevel weight part of the refactor, and made the same change for edge creases, and started on the `MVert -> float3` a bit on the weekend. I also made a bit of progress on the node editor assets project.

Changes / Features
 * Mesh: Remove redundant custom data pointers
 * Mesh: Avoid saving redundant generic material index attribute
 * Mesh: Move bevel weight out of MVert and MEdge
 * Subdiv: Avoid quadratic runtime for loose edges
 * : Geometry Nodes: Split transfer attribute node (WIP)
 * : Sculpt: Make storing mask and face set layers optional
 * : Mesh: Move edge crease out of MEdge

Fixes
 * Fix T100863, T100875: Vertex group reading broken for recent files
 * Fix: link drag search feature only works for geometry nodes groups
 * Fix T100974: Remesh operators reset mesh properties
 * Fix: Restore fix for empty attributes after recent commit
 * Fix: Spreadsheet row filters unimplemented for boolean type
 * Fix T100841: Creating a frame node with shortcut doesn't sort nodes
 * Fix T100760: No color attribute initialization when created by brush
 * Fix: Integer type in linear probing strategy
 * Fix T100903: Unfinished sentence in instance rotation node page
 * Geometry Nodes: Avoid relying on rounding in extrude tests
 * : Fix: Move mesh legacy conversions to out of reading code

Cleanup
 * Cleanup: Simplify BKE_mesh_nomain_to_mesh
 * Cleanup: Remove unused DerivedMesh functions
 * Cleanup: Use C++ methods to retrieve attribute accessors
 * Cleanup: Remove unused face customdata for merging meshes
 * Cleanup: Remove unnecessary node sorting, rename variables
 * Cleanup: Avoid using runtime node flag, use topology cache
 * Cleanup: Remove unused update custom data pointers in attribute API
 * Cleanup: Tweak naming for recently added mesh accessors
 * Cleanup: Remove redundant vertex duplication in extrude node
 * Cleanup: Use more specific function for deselecting all nodes
 * Cleanup: Move select all nodes code to operator
 * Cleanup: Remove unused function
 * Cleanup: Fix unused variable warnings
 * Cleanup: Unused variable, compiler warning
 * : Cleanup: Port multires baking low-res mesh from DerivedMesh to Mesh (WIP)

Review
 * `Commented` : Geometry Nodes: New evaluation system
 * `Accepted` : Fix T100822: Merging objects does not assign materials correctly
 * `Accepted` : Geometry Nodes: Distribute Points in Volume
 * `Accepted` : Curves Trim
 * `Accepted` : Fix T100747: Cannot add "String" attribute to mesh
 * `Committed` : Fix T100521: Node doesn't belong to frame when added through link drag search
 * `Commented` : BLI: Add new `blender::Pool` container
 * `Commented` : Remove hidden socket links
 * `Commented` : Custom Colors for Empty Objects
 * `Committed` : Fix T99141: Crash with edit mode and copy location constraint
 * `Accepted` : Fix T100796: Wrong tangents on bezier splines with duplicate points and handles.
 * `Commented` : BLI: New C++ BitVector data structure.

Tracker
 * Investigated: 14
 * Confirmed: 3
 * Resolved: 3
 * Needs Information: 1
 * Known Issue: 1
 * Archived: 1

Next Week

I'll start working on getting assets into the node editor add menu, and do more code review, bug fixing, and mesh refactoring.

August 29 - September 4
This week I worked a bit more on adding assets to the node search menus, worked on the mesh data structure refactors, including some improvements to the way new attributes are initialized (or aren't!). I also did a whole bunch of cleanup to the node editor in various places, and then the usual code review and bug fixing.

Changes / Features
 * Attributes: Improve custom data initialization options
 * Mesh: Move material indices to a generic attribute
 * Sculpt: Avoid creating mask and face set when remeshing
 * Mesh: Remove unnecessary copy in modifier stack
 * Mesh: Avoid redundant custom data layer initialization
 * Curves: Avoid unnecessarily initializing new positions layer
 * Cleanup: Use C++ attribute API
 * Attributes: Avoid unnecessarily initializing new attributes
 * Geometry Nodes: Use separate field context for each geometry type
 * Nodes: Use existing nodes span cache
 * : Nodes: Remove runtime socket location from DNA
 * : Node Editor: Avoid allocations for node socket tooltips
 * : Geometry: Avoid unnecessary initialization when resizing data arrays

Fixes
 * Fix: Broken build with OpenVDB turned off
 * Fix T99253: Missing face center dots with deform modifier cage option
 * Fix T100767: Geometry nodes viewer node placed incorrectly
 * Fix: Alphabetical order in duplicate data preferences panel
 * Fix: Ensure topology cache exists when drawing nodes
 * Fix T100768: Reverse curves skips handles of middle Bezier points ,
 * Fix: Incorrect vertex group layer "construct" callback
 * Fix: Use of deprecated field in legacy MFace conversion
 * Fix: Build error in Cycles with OpenVDB turned off
 * Fix: Potential name clash when adding rest position attribute
 * Fix build error after recent Metal GPU commit
 * Fix build error from missing include
 * Fix: Build error on windows
 * : Fix: Resolve deprecation warning when copying polygon struct

Cleanup
 * Cleanup: Replace recursive quadratic node link mute operation
 * Cleanup: Deduplicate node link intersection test
 * Cleanup: Remove misleading std::string reference binding
 * Cleanup: Refactor node add reroute operator
 * Cleanup: Use new node topology cache for sorting multi input sockets
 * Cleanup: Clarify multi-socket input sorting
 * Cleanup: Use const for node data in compositor
 * Cleanup: Split node link draw culling to separate function
 * Cleanup: Use const for custom data layers
 * Cleanup: Use references and const in node editor
 * Cleanup: Avoid using node socket location
 * Cleanup: Use C++ vector types in node editor
 * Cleanup: use more standard variable name for node sockets
 * Cleanup: Further split of node link Bezier calculation function
 * Cleanup: Remove redundant addition of attribute
 * Cleanup: Deduplicate node link points evaluation functions
 * Cleanup: Use separate variables for node socket locations
 * Cleanup: Remove unused point cloud function
 * Cleanup: Remove unnecessary struct keyword usage in node editor
 * Cleanup: Avoid using geometry component unnecessarily
 * Cleanup: Return early, ,
 * Cleanup: Remove unused struct
 * Cleanup: Remove duplicate declaration in GPU capabilities
 * Cleanup: Use standard variable name for curve points
 * : Cleanup: Simplify BKE_mesh_nomain_to_mesh

Review
 * `Requested changes` : Curves Trim
 * `Committed` : Fix T98968: Node reroute tool doesn't add to frames
 * `Committed` : Fix T99576: Guard against empty names when removing attributes
 * `Accepted` : Nodes UI: Visual tweaks to node links
 * `Requested changes` : Assets: Implement viewport drag and drop for geometry nodes
 * `Commented` : Function Node: Hash Value
 * `Commented` : Geometry Nodes: Add Name output to Object Info node
 * `Requested changes` : I18n: add a translation context to node sockets
 * `Requested changes` : Geometry Nodes: Distribute Points in Volume
 * `Requested changes` : Refresh UV editor window on change in subdiv surface geo node
 * `Commented` : DRWManager: New implementation.
 * `Requested changes` : BLI_array_utils::gather
 * `Accepted` : Fix T100687: Geometry Attribute Convert crashes in sculpt mode
 * `Commented` : Shrinkwrap smoothing
 * `Abandoned` : Fix T100768: Reverse curve does not swap handles for middle point
 * `Commented` : Cursor Tool: Add location / rotations props and reset button

Tracker
 * Investigated: 13
 * Resolved: 4
 * Known Issue: 1
 * Archived: 3

Next Week

Next week is more of the same basically. Though I hope to make some progress on the.

August 8 - August 28
The past few weeks I've been traveling and haven't been working full-time, so I gathered them all here. The work I've done has mostly been cleanups and refactors, and some code review. The mesh data structure refactors have come a long way though.

Changes / Features
 * Mesh: Move hide flags to generic attributes
 * Metaball: Evaluate metaball objects as mesh components
 * Curves: Avoid creating types array when unnecessary
 * CustomData: Add function to get name of default layer
 * : Mesh: Move material indices to a generic attribute
 * : Refactor: Move mesh selection flags to generic attributes
 * : Mesh: Move UV layers to generic attributes

Fixes
 * Fix T100494: Broken sculpt hide status undo/redo
 * Fix: Write hide status attributes for undo steps
 * Fix T100482: Face Set visibility reset after saving
 * Fix: Node editor context path for curves objects
 * Fix T99661: Use after free converting edit mode curve object to mesh
 * Fix: Compiler warning in macro after recent C++ conversion
 * Fix: Incorrect access of mesh hide layers
 * Fix: Broken mesh hide status RNA accessors
 * Fix: Use of uninitialized variable in recent commit
 * Fix T100308: Removing scene time node does not update relations

Cleanup
 * Cleanup: Deduplicate RNA mesh element index retrieval
 * Cleanup: Slightly improve virtual array implementation consistency
 * Cleanup: Remove redundant use of evaluated non-mesh objects
 * Cleanup: Fix const correctness in CustomData set name function
 * Cleanup: Move view layer array utils from macros to functions
 * Curve: Simplify legacy curve conversion to mesh
 * Cleanup: Move bmesh_query_uv.c to C++
 * Cleanup: Move paint.c to C++
 * Cleanup: Move subdiv_mesh.c to C++
 * Cleanup: Move draw_cache_impl_pointcloud.c to C++ ,
 * Cleanup: Move mball.c to C++
 * Cleanup: Move object_vgroup.c to C++
 * Cleanup: Move view3d_select.c to C++
 * Cleanup: Miscellaneous improvements to pointcloud draw cache
 * Cleanup: Fix typo in comment
 * Cleanup: Add function for creating object dupli with separate data
 * Cleanup: Add comments about deprecated flags
 * Cleanup: Fix outdated comments referring to DispList
 * Cleanup: Avoid using invalid attribute domain
 * Cleanup: Remove unused object batch cache API function
 * Cleanup: Use utility to write palette color list
 * Cleanup: Remove unused function
 * Cleanup: Fix outdated comment
 * : Cleanup: Remove outdated function for tagging batch caches dirty

Review
 * `Requested changes` : Curves Trim
 * `Requested changes` : Geometry Nodes: Add Smooth Attribute node
 * `Accepted` : Nodes: Move NodeTreeRef functionality into node runtime data.
 * `Requested changes` : Nodes: Add subtype selection to socket editing
 * `Commented` : Fix T100627: Rejection of recursive calculation of frame nodes.
 * `Requested changes` : Nodes UI: Visual tweaks to node links
 * `Commented` : BLI: GArray improve: first, last, index_range, fill
 * `Requested changes` : (WIP) Geometry Node: Curve Intersections
 * `Accepted` : Fix T94413: Keep new group input sockets hidden when group input node has hidden sockets
 * `Accepted` : Fix T100430: Restore bigger node socket snap hitbox
 * `Accepted` : Fix T100258: Divide spline total length to integer total length of curves
 * `Commented` : BLI_array_utils::gather
 * `Commented` : Cleanup: uvedit_*_select, replace BMEditMesh* with BMesh*
 * `Accepted` : Fix T99576: Guard against crash due to invalid names in BKE_id_attribute_remove
 * `Abandoned` : [WIP] Windowmanager: improve duplicate check of notifiers.

Tracker
 * Investigated: 7
 * Confirmed: 2
 * Resolved: 5
 * Archived: 1

Next Week

Determine 3.4 priorities, update patches, code review, and finishing the "assets in search menu" patch.

August 1 - August 7
This week was mostly dedicated to organization: finishing or closing old patches, cleaning up the workboard and old tasks. I also did a fair amount of cleanup commits when working in other areas.

I wrote the manual pages for the new geometry nodes in 3.3:, and updated the manual for curves sculpting too.

I also made two design/todo tasks. For the first I think I need to present a more complete proposal to Ton.
 * : New surface data-block
 * : 4.0: Remove mesh sculpt vertex colors and vertex colors API

Changes / Features
 * Geometry Nodes: Speed up reading attribute with different type
 * Nodes: Disable link drag search for deprecated nodes
 * Nodes: Remove node after link drag search cancel
 * : Attributes: Clarify and improve custom data initialization

Fixes
 * Fix T96810: Invalid sculpt normals after some operations
 * Fix T100143: RNA path information of Curves datablock incorrect
 * Fix T100168: Sculpt positions undo not working after recent commit
 * Fix: Incorrect field node deduplication for shortest path nodes
 * Fix: Missing translation in deform curves on surface node
 * Fix: Use evaluated materials in OBJ exporter
 * Fix: Typo in geometry node tooltip
 * Fix: Crash on instance on points node with empty mesh
 * Fix: Store named attribute node incorrect link drag search
 * Fix: Build error after recent commit
 * Fix: Avoid OBJ importer assert seting normals on mesh with no faces
 * Fix: Warning from incorrect use of macro

Cleanup
 * Cleanup: Remove unused sculpt and vertex color operators, ,
 * Cleanup: Remove unused function
 * Cleanup: Const in headers, standardize variable names
 * Cleanup: Remove outdated code for mesh normals
 * Cleanup: Simplify functions for adding and removing color attributes
 * Cleanup: Spelling, remove double negative
 * Cleanup: Simplify arguments to sculpt draw functions
 * Cleanup: simplify function for adding node to editor
 * Cleanup: Reduce indentation
 * Cleanup: Remove outdated comment
 * Cleanup: Remove incorrect comment
 * Cleanup: Use generic utility to retrieve attributes to transfer
 * Cleanup: Remove unused function
 * Cleanup: Simplify const cast in virtual array construction
 * Cleanup: Use const arguments in definition, add helper variable
 * Cleanup: Fix doxygen section for custom data type
 * : Cleanup: Make UV draw extraction more generic (WIP)

Review
 * `Requested changes` : Geometry Nodes: Add Smooth Attribute node
 * `Accepted, Committed` : Enhanced extrude tool for NURBS surfaces
 * `Requested changes` : Curves Trim
 * `Requested changes` : Convert Color Attribute operator
 * `Accepted, Committed` : BKE_attribute_math: DefaultMixer empowerment
 * `Accepted` : Node: Mix node
 * `Commented` : Mikktspace: Optimized port to C++
 * `Commented` : Fix T99460: Allow creation new datablocks from evaluated
 * `Commented` : Adding Playback and Frame Range controls to the Graph Editor, NLA Editor, Dope Sheet, and Video Sequencer

Tracker
 * Reported : Assert when opening sculpting template ("SRDefault.003" in name map but not in Main)
 * Investigated: 15
 * Confirmed: 1
 * Resolved: 3
 * Duplicate: 1
 * Known Issue: 3
 * Archived: 6

Next Week

Probably more of the same. I'll be taking some time off at the end of the week though.

July 25 - July 31
This week I worked on some bug fixing, code review, and did the initial patch for adding node group assets to the node editor. I made a few design tasks as well:
 * : Remove object-linked materials
 * : Splitting the "Attribute Transfer" node
 * : Add an "Exists" boolean to the named attribute input node

One bug that took a while to investigate was a problem with mesh sculpt mode where normals weren't calculated and normalized properly on the boundaries between inconsistently tagged PBVH nodes. The fix ended up being nice in the end though.

Changes / Features
 * Refactor: Extract color attributes as generic attributes
 * Geometry Nodes: Rename "Field on Domain" to "Interpolate Domain"
 * Curves: Avoid virtual function overhead when finding selected curves
 * Curves: Bring back parallel copying of curve and point attributes
 * Curves: Unify poll functions, add message with no surface
 * Nodes: Allow using escape key to exit node resizing
 * Geometry Nodes: Hide value button for field at index node
 * Geometry Nodes: Implement link drag search for two nodes
 * : Nodes: Add node group assets to search menus
 * : Geometry Nodes: Use separate field contexts for different geometry types
 * : Mesh: Use cached looptris in draw cache extraction
 * : Curves: Avoid creating attribute when unnecessary

Fixes
 * Fix T99761: Curves sculpt mode crash with empty curves
 * Fix: Grammar mistake in info message
 * Fix: Fix attribute writer debug warnings in terminal
 * Fix: Assert in resample curve node with single point curve
 * : Fix T96810: Invalid sculpt normals after some operations
 * : Curves: Validate data when writing to some builtin attributes

Cleanup
 * Cleanup: Move five interface files to C++
 * Cleanup: Move interface_region_tooltip.c and header to C++
 * Cleanup: Remove mesh edge "tmp tag"
 * Cleanup: Use new IDProperty creation API for geometry ndoes modifier
 * Cleanup: Remove unused node "add and link node" operator
 * Cleanup: Use const context argument for UIList callbacks
 * Cleanup: Nodes: Store node group idname in tree type
 * Cleanup: Clang tidy
 * Cleanup: Move wm_dragdrop.c to C++
 * Cleanup: Move mesh_tessellate.c to C++
 * Cleanup: Use LISTBASE_FOREACH macro
 * Cleanup: Make BKE_idprop.h self sufficient

Review
 * `Accepted, committed` : Add tooltips to the geomerty node add menu
 * `Requested changes` : Curve sculpting: Collision constraint solver.
 * `Commented` : BMesh optimization: support directly iterating over mempool chunks
 * `Accepted` : Geometry Nodes: Shortest Paths nodes
 * `Accepted` : Curves: Add CurvesGeometry.radii
 * `Commented` : Mikktspace: Optimized port to C++
 * `Accepted` : UI: Scroll sidebar category tabs
 * `Accepted` : Geometry Nodes: Improve handling of zero-sized attributes.
 * `Accepted` : Fix: missing evaluated offsets
 * `Closed` : Allow joining of one area into part of another

Tracker
 * Investigated: 13
 * Resolved: 4
 * Duplicate: 2
 * Archived: 4

Next Week

Next week I'll finish up the changes to get assets into the node editor search menus, and maybe start changes to the menu.

July 18 - July 24
This week I did some refactoring to attributes and custom data access, looked into bugs, started looking into refactoring the add node search.

Changes / Features
 * Geometry Nodes: Improve UV Sphere primive performance
 * Curves: Port fillet node to the new data-block
 * Spreadsheet: Implement selection filter for curves sculpt mode
 * Attributes: Use new API for C-API functions
 * Curves: Remove use of CurveEval in sculpt brushes
 * Geometry Nodes: Port sample curves node to new data-block
 * RNA: Don't allocate empty char pointer properties
 * Point Cloud: Remove redundant custom data pointers
 * Curves: Remove redundant custom data pointers
 * Geometry Nodes: Copy parameters when copying a curves data-block
 * Curves: Hide snapping menu in curves sculpt mode
 * : Mesh: Remove redundant custom data pointers (WIP)
 * : Geometry Nodes: Use separate field contexts for different geometry types

Fixes
 * Fix: Removing attributes from UI invalidates caches
 * Fix T99878: Deleting curves or points removes anonymous attributes
 * Fix T99873: Use evaluated vertex groups in armature modifier
 * Fix T99835: Incorrect title case for two node names
 * Fix T99873: Store named attribute node cannot write to vertex groups
 * Fix T99884: Crash when converting to old curve type
 * Fix T99854: Crash converting legacy NURBS curves to new type

Tests
 * Geometry Nodes: Add test for T99873
 * Geometry Nodes: Add test for sample curves node
 * Geometry Nodes: Add tests for fillet curves node

Cleanup
 * Cleanup: Use r_ prefix for boolean return parameters
 * Cleanups: Small changes to armature deform
 * Cleanup: Rename length parameterization interpolation function ,
 * Cleanup: Remove debug print in test
 * Cleanup: Access attributes with new API instead of geometry components
 * Cleanup: Use generic utility for copying compressed attribute
 * Cleanup: Remove unnecessary handling of normals for fluid colliders
 * Cleanup: Combine geometry null checks in if statements
 * Cleanup: Remove compile option for curves object
 * Cleanup: Add comment for geometry nodes lazyness
 * Cleanup: Remove unused function

Review
 * `Requested changes, accepted` : Curves: Sculpt on deformed curves.
 * `Requested changes, committed` : Add tooltips to the geomerty node add menu
 * `Requested changes` {{{Phab|D13749}}: Node: Mix node
 * `Requested changes` : Geometry Nodes: Shortest Paths nodes
 * `Requested changes` : Curves Trim
 * `Accepted` : BKE_attribute_math: DefaultMixer empowerment
 * `Requested changes` : Geometry Nodes: Distribute Points in Volume
 * `Commented` : Parallelize BMesh lookup table generation (BM_mesh_elem_table_ensure)
 * `Commented` : Geometry Nodes: UV sphere: Change pos calc and parallelize
 * `Commented` : Expose Face Sets In Python API
 * `Accepted, committed` : Fix T99583: Missing update for interpolation option in particle edit mode.
 * `Closed` : Geometry Nodes: Finish off Distribute Points in Volume
 * `Closed` : Geometry Nodes: fix Store Named Attribute for vertex groups.

Tracker
 * Investigated: 10
 * Confirmed: 1
 * Resolved: 4
 * Duplicate: 1
 * Known Issue: 1
 * Archived: 1

Next Week

Probably mostly bug fixing, but hopefully making progress on various refactors: the custom data pointer removal, the add menu, and the field contexts.

July 4 - July 10
This week the main focus was moving the new curves object out of experimental. We had to make some compromises to do that in time for 3.3 (realistically there isn't that much we can still fit into that release), but I think the result is still pretty nice. Some other nice things like the refactored attribute API and the curves sculpt mode selection overlay landed this week too. I also joined the sculpt module meeting to talk about operators to store and load masks/selections as attributes.



Lately I've been focusing on finishing up existing smaller projects. I updated my two current mesh data structure refactors ( and ), updated my design about how to deal with volume grids as attributes, sifted through all the `char *` members in DNA, and did some more cleanup.

Changes / Features
 * Curves: Add sculpt selection overlay
 * Curves: Port subdivide node to the new data-block
 * UI: Adjust and fix shader node descriptions
 * Curves: Move type conversion to the geometry module
 * BLI: Use simpler sliced generic virtual arrays when possible
 * Geometry Nodes: Use alphabetical order for UV nodes in add menu
 * Curves: Expose function to calculate vector handles
 * : Geometry Nodes: Copy parameters when copying a curves data-block
 * : Spreadsheet: Implement selection filter for curves sculpt mode

Fixes
 * Fix T99191: Boolean modifier creates invalid material indices ,
 * Fix: Spreadsheet does not display original curves data
 * Fix T99464: Curves sculpt add 3D brush symmetry broken
 * Fix T99284: Undefined values output from UV nodes

Cleanup
 * Cleanup: Move mesh legacy conversion to a separate file
 * Cleanup: Use generic index mask utility
 * Cleanup: Use C++ style of avoiding unused variable warnings
 * Cleanup: Use std::move for geometry set
 * Cleanup: Improve variable name
 * Cleanup: Correct comment with spreadsheet enum type
 * Cleanup: Remove redundant filtering of legacy normal attribute
 * Cleanup: Remove unused variable ,
 * Cleanup: Remove unused function

Review
 * `Requested changes, accepted` : BKE: New geometry attribute API
 * `Commented, accepted` : Curves: Deform curves based on surface node.
 * `Commented` : Functions: More clearly separate fields from multi-functions.
 * `Accepted` : Curves: use consistent default radius for Cycles, Eevee, Set Curve Radius node
 * `Accepted` : Hair Curves: The new curves object is now available
 * `Commented` : Fix T93062: Check for empty name when editing custom property
 * `Commented` : Split the MLoopUV struct to 3 bool attributes and a float2 attribute
 * `Accepted` : Draw: Curve outline drawing in object mode.
 * `Accepted, committed` : Cleanup: Fix compiler warnings
 * `Accepted, committed` : Fix: Bke Curve geometry test: Incorrect curve construction
 * `Commented` : Custom Colors for Empty Objects
 * `Commented` : Configurable rotation angle increments

Tracker
 * Investigated: 9
 * Confirmed: 2
 * Resolved: 3
 * Duplicate: 1
 * Archived: 1

Next Week

I'm on vacation next week.

June 27 - July 3
This week I worked on code review, bug fixing, and later in the week, worked on removing `CurveEval`. I'm almost finished with that project.

I made one design task this week, I'll probably discuss it with the sculpt module next week:
 * : Operators to save curve or point selection as an attribute

Changes / Features
 * Geometry Nodes: Only calculate mesh to volume bounds when necessary
 * Curves: Avoid initializing offsets when first allocated
 * Curves: Adjust "for each curve by type" utility
 * : Curves: Port subdivide node to the new data-block
 * : Curves: Remove use of CurveEval in sculpt brushes
 * : Curves: Port fillet node to the new data-block (WIP)
 * : Curves: Move type conversion to the geometry module

Fixes
 * Fix T99171: Crash in mesh vertices positions RNA update function
 * Fix T99309: Duplicate elements deletes instance attributes
 * Fix: Flush mode to evaluated object when exiting curves sculpt mode
 * Fix: Incorrectly sized curves created in set conversion node
 * Fix: Build error with unity builds off after recent cleanup
 * Fix: Correct attribute names in resample curves code
 * Fix: Use distance unit for points node radius input

Cleanup
 * Cleanup: Rename curve segment count function
 * Cleanup: Simplify logic building in length parameterization
 * Cleanup: Avoid assigning constructed VArray to reference
 * Cleanup: Add assert for unsupported legacy curve type
 * Cleanup: Remove unnecessary includes from geometry nodes header
 * Cleanup: Remove outdated comments
 * Cleanup: Clang tidy, unused variable warning
 * Cleanup: Add assert for customdata realloc size
 * Cleanup: Remove duplicate include

Review
 * `Accepted` : Curves: Prototypes for various features surrounding the new curves object.
 * `Accepted` : BLI: Refactor length parameterization.
 * `Commented` : Curves Trim
 * `Accepted` : Spreadsheet: display byte colors as scene linear floats
 * `Committed` : Geometry Nodes: Add Mesh To Volume Node
 * `Commented` : Split the MLoopUV struct to 3 bool attributes and a float2 attribute.
 * `Committed` : Geometry Nodes: Unwrap and Pack Islands Nodes
 * `Committed` : Attributes: Use attribute renaming function for generic mesh layers
 * `Requested changes, committed` : Fix T99316: Crash when no font is in String to Curves in geometry nodes
 * `Commented` : Draw: Curve outline drawing in object mode.
 * `Accepted` : Add "Use Limit Surface" option to subdivision surface geometry node
 * `Commented` : Weight & Vertex Paint: always respect edit mode hiding on faces.

Tracker
 * Reported : Length parameterization failure case
 * Investigated: 15
 * Confirmed: 2
 * Resolved: 4
 * Duplicate: 1
 * Known Issue: 1

Next Week

Next week we'll be trying to finish up whatever is necessary to turn on the new hair system outside of experimental in master.

June 20 - June 25
This was another shorter week due mostly to traveling and getting a bit sick earlier in the week. Things are basically back to normal though.

I spent a fair amount of the week fixing some bugs that came up in 3.2, mostly around the color attributes changes. I also did some code review and and finished up some older local changes.

Changes / Features
 * Geometry Nodes: Field on Domain Node
 * Curves: Skip CurveEval in legacy curve conversion
 * Curves: Port string to curves node to the new data-block
 * Geometry Nodes: Speed up Separate color node in RGB mode
 * Geometry Nodes: Optimize selection for virtual array input
 * Mesh: Add an explicit "positions changed" function

Fixes
 * Fix T98975: Broken vertex paint mode operators
 * Fix T98960: Baking to active color attribute uses wrong layer
 * Fix T98956: Crash removing some builtin attributes
 * Fix T98949: Deleting vertex group in geometry nodes affects others
 * Fix: Incorrect dirty normal tag after mesh translation
 * Fix: Remove broken vertex paint "fast update" check z
 * Fix: Memory leak writing to builtin attribute with wrong type

Cleanup
 * Cleanup: Remove unnecessary includes
 * Cleanup: Move paint_vertex_color_ops.c to C++
 * Cleanup: Remove unused argument
 * Cleanup: Make function static
 * Cleanup: Remove unused array in vertex paint code
 * Cleanup: Use const arguments
 * Cleanup: Clang tidy ,
 * Cleanup: Grammar in comments
 * Cleanup: Remove unused argument
 * Cleanup: Grammar: a vs an

Review
 * `Requested changes` : Curves Trim
 * `Requested changes` : Curves: Prototypes for various features surrounding the new curves object
 * `Requested changes` : Split the MLoopUV struct to 3 bool attributes and a float2 attribute
 * `Requested changes` : Alembic: import arbitrary attributes
 * `Accepted` : Geometry Nodes: Points Node
 * `Accepted` : Geometry Nodes: Unwrap and Pack Islands Nodes
 * `Requested changes, accepted` : T86838 Geometry Nodes: Add Mesh To Volume Node
 * `Accepted` : BLI: Improve check for common virtual array implementations.
 * `Committed` : Spreadsheet: Support operations for filtering colors
 * `Committed` : Fixed selection indication for virtual socket on nodes
 * `Accepted` : Fix T99130: Spline factor gets messed up if one hair is too short
 * `Commented` : Color Attribute: Add convert color attribute operation
 * `Accepted` : Fix T94969: Crash. Volume to mesh with 0 amount of voxels
 * `Abandoned` : Modification of The node "Extrude Mesh" to include the ability to extrude a Conic shape
 * `Abandoned` : Geometry Nodes: Include Separate Color optimization from Hans

Tracker
 * Investigated: 14
 * Confirmed: 1
 * Resolved: 5
 * Duplicate: 1
 * Archived: 6

Next Week

I think I'll be able to finish porting almost every node to the new type next week. Maybe some other things will come up though.

June 13 - June 19
This week was a bit light in terms of time, and I didn't accomplish too much. But I did get a fair amount of cleanup done, mostly in attribute extraction in the draw module. I'm happy with that change anyway.

I figured out some of the boilerplate for drawing the sculpt selection for curves, nothing visual yet though.

I also made a design task for a "Field on Domain" building block node:

Changes / Features
 * Attributes: Adjustments to duplicate attribute API function
 * Attributes: Add null check in color attribute duplicate operator
 * : Refactor: Extract color attributes as generic attributes

Fixes
 * Fix: Don't allow duplicate color attribute operator in edit mode

Cleanup
 * Cleanup: Remove unused argument, unnecessary struct keyword
 * Cleanup: Remove unnecessary switch statement
 * Cleanup: Always store attribute name in attribute request
 * Cleanup: Simplify syntax in curves draw cache file
 * Cleanup: Remove redundant doxygen section
 * Cleanup: Miscellaneous improvements to draw attribute extraction
 * Cleanup: Use more specific includes for grease pencil modifiers
 * Cleanup: Variable name style in STL importer
 * Cleanup: Snake case for variable name
 * Cleanup: Fix const correctness of attribute search function
 * : Cleanup: Simplify arguments to sculpt draw functions

Review
 * `Accepted` : Geometry Nodes: Volume Cube node
 * `Requested changes, accepted` : Geometry Nodes: Points Node
 * `Requested changes, accepted` : Geometry Nodes: add 'Intersecting Edges' output for boolean node
 * `Requested changes, accepted` : Curves: Refactor add brush
 * `Requested changes` : Geometry Nodes: Add Attribute Smooth
 * `Commented` : Nodes UI: Visual tweaks to node links
 * `Accepted` : Spreadsheet: Support operations for filtering colors
 * `Commented` : Fix T98813: crash with GPU subdiv in edit mode and instance objects
 * `Accepted` : UI: Custom Properties - Rename properties to remove "Use/Is"

Tracker
 * Investigated: 7
 * Confirmed: 1
 * Resolved: 1
 * Archived: 2

Next Week

Next week I'll be back in the US. Apart from taking some time to get things settled there, I'll be working on basically the same things I suppose, maybe with a bit of "geometry nodes as an operator" sprinkled in. But the main goal is still getting selection drawing figured out.

June 6 - June 10
This was my last week in Amsterdam. I mostly spend time on code review, moving some nodes to the new curves type, and preparing a presentation about the current state of the hair project, which should become a blog post relatively soon. I also did some fixing and cleanup in the attribute C API.

Changes / Features
 * Curves: Port set type node to new data-block
 * Curves: Port delete geometry node to the new curves type
 * Attributes: Use names instead of layers for some functions
 * CustomData: Add function to free a named layer
 * : Mesh: Simplify access of active/default color attribute (WIP)

Fixes
 * Fix: Incorrect curves and pointcloud bounding boxes
 * Fix: Incorrect logic in attribute search function
 * Fix: Heap buffer overflow in new curves set type node
 * Fix: Crash in selection paint brush with empty curves
 * Fix: Missing include

Cleanup
 * Cleanup: Use const pointers in attribute API
 * Cleanup: Use const variables/pointers
 * Cleanup: Remove unnecessary namespace specification
 * Cleanup: Clang tidy
 * Cleanup: Correct comments

Review
 * `Requested changes` : Geometry Nodes: add 'New Edges' output for boolean node
 * `Commented` : OBJ: vertex colors support in importer and exporter
 * `Commented` : Try to introduce a slider widget for sculpt mesh filter
 * `Accepted` : Fix T98727: Dynamic Paint does not update normals
 * `Requested changes` : Geometry Nodes: Add Instance Dimensions Input Node
 * `Accepted` : Make BKE_id_attribute_rename generate unique name cross domain
 * `Committed` : Nodes: Show node description in Node editor
 * `Accepted` : Geometry Nodes: Instance Rotation Node
 * `Accepted` : Geometry Nodes: Add Instance Scale Input Node
 * `Commented` : Geometry Nodes: Unwrap and Pack Islands Nodes
 * `Commented` : Default "Selected Only" to True When Exporting Objects
 * `Abandoned` : Adds specific Icons per force to the outliner
 * `Accepted` : Fix T98624: Curve Pen NURBS extrusion creates duplicates
 * `Accepted` : Fix for Assert Failure in Duplicate Elements

Tracker
 * Investigated: 8
 * Needs Information: 2
 * Archived: 5

Next Week

Next week I'll be visiting Berlin. I'll also try to make progress on the curves sculpt selection drawing task.

May 30 - June 6
This week was full of lots of code review, cleanup, and bug fixes. We also had a geometry nodes sub-module meeting on Wednesday (meeting notes here), and had design discussions about curves sculpt mode, and some initial discussions about how we should progress with the development of simulations.

I also committed the curves sculpt mode selection patch I've been working on for a bit and worked a bit more on porting nodes to the new curves type.

I was also involved in various design tasks, including one about enum names, more conversation about my mesh SoA refactor, and another about various socket and node names. I also closed the task for the "mesh screw node", and created two tasks:
 * : Writing to 8 bit integer "enum" attributes in geometry nodes
 * : Path animation and the new curves type

Changes / Features
 * Curves: Add soft selection in sculpt mode
 * Curves: Port bounding box node to the new curves type
 * Geometry Nodes: Use fields for delete geometry inversion
 * Mesh: Only check dirty normals flag of current domain
 * Attributes: Hide internal UI attributes and disallow procedural access
 * Curves: Add surface UV map name property
 * Curves: Avoid optimization to avoid storing selection for now
 * : WM: Speed up processing of duplicate notifiers
 * : Curves: Make preserving length in the comb brush optional
 * : Geometry Nodes: Slightly optimize selection for virtual array input

Fixes
 * Fix: Curves sculpt mode keymaps missing in preferences
 * Curves: Fix overallocation for curve attributes when deleting curves
 * Fix T98403: Crash applying modifiers on non-mesh objects
 * Fix T98546: Crash with multires bake and zero levels
 * Fix: Build error after merge from release branch
 * Fix T98556: Crash with extrude node in edit mode
 * : Fix: Realloc copies too much from previous allocation

Cleanup
 * Cleanup: Move remaining mesh draw code to C++
 * Cleanup: Move wm_event_system.c to C++
 * Cleanup: Move lib_override.c to C++
 * Cleanup: Move attribute.c to C++
 * Cleanup: Simplify dependencies for GMP math header
 * Cleanup: Comments and formatting in mesh extract headers
 * Cleanup: Remove unused BKE_spline.hh includes
 * Cleanup: Improve const correctness of ID functions
 * Cleanup: Move attribute domain count out of enum
 * Cleanup: Use shorter variable name
 * Cleanup: Use const for retrieved custom data layers
 * Cleanup: Use const, make format
 * Cleanup: Simplify curves toolbar drawing logic
 * Cleanup: Split large block of versioning code to separate function
 * Cleanup: Use const pointers
 * Cleanup: Clang tidy
 * Cleanup: Remove unnecessary struct keywords
 * Cleanup: Remove outdated comment
 * Cleanup: Tweak geometry component comments
 * : Cleanup: Remove unused sculpt vertex color functions and operators

Review
 * `Requested changes, accepted` : Native STL Importer
 * `Requested changes` : Geometry Nodes: Add Instance Dimensions Input Node
 * `Accepted` : Fixed selection indication for virtual socket on nodes
 * `Accepted` : Curves: Use uv coordinates to attach curves to mesh.
 * `Commented` : Object: Speed up duplication of large selections by doing fewer collection syncs
 * `Requested changes` : Docs: Add Curve Pen Documentation
 * `Accepted` : Spreadsheet Editor: Support int 8 attribute
 * `Commented` : Geometry Nodes: Unwrap and Pack Islands Nodes
 * `Committed` : Geometry Nodes: Show supported types in geo socket tooltip.
 * `Accepted` : Functions: Speedup preparing multi-function parameters.
 * `Accepted` : Refactor: Add a single place to do everything needed on layer renames
 * `Accepted` : Fix T98501: Setting node socket default value is very slow.
 * `Accepted` : Fix T98454: Subdivision doesn't propagate int attributes.
 * `Accepted` : Fix T98500: Wrong selection in Duplicate Points
 * `Committed` : Geometry Nodes: Don't allow UI attributes as modifier field inputs
 * `Accepted` : Fix T98520: Sculpt operators can unintentionally clear multires mask
 * `Accepted` : Fix T98624: Curve Pen NURBS extrusion creates duplicates
 * `Abandoned` : Adds specific Icons per force to the outliner
 * `Commented` : Geometry Node: Changing the tab of Input nodes
 * `Accepted` : Geometry Nodes: Add Instance Scale Input Node
 * `Accepted` : Fix for Assert Failure in Duplicate Elements
 * `Committed` : Cleanup: fix source typos (may break API)
 * `Committed` : UI: Update deep grey community theme
 * `Committed` : UI: Update Minimal Dark Community theme
 * `Accepted` : Nodes: Add separately allocated run-time data for bNodeTree
 * `Accepted` : Nodes: Add separately allocated runtime data for nodes and sockets
 * `Accepted` : Fix T98536: geometry nodes wrong selection on duplicate edges
 * `Requested changes` : Geometry Nodes: Add selection outputs to Curve to Mesh node
 * `Accepted` : Geometry Nodes: Instance Rotation Node
 * `Commented` : Refactor: Snap-related. Clarified attribute names and refactored #defines into enums
 * `Commented` : T97706: Adds operator to duplicate the active color attribute layer

Tracker
 * Investigated: 12
 * Duplicate: 1
 * Confirmed: 1
 * Resolved: 2
 * Archived: 3

Next Week

Next week I'll try to get the selection drawing for curves working as an overlay. Since I don't know how much work that will be I won't plan too much more besides the usual bug fixing and code review.

May 16 - May 22
This week I started by doing a bunch of documentation/manual work from the backlog, mainly for 3.2 features: ,

I also focused on finishing up the selection brush and related tools for curves sculpt mode. It should be mainly ready here:. We also spent time discussing/planning/reviewing render engine support for the curves data-block:.

Other than that, I spent time on bug fixing, plenty of planning, and some miscellaneous work on curves sculpt mode.

Changes / Features
 * Curves: Support pressure in sculpt brushes
 * Curves: Use only current brush location for delete brush
 * : Curves: Add float selection in sculpt mode

Bug Fixes
 * Fix T96810: Bitmap race condition in PBVH normal calculation
 * Fix T98237: Double free with curve object conversion to mesh
 * Fix T98266: Crash with empty mesh boolean node
 * Fix: Node editor "Group" panel displays for embedded node trees
 * Fix: Copy and paste error in curves RNA
 * Geometry Nodes: Fix issue with flip_faces test
 * : Fix: Sample pressure properly for 3D curves sculpt brushes
 * : Fix T98101: Handle single point curves in delete brush

Cleanup
 * Cleanup: Simplify loop syntax for curve points ,
 * Cleanup: Use const arguments ,
 * Cleanup: Remove unused function
 * Cleanup: Deduplicate Alembic procedural bounding box mesh creation
 * Cleanup: Remove redundant function
 * Cleanup: Use const in curves sculpt code
 * Cleanup: Decrease variable scope
 * Cleanup: Remove unnecessary indentation
 * Cleanup: Order return arguments last
 * : Cleanup: Simplify custom data file writing process

Review
 * `Requested changes` : EEVEE/Workbench: support Curves attributes rendering
 * `Accepted` : Curves: Draw legacy hair particle system as curves object. (WIP)
 * `Commented` : Geometry Nodes: Unwrap and Pack Islands Nodes
 * `Commented` : Functions: Speedup preparing multi-function parameters
 * `Accepted` : Improve check for whether a node tree references an animated Image.
 * `Accepted` : Fix T98231: missing updates when material output is in group
 * `Accepted` : Geometry Nodes: Include Separate Color optimization from Hans
 * `Accepted` : Manual: Rename Max Width in "String to Curves"-node
 * `Commented` : BLI: Use no_unique_address attribute.

Tracker
 * Investigated: 8
 * Confirmed: 2
 * Resolved: 2
 * Archived: 2

Next Week

Next week is mostly vacation for me, I'm taking the time to explore the Amsterdam area.

May 9 - May 15
This week I did general work in the curves/hair area, especially the sculpt mode. The main thing I finished was some UI changes I did some work adjusting the UI layouts in the brush header and tool settings, but I also mostly finished a patch to add selection and masking (which at this point is mostly missing drawing in the viewport). We also made some progress on that front by solidifying the plan for drawing the old hair particle system with the new curves object.

We also ran into some design difficulties with how to attach curves to the surface mesh, but I think the result of that will end up in a simpler system actually.





Changes / Features
 * Curves: Adjust sculpt mode UI layouts
 * Curves: Add disabled message for add empty hair operator
 * Refactor: Move resample curves code to the geometry module
 * BLI: Avoid invoking tbb for small parallel_reduce calls
 * : Curves: Add float selection in sculpt mode
 * : Edit Mesh: Parallelize bounding box calculation in edit mode

Bug Fixes
 * Fix: Spline parameter node broken for Catmull Rom curves
 * Fix T98056: Screw modifier crash with normal calculation and merging
 * Fix: Crash with empty curves add interpolate points
 * Fix: Hide empty panel in curves sculpt mode tool settings
 * Fix: Missing curves type count cache update in add brush
 * Fix T97853: Crash with edit mode X-ray and subdivision

Cleanup
 * Cleanup: Simplify loop syntax, decrease variable scope
 * Cleanup: Remove includes from DerivedMesh header
 * Cleanup: Move three mesh editors files to C++ ,
 * Cleanup: Simplify loop syntax, make function static
 * Cleanup: Clang tidy
 * Cleanup: Fix range loop construct warning
 * Cleanup: Use single quotes for Python enum string
 * Cleanup: Move mesh primitive cube to the geometry module
 * Cleanup: Return early
 * Cleanup: Remove incorrect statement after recent refactor

Review
 * `Accepted` : Geometry Nodes: String to Curves rename Max Width
 * `Accepted` : T97706: Adds operator to duplicate the active color attribute layer
 * `Committed` : Fix: paint slot material assignment issues
 * `Commented` : Nodes Editor: Draw lines across the center of the grid
 * `Requested changes` : Spreadsheet: Support showing enum value strings instead of integers.
 * `Requested changes` : Color Attribute: Add convert color attribute operation
 * `Accepted` : Curves: Add operator to convert hair particle system to new curves object.
 * `Commented` : Add Option To Skip Temporary Layers to BKE_id_attributes_length and CustomData_number_of_layers_typemask
 * `Committed` : Curves: 'Interpolate Point Count' are missing in 'Brush Settings'.
 * `Accepted` : Fix T97761: Incorrect mixing of integers.
 * `Committed` : Fix: compiler warnings due to recent patch

Tracker
 * Investigated: 20
 * Confirmed: 6
 * Resolved: 3
 * Archived: 3
 * Known Issue: 5

Next Week

Hopefully I'll finish up the patch to add selection in curves sculpt mode so that it can be committed and finish up a few of the other pending patches in the curves area. I'd also like to make a bit of tangible progress on the mesh struct of arrays refactor.

May 2 - May 6
This week was filled with planning, work on curves sculpt mode, and some geometry nodes curve development. From looking at the list below, apparently I got to a lot of patch review too.

Changes / Features
 * Curves: Optimize filling all curves with a single type
 * Curves: Use copied original data for invalid NURBS curves
 * Geometry Nodes: Improve performance of mesh to points node
 * Curves: Add method to find indices for curve type in a selection
 * : Curves: Expose resample operator in sculpt mode
 * : Curves: Port set type node to new data-block (WIP)

Bug Fixes
 * Fix T93272: Material index mapping missing for mesh boolean node
 * Fix T97831: Curve to mesh node can create invalid wire mesh
 * Fix T97718: Crash using "Text on Curve"
 * Fix: Handle default better in curves type count cache
 * Cleanup: Avoid asan overflow warning for RNG seed
 * : Fix T97853: Crash with edit mode X-ray and subdivision

Cleanup
 * Cleanup: Remove unnecessary logic for resample curves node
 * Cleanup: Rename field input class name
 * Cleanup: Move color attribute enums to be reusable
 * Refactor: Use boolean array for curves delete brush
 * Cleanup: Further clarification and renaming of curve field inputs
 * Cleanup: Move curve length field input to blenkernel
 * Cleanup: Add comment about mininum curve length
 * Cleanup: Adjust variable names, miscellaneous changes

Review
 * `Requested changes` : UI: Add tool-tips to shader node sockets
 * `Accepted` : Curves: Support symmetry in curves sculpting brushes.
 * `Accepted` : Geometry Nodes: Show supported types in geo socket tooltip.
 * `Commented` : Curves: Interpolate number of control points for new curves from neighboring curves. (WIP)
 * `Committed` : Geometry/Compositor/Shader/Texture Nodes: Add general Combine/Separate Color nodes.
 * `Accepted` : Fix: paint slot material assignment issues
 * `Accepted` : Subdivision node: add input for vertex creases
 * `Commented` : PoC: Allow shrinkwrap constraint to target curves
 * `Accepted` : Curves: Convert legacy curves to new curves object
 * `Accepted` : UI: Add color attribute create to canvas selector
 * `Commented` : Auto-save improvements.
 * `Accepted` : Fix T97375: Changing node tree from Python is very slow.
 * `Accepted` : Curves: Control number of control points in new curves.
 * `Requested changes` : Add color attributes option to Convert Attributes operation
 * `Accepted` : Curves: Use old Add > Curve menu for new curves object.
 * `Commented` : Workaround T81065: Merge UV's when applying modifiers
 * `Accepted` : Outliner: add icons for nodegroups
 * `Accepted` : BPY types: add default Geometry Node poll function
 * `Accepted` : Curves: Add second experimental option for new curves tools.
 * `Accepted` : UI: Expand the Snap Curves to Surface operator
 * `Closed` : Geometry Nodes: Add HSVA separate and combine nodes

Tracker
 * Investigated: 9
 * Confirmed: 2
 * Resolved: 3
 * Archived: 1

Next Week

Mostly more of the same. The larger focus is getting the hair/curves system to be usable for the Heist open movie, and also to move it out of experimental.

April 25 - April 29
This week I worked on bug fixing, finishing up the named attribute node changes, and progressed on converting the set spline type node to the new data-block. On Friday and the weekend I prepared to travel to Amsterdam for the next 6/7 weeks.

Changes / Features
 * Curves: Cache the number of curves of each type
 * Curves: Support applying geometry nodes modifier
 * Mesh: Make vertex normal property read-only
 * Geometry Nodes: Add default attribute name to field inputs/outputs
 * Geometry Nodes: Move named attribute nodes out of experimental
 * Geometry Nodes: Add "Named" to "Remove Attribute" node name
 * : Mesh: Add an explicit "positions changed" function
 * : RNA: Don't allocate empty char pointer properties

Bug Fixes
 * Fix T97679: Retrieving shape key normals modifies vertices
 * Fix T97595: Modifier attribute output broken for vertex groups
 * Fix T93546: Fill curve node ignores last point of non-cylic curves
 * Fix T97151: Curve vertex parenting crash with dependency cycle
 * Fix T93899: Incorrect decorator buttons for geometry nodes vector/colors
 * Fix: Correctly copy and update curve type counts cache
 * Fix: Incorrect implicit enum conversion
 * Fix: Incorrect conversion from C bitfield syntax
 * : Fix T93272: Material index mapping missing for mesh boolean node

Tests
 * Geometry Nodes: Add two tests
 * Geometry Nodes: Add non-cyclic fill curve test file

Cleanup
 * Snap: Use Map and unique_ptr for snap cache
 * Cleanup: Remove redundant vertex normal dirty tags
 * Cleanup: Move anonymous attribute removal to geometry component
 * Cleanup: Use bool, remove unnecessary struct keywords
 * Geometry Nodes: Avoid parallel_for_each with a single geometry
 * Cleanup: Remove disabled optimization code
 * Cleanup: Reword comment, rename variables
 * Cleanup: Improve const correctness of shape key functions
 * Cleanup: Fix compiler warnings

Review
 * `Requested changes, accepted` : Geometry Nodes: Refactor array devirtualization.
 * `Requested changes` : Add color attributes option to Convert Attributes operation
 * `Requested changes` : Subdivision node: add input for vertex creases
 * `Requested changes` : Custom Colors for Empty Objects
 * `Accepted` : Color Attribute: Add menu QoL improvements
 * `Requested changes` : Assets: Implement viewport drag and drop for geometry nodes (WIP)
 * `Commented` : Geometry Nodes: Unwrap and Pack Islands Nodes
 * `Accepted` : Curves: Support spherical delete brush.
 * `Accepted` : Curves: Add "Curves" to brush names.
 * `Accepted` : Geometry Nodes: Improve ui when trying to remove built-in attributes.
 * `Accepted` : UI: Fix consistency issues with tooltips and icons
 * `Accepted` : Geometry Nodes: Improve attribute dependency overlay.
 * `Accepted, committed` : Fix: Socket tooltip display error

Tracker
 * Investigated: 29
 * Confirmed: 3
 * Resolved: 6
 * Needs Information: 2
 * Archived: 7
 * Duplicate: 2

Next Week

Adjust to jetlag and life at the Blender studio, finish up some ongoing changes, probably meetings, etc.

April 18 - April 22
This week I basically did more of the same, and not much new to show for it. I spent some time on the design tasks listed here, particularly the volume one where I made some mockups of how volume grids would interact with fields in geometry nodes.
 * : How to deal with multiple volume grids in a geometry
 * : Unify Image Texture node in geometry and shader nodes
 * : Rename to Remove Named Attribute node
 * : Attribute identification and semantics

Changes / Features
 * Mesh: Avoid unnecessary normal calculation and dirty tags
 * Refactor: Move mesh face dot tag out of MVert
 * Nodes: Remove unnecessary RNA pointer creation
 * : Refactor: Move mesh hide flags to generic data types (WIP)
 * : Curves: Support applying geometry nodes modifier
 * : Curves: Cache the number of curves of each type

Bug Fixes
 * Fix T96498: Modifiers affect multiple curve objects ,
 * Fix: Memory leak writing to builtin attribute from modifier
 * Fix: Build error on macOS after previous commit
 * Fix: Assert failure with certain screw modifier settings
 * Fix: Use alphabetical order in geometry nodes add menu
 * Fix: Incorrect info message in set material node
 * Fix: Assert when sculpting empty curves

Cleanup
 * Curves: Further split of curves draw code from particles
 * Cleanup: Don't recalculate normals in versioning code
 * Cleanup: Remove unused variables, adjust comments
 * Cleanup: Clang tidy, unused variable warnings
 * Cleanup: Rename CD_MLOOPCOL to CD_PROP_BYTE_COLOR
 * Cleanup: Clang tidy
 * Cleanup: Remove redundant types from custom data masks
 * Cleanup: Move object_modifier.c to C++
 * Cleanup: Remove incorrect comment

Review
 * `Requested changes` : Implement drag n drop for geo nodes
 * `Requested changes, committed` : Add a few extra BMesh attribute access macros.
 * `Accepted` : Geometry Nodes: Show used named attributes in modifier.
 * `Accepted` : Geometry Nodes: Better support for byte colors.
 * `Accepted` : BLI: Optimize constructing new virtual array.
 * `Commented` : Revamp Vertex Paint With C++
 * `Commented` : T89897: Implement hiding data source names spreadsheet
 * `Requested changes` : T86838 Geometry Nodes: Add Mesh To Volume Node
 * `Commented` : Fix T95604: Naming inconsistencies in alembic exporter options
 * `Committed` : Fix T94559: Copying a geometry node group does not copy animation data
 * `Accepted` : Fix T97002: Preserve multi socket link order
 * `Accepted` : Curves: Show sculpt tool settings in panels.

Tracker
 * Investigated: 13
 * Confirmed: 3
 * Resolved: 1
 * Archived: 3

Next Week

I'll try to port another node or two to the new curves data-block and look into various other geometry nodes topics.

April 10 - April 17
This week I worked more on porting curve nodes (I spent most of that time on the curve to mesh node). I also did some miscellaneous performance improvements and code review, and spent the last couple days of the week looking into bugs.

Changes / Features
 * Curves: Port curve to mesh node to the new data-block
 * Edit Mesh: Parallelize bounds calculation with deform modifiers
 * Curves: Avoid duplicating evaluated positions with all poly curves
 * Refactor: Evaluate surface objects as mesh components
 * UI: Improve wording for some USD export descriptions
 * : Geometry Nodes: Port sample curves node to new data-block
 * : Geometry Nodes: Improve performance of mesh to points node

Bug Fixes
 * Fix T96988: Merge by distance node crash with certain input
 * Fix T97363: Duplicate elements node doesn't tag loose edges
 * Fix: Apply tilt in curves data-block normals calculation
 * Fix: BMesh Python API errors after vertex_normals addition
 * Fix: Incorrect custom data maxlayers in rare files
 * Fix: Use after free when removing attribute on instances
 * Fix: Assert evaluating single point Bezier curve
 * Fix: Use consistent type for nurbs order attribute
 * Fix: Curves: Add missing builtin attribute definition
 * Fix: Assert when curve has no evaluated points
 * Fix: Missing translation in node socket inspection

Cleanup
 * Curves: Split curve EEVEE/workbench functions from particle hair
 * Cleanup: Return early
 * Cleanup: Clang tidy ,
 * Cleanup: Further hair to curves renaming
 * Cleanup: Declare variables where initialized
 * Cleanup: Make curve deform argument optional
 * Cleanup: Move three mesh files to C++
 * Cleanup: Correct wording in comments
 * Cleanup: Remove reference to CD_NORMAL in poly custom data

Review
 * `Commented` : Curves Trim
 * `Commented` : Split the MLoopUV struct to 3 bool attributes and a float2 attribute.
 * `Accepted` : Geometry Nodes: Show used named attributes in nodes.
 * `Requested changes` : Geometry Nodes: New node Attribute Smooth
 * `Accepted` : Curves: Initial geometry nodes support for curves object.
 * `Accepted` : Geometry/Compositor/Shader/Texture Nodes: Add general Combine/Separate Color nodes
 * `Accepted` : Fix T95700: Oject Info node does not work with GPU subdivided meshes
 * `Requested changes` : Geometry Nodes: Show supported types in geo socket tooltip.
 * `Accepted` : Fix T94559: Copying a geometry node group does not copy animation data
 * `Requested changes` : T86838 Geometry Nodes: Add Mesh To Volume Node
 * `Commented` : Curves edit mode: support point selection
 * `Accepted` : Random value node hints
 * `Accepted` : Add support for showing socket descriptions in tooltips in Node Editor and Material Properties
 * `Commented` : Alembic: import arbitrary attributes
 * `Accepted` : Curves: Fix some issues with operator to convert to particle system.
 * `Committed` : Adding support for New Curves type in Set Material node
 * `Accepted` : Curves Sculpting Icons: Snake Hook and Grow updates
 * `Accepted` : Fix adding certain nodes can cause python errors

Tracker
 * Reported : Tooltips broken after recent BLF commit
 * Investigated: 34
 * Resolved: 7
 * Archived: 7
 * Duplicate: 2
 * Known Issue: 2

Next Week

Exactly the same as last week! I'll port more curve nodes to the new data-block, do more code review, and some continued struct-of-array refactoring for mesh code.

April 4 - April 10
This week I mostly worked more on curves to-dos. I also did a fair amount of code review, and some bug fixing.

Later on I looked into removing some `DispList` code. Apart from some weirdness with instancing of metaballs that is going pretty well.

Changes / Features
 * Curves: Port tangent and normal calculation to the new data-block
 * Curves: Add initial sampling utility, use for snake hook brush
 * Curves: Port legacy curve viewport drawing to the new data-block
 * Curves: Hair to Curves rename in Cycles/EEVEE UI
 * Geometry Nodes: Parallelize mesh line node
 * Refactor: Evaluate surface objects as mesh components
 * : Curves: Split curve EEVEE/workbench functions from particle hair
 * : Refactor: Evaluate metaball objects as mesh components
 * : Blend Write: Add option for legacy mesh format

Bug Fixes
 * Fix: Various fixes and cleanups in new curves code
 * Fix: Curve parameter node broken for Bezier curves after refactor
 * Fix: Missing virtual destructor on virtual class
 * Fix: Assert fails when evaluating single point Bezier curve
 * Fix T96838: Missing translations in link drag search
 * Fix T96999: RNA mesh transform does not mark normals dirty
 * : Fix T96498: Curve object modifier affects all curves

Cleanup
 * Cleanup: Return early in metaball tessellation code
 * Cleanup: Define new curves normal mode in DNA
 * Curves: Name mutable data retrieval functions explicitly
 * Cleanup: Pass const arguments to object snapping
 * Cleanup: Simplify if statements, clang tidy
 * Cleanup: Move interface.c to C++
 * Cleanup: Remove unused function

Review
 * `Requested changes` : Add support for showing socket descriptions in tooltips in Node Editor and Material Properties
 * `Requested changes` : Implement drag n drop for geo nodes
 * `Requested changes, accepted` : Move Sculpt Colors From Experimental
 * `Accepted` : Curves: Operator to snap curves to surface.
 * `Accepted` : Functions: Optimize simple generated multi-functions.
 * `Accepted` : Curves edit mode: show dots for points
 * `Accepted` : Curves: New Grow/Shrink brush.
 * `Accepted` : Curves: fix edit mode detection
 * `Commented` : Updated voxel remesher defaults
 * `Committed` : Geometry Nodes: Add "Connected" mode for Merge by Distance node
 * `Committed` : Fix T91541: Naming inconsistency in Freestyle Modifier - Curvature 3D
 * `Committed` : Fix T86200: Properties editor rearranges columns poorly when very wide
 * `Committed` : Geometry: fix division by zero in `GEO_uv_parametrizer_pack`
 * `Committed` : Set curve resolution in curves_to_curve_eval
 * `Committed` : Knife tool: Fix UI alignment in extra settings popover
 * `Accepted` : Curves: Add menu for new curves object.
 * `Accepted` : Enable Duplicate Data for curves and point cloud objects.

Tracker
 * Investigated: 9
 * Resolved: 3
 * Archived: 2
 * Duplicate: 1

Next Week

I'll port more curve nodes to the new data-block, do more code review, and maybe some continued struct-of-array refactoring for mesh code.

March 28 - April 3
This week I finished the patches for converting nodes to the new data structure that I started last week.

I spent a lot of time on code review, mainly for the sculpt colors patch and two Alembic import patches, but also for a fair amount of smaller changes.

I also made a design task for improvements to bounding boxes that should be relevant to instancing performance improvements. And another code architecture topic I looked into a bit was curve evaluation on the GPU. It looks like it's important that GPU evaluation is implemented for performance in the viewport.



Changes / Features
 * Geometry Nodes: Add search to named attribute input node
 * Geometry Nodes: Port set handle nodes to new data-block
 * Curves: Add length cache, length paramerterize utility
 * Curves: Port resample node to the new data-block
 * Curves: Port parameter node to the new data-block
 * Curves: Port length node to the new data-block
 * Geometry Nodes: Remove soft min from extrude node scale
 * Curves: Port curves total length node to the new data-block
 * Curves: Support set origin and apply transform operators
 * Curves: Inline some simple methods
 * : Use a vector instead of a linked list for object instances (WIP)

Bug Fixes
 * Fix T97001: Grease pencil array modifier relative offset broken
 * Fix: Assert with set origin operation and single active object
 * Fix: Remove special case from curve segment size function
 * Fix: Failing curves test after recent commit
 * Fix: incorrect assert in new code

Cleanup
 * Cleanup: Remove interface region files to C++
 * Cleanup: Move interface View2D files to C++
 * Cleanup: Remove object bounding box function
 * Cleanup: Remove unused boundbox flag
 * Cleanup: Use const for bounding boxes where possible ,
 * Cleanup: Move geometry set fields to a separate header
 * Cleanup: Curves draw cache renaming, use references
 * Cleanup: Avoid storing pointers for attribute search callback
 * Cleanup: Move scene.c to C++
 * Cleanup: Move transform_snap_object.c to C++
 * Cleanup: Move two grease pencil files to C++
 * Cleanup: Remove legacy dupli system from point cloud object
 * Cleanup: Use float3 type
 * Cleanup: Remove unnecessary namespace specification
 * Cleanup: Use const mesh arguments

Review
 * `Requested changes` : Move Sculpt Colors From Experimental
 * `Requested changes, accepted` : Alembic/USD: use geometry sets to import data
 * `Requested changes, accepted` : Alembic: import arbitrary attributes
 * `Accepted` : Curves edit mode: show dots for points
 * `Accepted` : Curves: Improve Snake Hook brush.
 * `Commented` : Assets: Instancing operator option for collection asset dropping
 * `Commented` : Subdivision node: add input for vertex creases
 * `Commented` : Curves: New Grow/Shrink brush.
 * `Requested changes` : Geometry Nodes: Unwrap and Pack Islands Nodes
 * `Accepted` : UI: Address cosmetic papercuts of the reroute node
 * `Accepted` : Nodes: Remove hidden links when creating node groups
 * `Accepted` : UI: Improve visual stability of the dot grid background
 * `Commented` : Curves: use a flag to detect edit mode
 * `Commented` : Attributes: show attributes in edit mode n-panel
 * `Accepted` : Curves: Support converting curves to legacy hair system.
 * `Committed` : Fix: outliner and button icons alignment
 * `Committed` : Move uvedit_parametrizer functions to blenlib from uvedit code
 * `Accepted` : Fix T88785: Avoid value slider clipping through rounded corners
 * `Accepted` : Geometry Nodes: Don't create new node tree when adding a nodes modifier
 * `Accepted` : Cleanup: Fix various typos (code and comments)
 * `Accepted` : Fix T91541: Naming inconsistency in Freestyle Modifier - Curvature 3D
 * `Accepted` : Fix T95604: Naming inconsistencies in alembic exporter options

Tracker
 * Investigated: 9
 * Resolved: 2
 * Archived: 2

Next Week

I'll have to spend some time solving the current issue with curve object updates. Beyond that, next week will probably look pretty similar.

March 21 - March 27
This week I spent most of my time working on porting more nodes to the new curve data structure, and on bug fixes. The performance improvements I get when porting nodes are satisfying, and it's really important to make sure we don't have three separate curve types in Blender's code, but I'm getting a bit burnt out working on constant refactoring, so I might take a break from that next.

Changes / Features
 * Geometry Nodes: Multi-thread creation of selection from field
 * Geometry Nodes: Improve performance writing to vertex groups
 * Curves: Add a utility to count curves of each type
 * Curves: Bezier and general interpolate to evaluated utility
 * Curves: Tweak evaluated offset functions
 * BLI: Add utility for tracking average and min runtime
 * BLI: Adjust interpolation to support integers, other tweaks
 * UI: Use title case for labels
 * : Curves: Port resample node to the new data-block
 * : Curves: Add length cache, length paramerterize utility
 * : Curves: Port length node to the new data-block
 * : Geometry Nodes: Port set handle nodes to new data-block
 * : Curves: Port curves total length node to the new data-block

Bug Fixes
 * Fix T96308: Mesh to BMesh conversion doesn't calculate vertex normals
 * Fix T96294: Crash and error with shape key normal calculation
 * Fix T96401: Broken multires baked normals result
 * Fix T96494: Array modifier with caps crash on curve objects
 * Fix: Small fixes for NURBS evaluation
 * Fix: Missing "Hair" to "Curves" rename
 * Fix: Build error with flag usage and strict warnings

Cleanup
 * Cleanup: Simplify logic, rename variables
 * Cleanup: Adjust naming in new curves code ,
 * Cleanup: Add asserts, remove default case
 * Cleanup: Use more specific variable name
 * Cleanup: Use bool for BMesh creation params
 * Cleanup: Small changes to multires bake normals access
 * Cleanup: Clang tidy ,
 * Cleanup: Typo, improve variable names

Tests
 * Modifiers: Update tests for recent fix to Mesh to BMesh conversion
 * Geometry Nodes: Update test file for vertex group writing change

Review
 * `Requested changes` : Alembic: import arbitrary attributes
 * `Accepted` : Curves: Improve Comb brush
 * `Commented` : Split off the flag of the MLoopUV struct to 2 bool attrib layers.
 * `Accepted` : Curves: New Add brush.
 * `Committed` : Validation message split from nurb_check_valid
 * `Commented` : Add support for node socket tooltips
 * `Accepted` : Curves: Curve Pen
 * `Requested changes` : Fix T95604: Naming inconsistencies in alembic exporter options
 * `Committed` : Fix unreported: Drag link search doesn't always connect to the socket
 * `Commented` : Curves: Initial geometry nodes support for curves object (WIP).
 * `Commented` : Cleanup: Fix various typos (code and comments)
 * `Accepted` : Fix T96577: Setting curve handles not working correctly with multiple curves.

Tracker
 * Investigated: 10
 * Resolved: 5
 * Archived: 1
 * Known Issue: 1
 * Duplicate: 2

Next Week

Bug fixing and code review (though I guess that goes without saying by now). I'll finish up the node conversions I started last week, but I may start working on updating the drawing code next week.

March 14 - March 20
This week I committed the first curves evaluation and used in a few nodes, and also ported plenty more nodes to the new data structure. Some of the conversions unlocked a lot of performance. I observed a 150x improvement in the duplicate elements node, as a nice example.

I did some miscellaneous code review. Not that much bug fixing though, I'll have to catch up on that next week.

Also, I removed the code for the old legacy geometry nodes from before 3.0. A ~13000 line reduction! That means fewer areas to refactor to the new curves type.

Changes / Features
 * Curves: Initial evaluation for curves data-block
 * Geometry Nodes: Remove legacy node code ,
 * Geometry Nodes: Add named attribute nodes behind experimental flag
 * Curves: Port duplicate elements node to new data-block
 * Curves: Port handle type selection node to new data-block
 * Curves: Port Bezier Segment node to the new data-block
 * Curves: Port transform node to new data-block
 * Curves: Port fill curve node to the new data-block
 * Curves: Port reverse curves node to the new data-block
 * Curves: Port handle type selection node to new data-block
 * Curves: Port convex hull node to new data-block
 * Curves: Port count spline length output to new data-block
 * : BLI: Add length parameterization utility

Bug Fixes
 * Fix: Curves last evaluated segment is empty
 * Fix: Build error from missing build dependencies
 * Fix: Update icons for hair to curves rename
 * Fix: Build error after curve evaluation commit
 * Fix: Compiler error on windows and mac

Cleanup
 * Cleanup: Miscellaneous improvements to duplicate geometry node
 * Cleanup: Move object_transform.c to C++
 * Cleanup: Reorganize duplicate elements file
 * Cleanup: Remove unnecessary namespace specification
 * Cleanup: Remove unnecessary namespace usage, use const
 * Cleanup: Rename "spline" variables to "curve"
 * Cleanup: Remove unused includes
 * Cleanup: Further removal for legacy geometry nodes
 * Cleanup: Clang tidy

Review
 * `Requested changes` : Curves: New Add brush
 * `Requested changes` {Phab|D14389}}: Geometry Nodes: Unwrap and Pack Islands Nodes
 * `Commented` : Geometry Nodes: Unwrap and Pack Islands Nodes
 * `Commented` : Eevee: Add support for Nishita sky texture
 * `Requested changes, accepted` : Geometry Nodes: Add "Connected" mode for Merge by Distance node
 * `Requested changes` : Alembic: import arbitrary attributes
 * `Requested changes` : Curves edit mode: support point selection
 * `Requested changes` : Curves: Curve Pen
 * `Requested changes` : Curves: add an EditCurves structure
 * `Commented` : Add Material Index selector to existing Multiple strokes modifier
 * `Commented` : Curves edit mode: show dots for points
 * `Accepted` : Fix T96278: Missing update after alpha socket connection.
 * `Accepted` : BLI: Move CPPType to blenlib.
 * `Commented` : User Pref: Improve consistency and clarity of names and tooltips

Tracker
 * Investigated: 8
 * Resolved: 1
 * Archived: 3
 * Duplicate: 2

Next Week

Bug fixing, code review, more curves node conversions.

March 7 - March 13
This week I worked more on converting nodes to use the new curve data structure, making progress on curves evaluation, code review.

I also spent some time working on the named attribute nodes, and added some tasks about the changes.
 * : Named Attribute Nodes
 * : Attribute search for named attribute input node
 * : Named attribute modifier panel visualization
 * : Named attribute node group visualization

Changes / Features
 * Curves: Port realize instances node to the new data-block
 * Curves: Port mesh to curve node to new data-block
 * Curve: Store NURBS basis cache as a single vector
 * Curve: Remove temporary buffer during NURBS evaluation
 * UI: Use property split in curves surface panel
 * : Curves: Initial evaluation for curves data-block (WIP)

Bug Fixes
 * Fix: Deleting vertex group attribute can change original mesh
 * Fix T96146: Subdivide curve node uninitialized dangling handles
 * Fix: Assert in set spline type node after recent commit
 * Fix T95843: Invalid mesh runtime data after sculpt undo
 * Fix T93573: Curve evaluated mesh selected in edit mode
 * Fix: Handle handles reset when realizing with other curve types
 * Fix: Use "construct" instead of "assign" for uninitialized memory
 * Fix: Curves cyclic access function duplicates attribute
 * Fix: Add missing break
 * : Fix T96294: Crash and error with shape key normal calculation

Tests
 * Geometry Nodes: Add test file with many NURBS curves
 * Geometry Nodes: Add regression test for recent commit
 * Adjust OBJ tests slightly for recent NURBS cleanup
 * Curves: Add test for knots generation commit

Cleanup
 * Cleanup: Reduce duplication in realize instances code
 * Cleanup: Simplify NURBS basis cache arguments
 * Cleanup: Remove unnecessary NURBS optimization
 * Cleanup: Simplify/deduplicate curves built-in attribute access
 * Cleanup: Use new enum for NURBS curve knots modes
 * Cleanup: Use helper variable, const argument
 * Cleanup: Use helper variable
 * Cleanup: Rename geometry set "curve" to "curves"
 * Cleanup: Correct comment
 * Cleanup: Clang tidy

Review
 * `Commented` : Geometry Nodes: Split Curves
 * `Committed` : Revision of NURBS knot generation modes
 * `Accepted` : Validation message split from nurb_check_valid
 * `Accepted` : Curves: Actually delete curves with Delete brush.
 * `Accepted` : Curves: Initial comb/shrink/grow brushes.
 * `Request changes` : Curves edit mode: show dots for points
 * `Commented` : Geometry Nodes: Add "Is Seam" and "Set Seam" nodes, "seam" attribute
 * `Accepted, committed` : Geometry Nodes: Tiny optimization to UV Sphere
 * `Accepted` : Fix unreported: Drag link search doesn't always connect to the socket
 * `Commented` : Geometry Nodes: Add "Set Sharp" and "Is Sharp" nodes
 * `Commented` : Curves: Initial geometry nodes support for curves object (WIP).
 * `Committed` : Implement interpolation for boolean custom data type
 * `Commented` : Geometry Nodes: Add UV output to Curve to Mesh node
 * `Commented` : UI: Multi-Window Area Docking
 * `Commented` : Subdivision node: add input for vertex creases
 * `Commented` : Geometry Nodes: Add "Capsule" geometry primitive
 * `Request changes` : Geometry Nodes: Remesh Voxel
 * `Accepted` : Fix Spline Length node after recent refactor.
 * `Commented` : Preferences: Convert certain preferences to be row-based.
 * `Accepted` : Fix T96292: Unable to set active material output using Python.

Tracker
 * Investigated: 9
 * Resolved: 3
 * Confirmed: 2

Next Week

I think I can finish up the position evaluation earlier this week. Then I can either work on the rest of curve evaluation, and porting the rest of the nodes, or help on sculpt/edit modes for curves.

February 28 - March 5
This week I worked more on converting code to use the new curves data-block, and made progress on curves evaluation with the new data-block as well.

I also did a fair amount of bug fixing and investigating for the 3.1 release.

I was visiting family, so I worked a little less than usual.

Changes / Features
 * Geometry Nodes: Begin conversion to new curves
 * Geometry Nodes: Port most curve primitives to new data-block
 * Curves: Move curves primitive to object add code
 * Curves: Port set resolution node to the new data-block
 * BLI: Add functions to IndexRange to mirror Span
 * : Curves: Port realize instances node to the new data-block

Bug Fixes
 * Fix T96164: Crash with curve domain attributes
 * Fix T96152: Crash realizing curve instances
 * Fix T93573: Remove outline from instances in edit mode
 * Fix: BLI math clamp doesn't work
 * Fix: Failing OBJ export tests due to mesh normals commit
 * Fix: Don't tag curves component cache dirty for radius
 * Fix: Use correct default in Curves to CurveEval conversion
 * Fix: Only possible to create one 8 bit integer attribute
 * Fix: Incorrect assert in curves code
 * : Fix T93573: Curve evaluated mesh selected in edit mode

Cleanup
 * Cleanup: Mesh normal calculation comments and logic
 * Cleanup: Rename set handle type node internally to match UI
 * Cleanup: Unused variable warnings
 * Cleanup: Use bool instead of int
 * Cleanup: Rename geometry set "curve" functions to "curves"
 * Cleanup: Move mesh_validate.c to C++
 * Cleanup: Move object_add.c to C++

Review
 * `Requested changes` : Curves: Curve Pen
 * `Accepted` : Search: Take word order into account in string search.
 * `Commented` : Geometry Nodes: Add selection outputs to Curve to Mesh node
 * `Accepted` : Curves: Add brush to add curves on surface.
 * `Committed` : Nodes: Improve readability of selected node links
 * `Accepted, committed` : UI Papercut: Fix multi input socket outline and highlight
 * `Accepted` : Fix T95479: Geometry nodes crash with cage display.
 * `Commented` : Geometry Nodes: Add UV output to Curve to Mesh node
 * `Accepted` : Revision of NURBS knot generation modes
 * `Accepted` : BLI: Add scoped-defer utility to add RAII-like behavior to C types.
 * `Committed` : Dual Mesh: use std::move
 * `Accepted` : Cleanup: Convert image.c to c++
 * `Accepted` : Fix T96085: Repeated evaluation of geometry nodes when nothing changed.
 * `Commented` : Enabled the outliner to use the correct icon for each curve subtype.
 * `Closed` : Nodes: NodeSocket location exposed to the Python API

Tracker
 * Created: : Regression: Curve wire line not displayed in edit mode when it has evaluated mesh/point/volume
 * Investigated: 14
 * Resolved: 3
 * Archived: 1
 * Duplicate: 3

Next Week

More similar work: curves evalaluation, and a bit of code review and bug fixing.

February 21 - February 27
Another very similar week! I worked a bit on the conversion of the curve geometry component, splitting off some initial changes to master.

I did some code review, but not as much as usual, since this curves might end up holding other things up, it's a bit higher priority.

I created and commented on some design tasks:
 * : Mesh Struct of Arrays Refactor
 * : Struct of Arrays Refactor for Mesh Edges
 * : Struct of Arrays Refactor for Mesh Polygons
 * : Convert Mesh vertex data into float3
 * : Remove normalization from original coordinate attribute (CD_ORCO)
 * : How to attach hair to a surface
 * : Use Copy on Write in more places

Changes / Features
 * Curves: Use simpler "set" behavior for postion attribute
 * Curves: Use simpler "set" behavior for handle position attributes

Bug Fixes
 * Fix T95839: Data race when lazily creating mesh normal layers
 * Fix T93873: Wrong limits for color socket exposed to modifier
 * Fix: Clear mesh runtime cache when adding elements
 * Fix T95987: Data transfer modifier custom normals crash
 * Fix T95952: Uninitialized value used in Bezier Segment node
 * Fix T95919: Apply Pose as Rest Pose Operator crashes
 * Fix: Build error in debug build
 * Fix: Failing OBJ export tests due to mesh normals commit
 * Fix: Errors in previous cleanup commit
 * Fix: Attempt to fix build error on windows
 * Fix: Crash switching between sculpt and edit mode
 * Fix: Only possible to create one 8 bit integer attribute
 * Fix: Incorrect assert in curves code

Cleanup
 * Cleanup: Mesh normal calculation comments and logic
 * Cleanup: Use function to check if normals are dirty
 * Cleanup: Use new enum for CurveEval handle types
 * Cleanup: Use new curves type enum for CurveEval
 * Cleanup: Remove unused mesh dirty flags
 * Cleanup: Use curves wrapper
 * Cleanup: Simplify operating on multiple geometry components
 * Curves: Add methods to retrieve range for points or curves
 * Cleanup: Typo in comment

Review
 * `Requested changes` : Curves: Curve Pen
 * `Accepted` : Geometry Nodes: Duplicate Elements
 * `Accepted` : Fix T95985: Crash when assigning a name for an output attribute
 * `Accepted` : Curves: Initial brush implementations for curves sculpt mode
 * `Accepted` : UI Papercut: Fix multi input socket outline and highlight
 * `Closed` : Fix T95952: Uninitialized value is used in Bezier Segment primitive node.
 * `Closed` : Fix T93873: Broken UI of color socket input
 * `Closed` : Fix T95952: Uninitialized value is used in Bezier Segment primitive node
 * `Commented` : Geometry Nodes: Mesh Face is Planar Node
 * `Commented` : Enabled the outliner to use the correct icon for each curve subtype.
 * `Closed` : Nodes: NodeSocket location exposed to the Python API

Tracker
 * Investigated: 10
 * Resolved: 5
 * Archived: 1

Next Week

More similar work: curves evalaluation, and a bit of code review and bug fixing.

February 14 - February 18
Another very similar week, only a couple things really different from last week. On Friday Jacques and I discovered a threading issue with the new lazy normal calculation that I had to fix: T95839

Part of the work on the curve data structure sent me on a tangent of reworking the newly added C++ templated math operations to add support for basic types like `float` and `int`, in addition to the vector types like `float3`. That's useful for sharing very type-agnostic code.

Changes / Features
 * BLI: Implement templated math functions for basic types
 * BLI: Generalize short algorithm for finding bounds
 * Mesh: Avoid creating incorrect original index layers
 * Cleanup: Use functions for accessing mesh normal dirty state
 * Nodes: Update dependency graph when removing some nodes
 * : Geometry Nodes: Begin conversion to new curves (WIP)

Bug Fixes
 * Fix T95252: Move duplicate node doesn't do edge-panning
 * Fix T95720: Spreadsheet missing volume grid info
 * Fix T94495: Split edges node leads to a crash in edit mode
 * Fix: Debug build error with vector type division
 * Fix: Build error in debug build
 * Fix: Memory leak in recently added curves copy function
 * :Fix T95839: Data race when lazily creating mesh normal layers

Cleanup
 * BLI: Change dependencies in vector math files
 * Cleanup: Pass const Scene to mesh evaluation
 * Cleanup: Deduplicate functions for creating attributes
 * Cleanup: Remove unused argument to mesh tessellation
 * Cleanup: Use C++ math functions
 * Cleanup: Rename original curve object type enum
 * Cleanup: Rename file used for calculating mesh edges
 * Cleanup: Clang tidy

Review
 * `Updated` : Geometry Nodes: Duplicate Elements
 * `Commented` : Move Sculpt Colors From Experimental
 * `Commented` : Revision of NURBS knot generation modes
 * `Accepted, committed` : Fix T95542: Dual Mesh crashes with some non-manifold vertices
 * `Commented` : New C++ based wavefront OBJ importer
 * `Accepted` : Nodes: Improve readability of selected node links
 * `Accepted` : Curves: Add experimental curves sculpt mode.
 * `Commented` : Improve Complex Solidify Constraints Solver
 * `Commented` : Geometry Nodes: Mesh Face is Planar Node
 * `Accepted` : Curves: add initial edit mode support
 * `Accepted, committed` : Fix T87829 and T95331: Issues when nodes too close together
 * `Accepted, committed` : Fix (unreported): Curve to Mesh: Don't create caps, when the rail curve is cyclic
 * `Accepted` : Curves: Initial brush system integration for curves sculpt mode.
 * `Accepted` : UI: Do not include the text stating an enum item is the default
 * `Accepted, committed` : Fix T93526: Missing tooltip for attribute search button
 * `Accepted` : Dual Mesh: use std::move

Tests
 * Geometry Nodes: Add regression test files for extrude node
 * Geometry Nodes: Add regression test for T95542

Tracker
 * Reported: : Data race when lazily creating mesh normal layers
 * Investigated: 16
 * Resolved: 2
 * Archived: 3
 * Known Issue: 3
 * Needs Information: 1
 * Confirmed: 2
 * Duplicate: 3

Next Week

Similar plan: I'll do a bit more bug fixing for 3.1, work on curves evaluation and the refactor to change nodes to the new data structure, and do code review.

February 7 - February 13
This week I worked more on implementing the curves data-block, lots of miscellaneous code review, some bug fixes, and had some meetings. Two with industry folks about the hair project, and one about the sculpt vertex colors patch. I'm also still making progress on my project of turning mesh vertex data into a regular vector for just positions.

Changes / Features
 * Curves: Rename "Hair" types, variables, and functions to "Curves"
 * Refactor: Move PBVH update tag out of MVert
 * : Curves: Further implementation of new curves data structure
 * : Refactor: Move bevel weight out of MVert and MEdge
 * : BLI: Generalize short algorithm for finding bounds

Bug Fixes
 * Fix T95458: Line art ignores curve objects with no evaluated mesh
 * Fix T95573: Incorrect bounding box of evaluated curve
 * Fix T95620: Crash When Entering Edit Mode on a Curve
 * Fix: Incorrect size used for reading curves data
 * Fix: Missing changes in recent "Curves" rename
 * Fix: Complete curves renaming missed in previous commit

Cleanup
 * Cleanup: Remove unused mesh mask definitions
 * Cleanup: Clang tidy, unused variabel warnings
 * Cleanup: Clang tidy ,
 * Cleanup: Remove definition for unused flag

Review
 * `Commented` : Move Sculpt Colors From Experimental
 * `Requested changes` : Geometry Nodes: Duplicate Elements
 * `Accepted` : Geometry Nodes: Mesh Face is Planar Node
 * `Accepted, committed` : UI: Improve node drop shadow
 * `Requested changes` : Revision of NURBS knot generation modes
 * `Accepted` : BLI: New C++ BitVector data structure.
 * `Accepted` : Fix T94415: Nodes: poor selection behavior inside frame nodes
 * `Commented` : Geometry Nodes: Split Splines
 * `Commented` : Geometry Nodes: Add Random Spherical Distribution node
 * `Commented` : New C++ based wavefront OBJ importer
 * `Commented` : Geometry Nodes: Add Between operations to Compare node
 * `Requested changes` : Move solidify code to geometry module
 * `Accepted` : Fix T95612: Missing domain interpolation when setting output attribute.
 * `Accepted, committed` : Fix T95532: Merge node deletes everything for empty selections
 * `Commented` : Geometry Component: add access to vertex creases
 * `Commented` : Node: Mix node
 * `Commented` : Fix T91840: Don't create invalid links when inserting a node on a link.
 * `Commented` : [WIP] Reroute node improvements
 * `Closed` : Bevel modifier limit method based on edge/face smoothness
 * `Commented` : Fix size_t -> int -> size_t round trip in Cycles
 * `Closed` : Fix T94334: 3DView View Menu Close Error

Tracker
 * Investigated: 21
 * Resolved: 3
 * Archived: 5
 * Known Issue: 1
 * Confirmed: 5

Next Week

The same as last week's plan: code review and a bit of work for 3.2 targets, continue building the new curves data structure, and bug fixing.

January 31 - February 6
This week I mainly worked on bug fixing, code review, and starting to refactor the new curves data structure.

I also organized a 3.2 targets list for geometry nodes, and created tasks where necessary. There were some design discussions about 2D vector sockets, which I suppose I'll continue next week.

One interesting bug I ran into was, where it turns out that creating over 2047 instances overrides point cloud object's color!

I also abandoned some of my old patches that I don't think are worth pursuing at this point:
 * : Property Search: Use fuzzy string matching
 * : WIP: Curve Profile Presets
 * : Geometry Nodes: Proof of concept lazy conversion to and from BMesh
 * : BLI: Add "is_parallel" function for float3
 * : Geometry Nodes: Curve Deform Node

Changes / Features
 * Curves: Changes to the new curves data-block
 * Attributes: Infrastructure for generic 8-bit integer data type
 * Geometry Nodes: Remove object transform dependency in some cases
 * : Curves: Rename "Hair" types, variables, and functions to "Curves"

Bug Fixes
 * Fix T95334: Crash with no vertex normals in multires bake
 * Fix T94334: Area close operator crash in 3D view menu
 * Fix: Displaying any point cloud in the viewport causes crash
 * Fix: Missing translations from operator descriptions
 * Fix: Remove incorrect assert in mesh modifier evaluation
 * Fix: Incorrect default distance for merge by distance node
 * Fix build error
 * : Mesh: Avoid creating incorrect original index layers
 * : Cleanup: Move PBVH update tag out of MVert

Cleanup
 * Cleanup: Remove unused "init" node tree flag
 * Cleanup: Grammar in comments and tooltips
 * Cleanup: Add comment about unsed custom data type
 * Cleanup: Return early, use switch, rename function
 * Cleanup: Add file names back to node header
 * Cleanup: Clang tidy, use braces
 * Cleanup: Add missing breaks in previous commit
 * Cleanup: Use C++ types
 * Cleanup: Add back comment removed in recent commit

Review
 * `Requested changes` : Geometry Nodes: Mesh Face is Planar Node
 * `Commented` : Revision of NURBS knot generation modes
 * `Commented` : Collections: Functions to calculate bounding box and dimensions
 * `Accepted` : Fix T95185: Invalid normals after undo in sculpt mode
 * `Commented` : Geometry Nodes: NURBS Order Input/Set Node
 * `Accepted` : Fix T95084: Evaluate all output attributes before changing the geometry.
 * `Commented` : Curve: increase max of order u/v
 * `Commented` : Geometry Nodes: Add Easing Function Node
 * `Requested changes` : Geometry Nodes: New node Attribute Smooth
 * `Commented` : Function Node: Add Integer Math node
 * `Commented` : Cleanup: Convert image.c to c++
 * `Commented` : Geometry Nodes: Add a 2D Vector Socket Type (and a couple supporting nodes)
 * `Accepted` : Nodes: Dynamic node class for Map Range node
 * `Commented` : BLI: New C++ BitVector data structure (WIP).
 * `Accepted` : Fix T94435: Remove anonymous attributes when applying modifier.
 * `Commented` : Fix T95105: Extend range for the frame node's label size
 * `Commented` : Geometry Nodes: Add Between operations to Compare node
 * `Requested changes` : Fix :T94815 Drag to add node search prioritizes wrong node type
 * `Commented` : Fix T94241: Grayed out Front-Face Falloff checkbox in popover
 * `Committed` : UI: Update deep grey community theme
 * `Closed` : Fix T94495: 'Split Edges' geometry node leads to a crash in edit mode

Tracker
 * Investigated: 22
 * Resolved: 3
 * Archived: 6
 * Known Issue: 1
 * Confirmed: 3

Next Week

I plan to basically continue the same things, code review for 3.2 targets, continue building the new curves data structure, and bug fixing.

January 24 - January 30
This was a bit of a duller week. I finished up the necessary manual pages for all of the new geometry nodes features in 3.1, and worked on bug fixing. Plus a little bit of code review. There were no daily meetings since Jacques was in Amsterdam.

I committed the merge by distance patches and added tests for them as well as the 29 tests for the extrude node.

Changes / Features
 * Geometry Nodes: Initial merge by distance node
 * Geometry Nodes: Port weld modifier to the merge by distance node
 * Geometry Nodes: Add or improve various socket descriptions
 * Nodes: Improve link-drag search support for boolean math node
 * Mesh: Add versioning in 3.0 for vertex normal refactor
 * UI: Use property split in new operator popup

Bug Fixes
 * Fix T94476: Threading/performance issue with curve to points node
 * Fix T95202: Curve to mesh node inconsistent edge vertex order
 * Fix T95212: Mirror modifier normals crash
 * Fix: Complete transfer attribute input renaming
 * : Fix T95334: Crash with no vertex normals in multires bake
 * : Fix T95185: Invalid normals after undo in sculpt mode
 * : Fix T95252: Move duplicate node doesn't do edge-panning

Cleanup
 * Cleanup: Remove mesh vertex "temp tag" flag
 * Cleanup: Remove unused DerivedMesh functions
 * Cleanup: Remove unused DerivedMesh normal handling
 * Cleanup: Remove unused DerivedMesh flag
 * Cleanup: Remove unused "_ex" version of function
 * Cleanup: Remove modifier type hair callback
 * Cleanup: Correct location of node function declarations
 * Cleanup: Remove useless comments
 * Cleanup: Clang tidy
 * Cleanup: Remove unused variable
 * : Cleanup: Move mesh extract files to C++

Manual
 * Geometry Nodes: Extrude Mesh Node
 * Geometry Nodes: Generalized Compare Node
 * Geometry Nodes: 4 Field Inputs for Mesh Topology Data
 * Geometry Nodes: Add note about index consistency
 * Geometry Nodes: Initial merge by distance node
 * Geometry Nodes: Mesh Island Node
 * Geometry Nodes: new Scale Elements nodes
 * Geometry Nodes: new Geometry to Instance node
 * Geometry Nodes: String to Curves Line/Pivot Point
 * Geometry Nodes: Accumulate Field Node
 * Geometry Nodes: Edge Angle Node
 * Geometry Nodes: Domain Size Node
 * Geometry Nodes: new Field at Index node
 * Geometry Nodes: Edge Neighbors Node
 * Geometry Nodes: Support custom instance attributes
 * Geometry Nodes: Flip Faces Node
 * Attributes: add operator to convert generic attributes to other types
 * Attributes: Add links for attribute_add and remove operators
 * Geometry Nodes: Link to attribute domains
 * Geometry Nodes: Clarify that transfer attribute does not support instances
 * Geometry Nodes: Expand the Boolean Math node
 * Geometry Nodes: Rename Curve Parameter, Add Index on Spline
 * Geometry Nodes: Link to the mesh normals reference
 * Geometry Nodes: Selection outputs for Cone and Cylinder
 * Add more information to the scene time node
 * Geometry Nodes: Propagate attributes in Instances to Points node
 * Geometry Nodes: support instance attributes when realizing instances
 * Geometry Nodes: propagate attributes in Instance on Points node
 * Geometry Nodes: Add Point Count to Spline Length Node
 * Geometry Nodes: Relative Handle Position Mode
 * Geometry Nodes: Add Outer Points Selection to Star
 * Geometry Nodes: Support instances in the delete geometry node
 * Geometry Nodes: Add Offset to Handle Position Node
 * Geometry Nodes: Improve the description of selection input
 * Geometry Nodes: Add Selection Input to Resample Curve Node
 * Geometry Nodes: Slightly improve accumulate field example
 * Geometry Nodes: Add Length Output to Curve Parameter Node
 * Geometry Nodes: Add Selection to Attribute Statistics
 * Fix: Correct geometry output name
 * Fix: Incorrect socket label
 * Fix: Typo
 * Fix: Incorrect node screenshot

Tests
 * Geometry Nodes: Add regression test files for extrude node
 * Tests: Enable new tests for geometry nodes extrude node
 * Update tests for curve to mesh edge vertex order change
 * Add regression test for point cloud merge by distance node

Review
 * `Requested changes` : Geometry Nodes: Grouped Statistics
 * `Requested changes` : Nodes: Dynamic nclass for Map Range node
 * `Commented` : Geometry Nodes: Single Point Node
 * `Accepted` : UI: Improve node drop shadow
 * `Accepted` : Assets: Add operator to create preview from active object.
 * `Accepted` : Geometry Nodes: Add NAND, NOR, XOR, XNOR, IMPLY, NIMPLY to Boolean Math
 * `Accepted` : Geometry Nodes: String to Curves Line/Pivot
 * `Accepted` : Geometry Nodes: Segment Length Node
 * `Commented` : Move Sculpt Colors From Experimental
 * `Committed` : Fix T95169: Assert in weld modifier code
 * `Commented` : obj: speed up the exporter by multi-threading and avoiding tiny I/O calls
 * `Closed` : Geometry Nodes: Mesh Extrude
 * `Closed` : Geometry Nodes: Merge by Distance (Modifier port)

Tracker
 * Investigated: 16
 * Resolved: 4
 * Archived: 4
 * Confirmed: 2
 * Duplicate: 2

Next Week

I'll probably spend a fair amount of time working on bug fixes, and hopefully start refactoring the curves data structure. I also wanted to make a proposal about how to improve caching of object bounding boxes in the code.

January 17 - January 23
This week my main goal was finishing up the extrude node, which I thankfully did finish. I also worked on lots of other relatively random things that came up, including some bug fixes, code review, and cleanup (like usual), and updated the Nodes & Physics module page to fit in with the new organization.





Changes / Features
 * Geometry Nodes: Extrude Mesh Node
 * Mesh RNA API: Expose contiguous normal arrays
 * Geometry Nodes: Rename transfer attribute geometry input
 * Geometry Nodes: Set Handle Type Node: Left and right by default
 * BLI: Add index_range method to VectorSet

Bug Fixes
 * Fix T94760: Crash building BMesh when opening file
 * Fix T94967: Sculpt mode crashes with missing normals
 * Fix: Node link drag search doesn't list shader sockets
 * Fix T95097: Attribute Capture node UI inconsistency
 * Fix Python API docs build error
 * Fix: Incorrect soft max after IDProperty UI data refactor
 * : Fix T93455: Set material node does not use empty slot
 * : Mesh: Add versioning in 3.0 for vertex normal refactor

Cleanup
 * Cleanup: Improvements to mesh to bmesh conversion
 * Cleanup: Move bmesh_mesh_convert.c to C++
 * Cleanup: Use references, const variables
 * Cleanup: Move node editor files to proper namespace
 * Cleanup: Make node editor functions private
 * Cleanup: Grammar: its self vs. itself
 * Cleanup: Use references, LISTBASE_FOREACH macro
 * Cleanup: Remove unused node editor toolbar file
 * Cleanup: Remove incorrect comment
 * Cleanup: Resolve unused variable warning, make function static
 * : Cleanup: Remove mesh vertex "temp tag" flag
 * : Cleanup: Correct location of node function declarations

Tests
 * Geometry Nodes: Add test for mesh flip faces node

Review
 * `Committed` : Accurate NURBS circle and sphere
 * `Accepted` : Geometry Nodes: New Scale Elements node.
 * `Commented` : Collections: Functions to calculate bounding box and dimensions
 * `Accepted, committed` : Flip Mesh Faces Node
 * `Accepted` : Geometry Nodes: Curve Primitive Arc
 * `Accepted` : Geometry Nodes: Triangulate Node - Add Selection Input
 * `Accepted` : Geometry Nodes: Edge Angle Node: Add Signed Angle Output
 * `Accepted` : USD Preview Surface material export.
 * `Accepted` : Attributes: Add operator to convert generic attributes to other types
 * `Accepted` : Geometry Nodes: Add NAND, NOR, XOR, XNOR, IMPLY, NIMPLY to Boolean Math
 * `Requested changes` : Geometry Nodes: Segment Length Node
 * `Commented` : Geometry Nodes: Add Intersection mode to Curve Trim node.
 * `Commented` : Fix T94038: Curve type objects count double in scene statistics
 * `Accepted` : Geometry Nodes: New Output for Number of Mesh Islands
 * `Commented` : Fix Bevel Intersection Continuity
 * `Commented` : GPencil: Add Scale Thickness to Pivot Point Pie Menu
 * `Closed` : T39656 Ctrl+Click for Nurbs

Tracker
 * Reported: : Dragged node links are invisible
 * Investigated: 22
 * Resolved: 4
 * Archived: 4
 * Confirmed: 6
 * Duplicate: 5

Next Week

Just bug fixing and work on the manual for all the new 3.1 features. I'll try to get the merge by distance node into 3.1 as well, and on Monday I'll start by moving my extrude node test file to become regression tests.

January 10 - January 14
This week the most exciting thing is that I landed the vertex normal refactor I've been working on. Apart from some issues with an OBJ test that I hadn't tested since it was added, it went well I think, though I do see a couple of bug reports now. I did some performance testing, and it made some observable gains in real files, which was a nice surprise, since I was mostly approaching it from the "understandable code" perspective.

We had some longer meetings talking about patches and other design topics this week. The meeting notes are pretty lengthy here: https://devtalk.blender.org/t/2022-1-10-2022-01-14-geometry-nodes-sub-module-meetings/22405

I spent quite a while reviewing a patch that exposes color painting in sculpt mode (previously "sculpt vertex colors") in master, and had a bit of a discussion about it afterwards.

Changes / Features
 * Refactor: Move normals out of MVert, lazy calculation
 * Geometry Nodes: Rename transfer attribute geometry input
 * Spreadsheet: Add mesh topology information with a debug value
 * Nodes: Support link-drag search with compare node outputs
 * : Mesh RNA API: Expose contiguous normal arrays

Bug Fixes
 * Fix T94624: Object as font instances don't work
 * Fix T94852: Geometry Proximity crash when unsuccessful
 * Fix: Incorrect logic in mesh validation for removing layers

Cleanup
 * Cleanup: Remove unused "active ID" node flag
 * Geometry Nodes: Move normal field input to be usable elsewhere
 * Cleanup: Remove unused subdiv functions
 * Cleanup: Clang tidy
 * Docs: Add comments to node socket struct header

Tests
 * Geometry Nodes: Add tests for set spline type node
 * Tests: Update tests for normal refactor changes
 * Tests: Update obj export tests for normals refactor

Manual
 * : Geometry Nodes: Improve the introduction page

Review
 * `Requested changes` : Move Sculpt Colors From Experimental
 * `Requested changes` : Geometry Nodes: New Scale Elements node.
 * `Accepted, committed` : Set Spline Type node - better conversion from NURBS to Bezier
 * `Commented` : Nodes: Expand Math and Vector Math functions
 * `Requested changes` : Geometry Nodes: Edge Angle Node - Add Return Signed Angle Output
 * `Requested changes` : Function Node: Add Integer Math node
 * `Accepted` : Geometry Nodes: Add NAND, NOR, XOR, XNOR, IMPLY, NIMPLY to Boolean Math
 * `Requested changes` : Flip Mesh Faces Node
 * `Requested changes` : Geometry Nodes: String to Curves Line/Pivot
 * `Requested changes` : Geometry Nodes: Triangulate Node - Add Selection Input
 * `Abandoned` : Nodes: Expose the node socket location as read-only to the Python API
 * `Commented` : Geometry Nodes: Add Easing Function Node
 * `Commented` : Geometry Nodes: Curve Primitive Arc
 * `Commented` : Geometry Nodes: Add Random value to Object Info node
 * `Commented` : Start of implementation of new texture margin generation.
 * `Commented` : BLI: Refactor vector types & functions to use templates
 * `Accepted` : Fix T94812: Render layer sockets are missing after file load.
 * `Accepted` : Fix T94837: curve tilt on a 2-point-curve is wrong
 * `Accepted` : Fix: Build warning with MSVC

Tracker
 * Investigated: 15
 * Resolved: 3
 * Archived: 2
 * Confirmed: 1
 * Duplicate: 2

Next Week

Now that I've had a break and some time to think about it, I'll come back to the "extrude regions" case for the extrude node. Then some code review, and hopefully merge by distance for meshes (looking into porting the weld modifier again).

January 3 - January 9
This week I didn't really finish anything notable. Mostly it was a big time vacuum with lots of work on various branches and discussions about "random" things like GPU acceleration, performance bottlenecks, and patches.

Changes / Features
 * Nodes: Consistent link drag search for math and vector math nodes
 * BLI: Add slice method to MutableSpan
 * : Attributes: Infrastructure for generic 8-bit integer data type
 * : Spreadsheet: Add mesh topology information hidden with a debug value

Bug Fixes
 * Fix T94581: Incorrect geometry delete behavior with instances
 * Fix: Link drag search error with random value node from color socket
 * Fix T94594: Incorrect spreadsheet data set region type in old files
 * : Fix T94624: Object as font instances don't work

Cleanup
 * Cleanup: Remove unused code from BKE_node.h
 * Cleanup: Use forward declaration of struct in header
 * Cleanup: Spelling/grammar in comments
 * Cleanup: Clang tidy
 * : Cleanup: Remove unused "active ID" node flag

Tests
 * Tests: Replace new geometry nodes test file that fails on macs

Manual
 * Geometry Nodes: Node execution time overlay
 * Geometry Nodes: Clarify named attribute input from the modifier
 * Geometry Nodes: Further clarify named attribute input process
 * Fix: Outdated images and text in the node groups page

Review
 * `Commented` : Geometry Nodes: Duplicate Geometry (Cleanup and Testing)
 * `Requested changes` : Assets: Add operator to create preview from active object
 * `Requested changes` : Geometry Nodes: String to Curves Line/Pivot
 * `Requested changes` : Function Node: Add Integer Math node
 * `Requested changes` : Set Spline Type node - better conversion from NURBS to Bezier
 * `Accepted` : Accurate NURBS circle and sphere
 * `Accepted` : UI: Show recently selected items at the top of searches
 * `Accepted` : Cleanup: Nodes: Convert generic shader node files to c++
 * `Commented` : Fix crash when removing sockets used by internal link
 * `Commented` : Fix T94495: 'Split Edges' geometry node leads to a crash in edit mode
 * `Accepted` : Fix T94659: Crash when deleting instances.
 * `Accepted` : Geometry Nodes: Add Mesh Edge Angle Node
 * `Commented` : Configurable rotation angle increments
 * `Commented` : Fix T89252: Unable to interact with Stabilize stroke text on click
 * `Commented` : Geometry Nodes: Rename String To Curves socket

Tracker
 * Reported
 * : Instance on Points attribute transfer issue with pick instance
 * : Workbench shadow shading incorrect results with GPU subdivision
 * Investigated: 16
 * Resolved: 2
 * Archived: 7
 * Confirmed: 2
 * Known Issue: 1
 * Duplicate: 1

Next Week

I want to finish the larger things that I think could actually make it to 3.1: the extrude node, the mesh normals refactor, and the merge by distance node. Beyond that, I'll plan patch review and bug fixing, but I think I'll be realistic and keep it at that.

December 27 - January 3
This was a relatively relaxed week, with not many people around. Besides bug fixing and code review, I mainly worked on a mesh extrude node. I'm almost done with that, and happy with how it's turning out.



Changes / Features
 * Point Cloud: Optimize bounding box calculation
 * Geometry Nodes: Support instances in the delete geometry node
 * : Geometry Nodes: Extrude Mesh Node

Bug Fixes
 * Fix T94442: Trim curve node can crash with duplicate point
 * Fix T94454: Python API curve to mesh use after free without depsgraph
 * Fix T94380: Scrolling zooms in spreadsheet data set region
 * Fix: Issues with attribute comparison in geometry nodes tests
 * Fix: Duplicate link search entries for attribute statistic node
 * Fix T94453: Weld modifier crash after recent cleanup

Cleanup
 * Cleanup: Remove unused node tree "local sync" functions
 * Cleanup: Remove unused DerivedMesh functions
 * Cleanup: Return early, organize variable declarations

Tests
 * Geometry Nodes: Fix issue in mesh to curve test file
 * Geometry Nodes: Add tests for the dual mesh node
 * Geometry Nodes: Add test for T94453
 * Geometry Nodes: Add test file for accumulate field node
 * Geometry Nodes: Update test file to attempt to fix mac buildbot error
 * Geometry Nodes: Add mesh island test

Review
 * `Requested changes, accepted` : Geometry Nodes: Add Mesh Edge Angle Node
 * `Requested changes, accepted` : Nodes: Improve link drag search for Math and Vector Math nodes
 * `Accepted` : Geometry Nodes: Accumulate Function Node
 * `Accepted` : Geometry Nodes: Add Integer Mode to Attribute Statistics
 * `Requested changes, accepted` : Fix T94113: Local view + Geometry Nodes is broken for instances
 * `Commented, accepted` : Nodes: Add Compare node operations to link drag search menu
 * `Accepted` : Nodes: Weight drag link search for Math nodes
 * `Accepted` : Nodes: Cleanup: Remove no op registration functions
 * `Accepted` : Fix T89252: Unable to interact with Stabilize stroke text on click
 * `Accepted` : Nodes: Support linking to existing group input from link drag search.
 * `Accepted` : BLI: Add utility to check if type is any specific type.

Tracker
 * Investigated: 12
 * Resolved: 5
 * Archived: 1
 * Confirmed: 5
 * Duplicate: 2

Next Week

More work on the extrude node, the named attribute nodes, the generalized curve data structures, and possibly some work on the merge by distance node.