Note: This is an archived version of the Blender Developer Wiki (archived 2024). The current developer documentation is available on developer.blender.org/docs.

User:HooglyBoogly/Reports/2023

All Reports

December 18 - December 30

These past weeks I've mainly worked on some cleanups and bug fixes-- stuff I can do without much back and forth with others.


Changes / Features

  • Curves: Add basic custom normals support f63a7c1ee9
  • Curves: Support View Selected in edit mode 0ceb272832
  • Sculpt: Avoid expensive mask access in remaining cases bd51bb7623
  • Mesh: Rename MLoopTri variable names, and functions 7c69c8827b
  • Mesh: Rename totvert, totedge, and totloop fields efbee2d606
  • PR #116166: Geometry Nodes: Matrix socket type, attribute type, and initial nodes


Fixes

  • Fix #116351: Assert in sculpt mode with no faces a0f8a6dae8
  • Fix #116373: Error using foreach_get on MeshLoopTriangle loops 5f527fdc89
  • Fix #116069: Incorrect data transfer custom normals behavior 78c3253553
  • Fix #115400: "Face Sets from Visible" missing undo and redraw 255ac188a9
  • Fix #116532: Cloth filter performance issue from mask attribute access 27582ddb93
  • Fix #115046: Crash updating string custom property UI data 0f2e534674
  • Fix #116647: Sculpt smooth brushes ineffective with low strength 715c829290
  • Fix #115857: UV project modifier crash with invalid name 2396d07f4e
  • Fix #116372: Crash in boolean triangulation after recent cleanup 66409b3860
  • Fix: Incorrect curves asset in recent commit ebb9cf21ec


Cleanup

  • Mesh
    • Rename Mesh loop_data to corner_data 8dd8f932e2
    • Remove unnecessary argument in mesh normals code 48b0a504b4
    • Replace MVertTri type with C++ vector 7132c7a53c
    • Remove unnecessary DNA_meshdata_types.h includes b9b47088bc
    • Move BKE_mesh_calc_edges to bke namespace 2c43a9eed9
    • Correct and improve comments in DNA_customdata_types.h dcbc5a3641
    • Remove most indirect includes of BKE_customdata.hh 06eda2a484
  • Sculpt
    • Remove unnecessary function and data in PBVH 4ee151e204
    • Tweak PBVH grid faces update retrieval 8bf73a7a97
  • Sculpt: Split mask and position smooth brushes ac15db443f
    • Remove unused paint struct 399e8264e6
    • Remove unnecessary/indirect includes in sculpt headers d54b24c55a
    • Use BitVector instead of BLI_bitmap in sculpt code a683d1b0c6
  • Sculpt: Add utility to duplicate mask data 70ae6f5d41
  • Improve sculpt variable name a52887abb0
  • Miscellaneous
    • Use FunctionRef instead of std::function 854d7afa1e
    • Move attribute domain enum to C++ header, use enum class 19001c9e6c
    • Use forward declarations to replace includes of BKE_attribute.hh edf8a776ac
    • Use utility to fill default attribute values 2618c1d71d
    • Slightly improve virtual array docs 8555c22ced
    • Avoid uninitialized variable warning 2da88752be
    • Grammar, redundant "private" in class 01dbe11ea6
  • Return attribute unique name string by value 7ed172336f
    • Check for null before copying datablocks d093c9075d
    • Use accessor functions for point cloud positions 7f24972911
    • Refactor: Move evaluate on domain field input to be reusable 5de57e7001
    • Use dynamic declaration for sample curve node da6867ca3b
    • Debug build error, unused variable warnings 8e30dc12da
    • Inconsistent struct vs. class declaration warning 4f8d584325
    • Make format 19b46e0816
  • PR #116664: Cleanup: Remove some indirect includes in common headers


Review

  • Requested changes Menu Switch Node PR #113445
  • Requested changes Curves extrude operator PR #116354
  • Requested changes Geometry Nodes: Sort Elements node PR #114194
  • Requested changes Geometry Nodes: Rewrite Scale Elements node PR #115142
  • Accepted Volumes: refactor volume grid storage PR #116315
  • Accepted Geometry Nodes: support panels in geometry nodes modifier PR #116472
  • Requested changes, accepted Geometry Nodes: Visualize viewer as text PR #115664
  • Commented Geometry Nodes: Sort Elements node PR #114194
  • Accepted Geometry Nodes: Speedup of Shortest Edge Paths node PR #114707
  • Accepted Geometry Nodes: initial Volume Grid socket support PR #115270
  • Commented USD: Support armature and shape key export PR #111931
  • Accepted UI: add support for uiLayout based panels PR #113584
  • Requested changes, accepted Fix #11689: Sculpt: Box Hide tool keymap option "Outside" not working PR #116412
  • Accepted Fix: all curves drawn cyclic if "cyclic" attribute exists PR #116638
  • Accepted Fix #116270: Sculpt: Simplify brush crash PR #116291
  • Accepted Fix: failing unit tests due to "stack-use-after-scope" PR #116434
  • Accepted Fix #11614: Empty Point Cloud crash Points to Curves PR #116640
  • Commented Enable TBB for opensubdiv. PR #116357
  • Accepted Fix #116019: Solidify Crease Inner not working with edge crease attribute PR #116491
  • Commented RNA: Add missing raw types for DNA types PR #115761
  • Commented RNA: Speed up raw array access when the property is stored contiguously PR #116015


Tracker

  • Investigated: 20
  • Resolved: 11
  • Closed: 2


Next Week

Taking some time off at the beginning of the first week of the year. After that I suppose I'll be starting to move my focus to the GP project for the beginning of the year.

December 11 - December 17

This week I mainly worked on the same things as last week, and also made a design task for matrix sockets and implemented it.


Changes / Features

  • Curves: Add edit mode tilt control 0e8c874166
  • Curves: Add edit mode duplicate operator 9af176bfe6
  • GPv3: Specialize duplicate function for curve selection domain 7dc6a6bd9a
  • Mesh: Add viewport normals simplify option 912c4c60d8
  • Geometry Nodes: Change Instance Rotation node to use rotation socket a6838c8a12
  • PR #116066: Curves: Add basic custom normals support
  • PR #116166: Geometry Nodes: Matrix socket type, attribute type, and initial nodes
  • PR #116106: Geometry Nodes: Add Rotate Rotation node


Fixes

  • Fix #116017: Mesh edit mode vertex slide allocation ignores alignment 5b053204ed
  • Fix #115994: Crashes with edit mode tools using custom data correction eefe19a7de
  • Fix #116141: Missing task isolation when storing sculpt undo node e5cb2b2798
  • Fix #116025: Uninitialized value when versioning old node trees 65252564ee
  • Fix #116140: GPU subdivision ignores completely smooth shading cdb2f1e1ba
  • Fix #116122: Frame Selected/All operators incorrectly frame view 766b0ce820
  • Fix #115326: Memory leak toggling dyntopo on and off with empty mesh a7e8d8c8be
  • Fix: Crash copying BMesh from typo in CustomData copy 6bc3445e65
  • Fix: Mesh draw normals extraction ignores sharp_edge with no sharp_face 5875349390
  • Fix: Out of bounds array access building PBVH for empty BMesh 7aee8124a7
  • Fix: Sculpt undo crash for multires after recent cleanup d7b2141c2e
  • Fix: New generic attributes uninitialized after curves draw tool f5adfa6acd
  • Fix: PBVH has face sets check ignored for BMesh 87e8a282bc
  • Fix: Warnings and build error after previous forward declaration commit 96dff1d3ce


Cleanup

  • Sculpt
    • Use loops instead of PBVH iter macro in sculpt undo 36097b757e
    • Use FunctionRef for PBVH callbacks 488de130b3
    • Remove useless PBVH update function f15bca64f2
    • Remove unnecessary sculpt visibility update 1d94003660
    • Remove unnecessary PBVH threading settings function 4c1f766d0d
    • Remove unused PBVH node pointer 3ddba82716
    • Remove unused sculpt code c8aecac001
    • Remove unnecessary "sculpt_undo" prefix for local functions 36d5443f57
    • Remove unnecessary PBVH function 0ad65762cc
    • Move PBVH update functions to C++ namespace 262572a6a0
    • Tweak PBVH node face indices functions, add comments ce4ec6d42b
    • Pass vertex update array as argument when building PBVH 71b6f0ecbe
    • Simplify vertex index retrieval in sculpt undo nodes ba6c07f2d9
    • Simplify PBVH build process slightly b3aca5b28f
    • Slightly improve variable naming in sculpt undo nodes 93a3423584
  • Mesh
    • Remove unnecessary Mesh C-API functions b52a071e7a
    • Use C++ attribute API instead of CustomData API c53e220aef
    • Move mesh update tags to DNA struct 1d0179adbb
    • Remove inline functions and extra includes from draw extraction 768cd9b763
    • Improve mesh MLoopTri struct comment 249c8b0e6b
    • Move two mesh functions to C++ header e657aa2360
    • Use utility function to calculate face normal bb2a289a9a
    • Un-inline mesh data access functions 4c1817e76f
    • Remove extern "C" from mesh C header 3fb6397b79
    • Forward declare some classes in mesh headers 30d95966d5
  • MISC
    • Remove unnecessary C API for delaunay triangulation a494d6a641
    • Remove unnecessary namespace specification 7c423682bc
    • Remove unused curves keymap items dcf9d74cba
    • Slightly simplify some loops in delaunary triangulation 5be9a1cce4
    • Slightly simplify delaunay triangulation input gathering 34bf1f6c0c
    • Move opensubdiv C-API headers to C++ 8157f33911
    • Move BLI_delaunay_2d.hh to C++ 451aa56d9c
    • Move draw_manager_text.h to C++ 79ade784b8
    • Doxygen section title case consistency 6dad7afe5e
    • Remove const for Span and by-value types in headers 6a1009c9f8
    • Make format c02784bd4f


Review

  • Requested changes, accepted PR #115864: Curves: Support for draw tool
  • Updated, accepted PR #113413: Geometry Nodes: use dynamic declaration for switch node
  • Requested changes PR #115664: Geometry Nodes: Visualize viewer as text
  • Requested changes PR #113584: UI: add support for uiLayout based panels
  • Accepted PR #113431: Geometry Nodes: Add Active Camera input node
  • Accepted PR #115466: Geometry Nodes: new Bake node
  • Accepted PR #116231: Geometry Nodes: refactor storage for socket values
  • Committed PR #116010: Fix compiler warning
  • Accepted PR #116152: Fix #116144: Tag update relations for Active Camera node
  • Accepted PR #116026: Fix #116000: Face set toggle visibility not working correctly
  • Accepted PR #116028: Fix #116024: Face set unhide crash for masked type
  • Accepted PR #116134: Fix #116130: Mirrored custom normals broken again
  • Closed PR #115982: Nodes: Show active node position & width in UI when Developer Extras enabled
  • Closed PR #105408: Matrix operations and sockets for geometry nodes
  • Closed PR #111740: BLI: add parallel_memset and use for normal calculation


Tracker

  • Investigated: 11
  • Resolved: 7
  • Closed: 1


Next Week

More of the same mostly I suppose. I'm mainly using this in between time to try to fill in some gaps and make future work easier.

December 4 - December 10

This week I did a fair amount more performance and cleanup work in the sculpt module. I'm trying to approach it from both ends: improving existing code iteratively and planning some larger replacements like the rewritten brushes (starting with the draw brush in Sergey's branch). So far for the larger changes I'm focusing on operator code where I can more easily measure performance changes.

I also:

  • Made a bit of progress on curves custom normals calculation. Though I didn't finish it like I hoped.
  • Added matrix sockets and a custom data type in a branch. Besides the mixing, that's basically done.
  • Fixed a performance regression from quadratic performance in BMesh data copying. Funny to see something deep in my todo list raised to high priority with a report. A lesson in trusting my instincts maybe.


Changes / Features

  • Mesh: Avoid calculating corner normals for drawing flat-shaded meshes c4446d7924
  • BMesh: Optimize copying attributes from many elements at once 0b1049b41d
  • BMesh: Improve performance when copying attributes in same mesh 66da875488
  • BMesh: Use simpler element copy within the same mesh 865b806811
  • PBVH: Specialize node bounds update, expose functions e9f4f8b52a
  • PBVH: Use C++ Bounds type for node bounds 8a705ffd11
  • Sculpt: Refactor face sets storage and access f3dd1a3260
  • Sculpt: Make hide poly pointer in sculpt session const 4e7e539b33
  • Subdiv: Remove unnecessary CCG derived flag structs 8171f719fe


Fixes

  • Fix #115979: Object bounds display type doubled size 4eee57fc3b
  • Fix #115856: Sculpt Face sets drawing sometimes uses wrong default a86658a58a
  • Fix #115924: Sculpt: Draw face sets not working on first try 7f6cf068d5
  • Fix #115775: Curve object to mesh conversion crash ce81bdc284
  • Fix: Protect against access of empty geometry bounds optional 79552f87f2
  • Fix: Build error and format fixes after previous cleanup e0d95b95cc
  • Fix: Incorrect use of Vector resize in mesh_fair 184418b6d0
  • Fix: Debug build error after recent PBVH bounds change cc3c5e2329


Cleanup

  • Mesh
    • Use consistent "mesh" variable name (replace "me") 854cdd1180
    • Store more mesh runtime data with unique_ptr 695e626d3f
    • Store SubdivCCG in unique_ptr 5cd6a05f5e
    • Avoid passing context to shrinkwrap blenkernel function c293c75975
    • Move BMesh headers to C++ 7a96c4672c
    • Simplify common logic for BMesh attribute copy fc4d29e08a
    • Improve comments in BKE mesh types header 0318d49995
    • Remove unused DMFlagMat struct 3b1d5d14f2
  • Sculpt
    • Move majority of sculpt paint module to C++ namespaces e5814ab201
    • Sculpt explicitly retrieve mesh face visibility attribute 83810e28fc
    • Write sculpt mask directly when restoring data before stroke 2b0448c91d
    • Use references for sculpt undo nodes c4436776d1
    • Move sculpt undo system to C++ namespace 08d657c874
    • Return sculpt node automasking data by value 956d00e37a
    • Return PBVH vertex data arrays as spans 869ea79da0
    • Add utility to compare non-indexed and indexed span values dc234c5d93
    • Use FunctionRef for PBVH batch drawing 874f83c42e
    • Store sculpt undo nodes with C++ Vector 63432f0963
  • General C++ cleanup
    • Change some view3d projection functions to use C++ types d742f08cc6
    • Remove unused / legacy code
    • Remove unused custom data function 353d000f15
    • Remove unused BoundBox functions edb7656c06
    • Remove unnecessary size argument to CustomData free function cc7080b8b0
    • Remove unused BoundBox flag a9b94d6150
    • Remove remnants of old color layer preview system fe3b8b6e9b
    • Remove unused modifier functions 3a075a95ee
  • Other
    • Use simpler positions name in curves selection functions 85012ccb1f
    • Remove excessive use of optimized IndexMask functions 7bfb7af311
    • Fix missing declaration warning 7cf9252713
    • Resolve mix of bool and char warning 3c476979b1
    • Resolve inconsistent struct vs. class declaration warning 2609f16fc8


Review

  • Requested changes, accepted PR #115923: GPv3: Clean loose points operator
  • Requested changes PR #114194: Geometry Nodes: Sort Elements node
  • Accepted PR #115602: GPv3: Drawing Placement
  • Requested changes PR #115664: WIP: Geometry Nodes: Visualize viewer as text
  • Requested changes PR #115864: WIP: Curves: Support for draw tool
  • Requested changes, accepted PR #115740: GPv3: Overlay: only show visible and editable materials.
  • Accepted PR #115964: UI: fix and improve a few messages
  • Accepted PR #114797: Fix #114760: new attribute does not get active for some domains
  • Accepted PR #115795: GPv3: Crash switching to draw mode for empty object
  • Committed PR #115138: Geometry Nodes: Face Group Boundaries node speedup
  • Accepted PR #115805: Nodes: add node callback for extra info that is drawn above node
  • Commented PR #115898: Refactor: Pass Keyframe settings as arguments
  • Accepted PR #115796: Fix #115716: Empty Grease Pencil Keymap Warning
  • Accepted PR #115744: Fix #115667: Sculpt face sets draw wrong with subdivision modifier


Tracker

  • Reported #115895: GPv3: Draw surface projection artifacts at mesh boundaries
  • Investigated: 9
  • Resolved: 5
  • Closed: 1


Next Week

I'll finish the basic curves custom normals feature, and finish a PR adding matrix sockets and the attribute type.

November 27 - December 3

This week I landed a few more changes, including the geometry bounds refactor I've been working on for a while and a big refactor to the extrude node. I also ended up doing a lot of sculpt mode cleanup, basically trying to use data oriented design, simplify code, and make use of C++ features.


Changes / Features

  • Refactor: Further improvements to geometry bounds 14e3523ac2
  • Geometry nodes
    • Geometry Nodes: Rewrite parts of extrude mesh node c31718649d
    • Geometry Nodes: Remove drag & drop requirement of geometry input ed23989e2e
  • Sculpt mode and multires
    • Sculpt: Improve "Hide/Show" operator performance for mesh 4e66769ec0
    • Subdiv: Store multires sculpt grid visibility in BitGroupVector ccab01f97f
    • Sculpt: Multithread mesh "show all" operation 380b7c5dc3
    • Sculpt: Remove redundant "reveal all" operator 0978f9486e
    • Refactor: Sculpt: Clarify PBVH attribute requests 8c8ea2ec47
    • Multires: Use IndexMask for Subdiv CCG face updates 63af8dbfca
  • BLI: Add utility to reverse index mask 21a2390f4c


Fixes

  • Fix #115108: Object dimensions infinite for armatures 91c936e01c
  • Fix #115298: Sculpt mask removed with undo involving mode change 09caf59690
  • Fix #115521: Voxel remesh resets smooth with attribute propagation off 81abaaad6b
  • Fix #115366: Missing task isolation subdividing loose edges eb399678f5
  • Fix: Incorrect subdiv IndexMask construction 34ec46934c
  • Fix: Crash building sculpt PBVH a86122606c
  • Fix: Sculpt drawing ignores hide status f69beb4829
  • Fix: Debug and lite build errors after recent cleanup 5366ccd625


Cleanup

  • Sculpt and multires
    • Remove redundant subdiv pointers from PBVH 8b28bb9882
    • Remove redundant selection comparison from mesh tests db17c4bff5
    • Use const arguments for some paint functions f2ed2b82ce
    • Move constant variable declarations outside of loop aae0b71342
    • Use proper type for subdiv CCG faces aa2cdf283a
    • Move enum definition out of header 68baa04eeb
    • Pass PBVH node grid indices as Span a7afc5b1e8
    • Use const SubdivCCGFace variables c2571cd259
    • Move paint hide file to namespace 11b4e9311f
    • Pass PBVH draw attribute requests as span 2a94328346
    • Use enum class int paint hide operator 841864406f
  • Remove unused / legacy code
    • Remove unused threading C-API functions 4c79b87d9a
    • Remove/replace SmallHash data structure 991486c37f
    • Remove unused voxel sampling functions 7020a4ff1a
    • Remove unused BLI voronoi code 573b4728cb
    • Remove unused argument to PBVH draw functions 2864f3ad3f
    • Remove unused curve positions variable c28cb3d0ac
  • Mesh
    • Move mesh looptri real edges function 19b9b8d431
    • Remove mesh "vert coords" functions f2467f75b3
    • Remove unnecessary mesh C-API functions 321c1af26e
    • Remove outdated normals comment for mesh validation c083b3b8d2
    • Use optional for original indices in extrude node f1c0bce651
  • General C++ cleanup
    • Store BVH and shrinkwrap data with C++ types aca27e5462
    • Move four blenkernel headers to C++ 7e3ba529ea
    • Use C++ arrays to store subdiv ccg data 8c59532106
    • Use C++ threading API in subdiv_ccg.cc dfc6b1deb6
    • Small tweaks to C++ style in lib remap code ac6e854335
    • Remove unnecessary keywords from newly C++ headers 9271949f7b
    • Use references instead of pointers in subdiv_ccg.cc 1a36feb7e5
  • Other


Review

  • Requested changes, accepted PR #115389: GPv3: Duplicate operator (edit mode)
  • Requested changes, accepted PR #115278: GPv3: Lock unselect materials operator
  • Committed PR #112794: Mesh: add index-independent test for mesh equality
  • Requested changes, accepted PR #115602: GPv3: Drawing Placement
  • Requested changes PR #115664: WIP: Geometry Nodes: Visualize viewer as text
  • Requested changes, accepted PR #115612: Fix #115526: missing normals on first chunk of array modifier
  • Commented PR #115270: Volume Grid Sockets
  • Requested changes PR #114194: Geometry Nodes: Sort Elements node
  • Commented PR #115677: WIP: C++ BLI rect type
  • Accepted PR #115568: Fix #115548: Missed sort after multithreaded algorithm
  • Requested changes PR #115535: GPv3: Copy Materials to Selected operator
  • Accepted PR #115047: Fix #115037: Crash deleting tool node group from outliner
  • Requested changes, accepted PR #115580: Fix #115572: shape_key_remove operator leaves shared normals
  • Requested changes PR #115142: Geometry Nodes: Rewrite Scale Elements node
  • Accepted PR #115439: Compositor: UI: better node visibility for default node tree
  • Committed PR #115495: Cleanup: USD: Fix unused declaration and argument
  • Accepted PR #115532: Fix: Missing compositor update upon changing tree options
  • Commented PR #114797: Fix #114760: new attribute does not get active for some domains
  • Commented PR #115512: Geometry Nodes: extract global data passed to a geometry nodes invocation to separate struct


Tracker

  • Investigated: 6
  • Resolved: 3
  • Closed:


Next Week

I'll make a PR for basic curves custom normals support, make a design for matrix sockets, and continue some sculpt refactoring.

November 13 - November 26

The DDoS attack made it hard to make last week's report, so this is a combination of the last two weeks.

Lots of stuff finished recently! The main thing I'm happy about is getting the number of branches on my repo from around 40 to 23. That means I have far fewer WIP projects, which is helpful for my sanity. I'm looking forward to getting that number even lower.

Apart from the commits listed below, I also worked on the start of a sculpt brush refactor with Sergey. We're trying to make the implementation of the draw brush nicer to start, then move on to other brushes and multires, and dynamic topology. The main difficulty is still measuring performance reliably though. It's hard to commit to a few key decisions without that.


Changes / Features

  • Hydra: Parallelize and simplify submesh export 75f24a5f14
  • Refactor: Move object runtime data to separate allocation 4bcdc57fc8
  • Mesh
    • Improve remesh attribute transfer ba1c8fe6a5
    • Parallelize remaining topology maps bb80716244
    • Move sculpt mask to a generic attribute f2bcd73bd2
    • Copy small caches when moving mesh data to Main database e9db14b3d8
    • Add flag to store presence of overlapping topology 9785f2631e
  • Geometry Nodes
  • GPv3: Avoid unnecessarily creating cyclic attribute in hard erasor e28a782dbe
  • PR #114933: Refactor: Further improvements to bounds


Fixes

  • Fix: GPv3: Missing curve type counts update in hard erasor 02a95198d2
  • Fix: Avoid unnecessary conversions in rotation socket versioning 106de9f03c
  • Fix #114870: Object dimensions does not used evaluated geometry 14eb08c3a5
  • Fix #115202: Set Selection node crash in object mode ef3897f6a4
  • Fix #115170: Sculpt mode crash b63e31df57
  • Fix #115060: Swapped custom data mask in BMesh code 4dede4efa8
  • Fix #114822: Data transfer modifier doesn't work for face corner normals 451c054d9b
  • Fix #114841: Sculpt Multires drawing broken with no mask 1a8b5bcd43
  • Fix #114948: Parenting crash blender since ObjectRuntime refactor d46d1bbe6a
  • Fix #114737: Curves: Random selection crash in curve select mode e10ac17fdb
  • Fix: Missing space in property description 4edc138933
  • Fix: Duplicate node tools menus in sculpt mode b3d4fc80fd
  • Fix: Error in previous crazy space cleanup 8792f73446
  • Fix: Crash with crazyspace mesh sculpting 5bacfd5c44
  • Fix #114623: Node group asset added with wrong position from header 5b094ee770
  • Fix: Auto smooth versioning node group doesn't show in data-block picker 00551a3ed2
  • Fix: Error in previous commit b794bf173c
  • Fix: Incorrect default used when retrieving material indices 6d18fe76b5
  • Fix #114830: Sculpt line project inverted 31c1207c1a
  • Fix: Incorrect freeing in depsgraph RNA objects iterator da511f5573


Cleanup

  • Sculpt
    • Cleanup: Access sculpt attributes with C++ attribute API 301731692e
    • Cleanup: Remove sculpt session mask pointer 9781600d68
    • Cleanup: Remove unused return argument from "ensure mask" function 76dc180c3d
    • Cleanup: Use C++ BitVector for sculpt boundary info ee9265710a
    • Cleanup: Retrieve sculpt mask without write access 865929d4b1
  • Cleanup: Avoid shallow copy in OBJ exporter 932f20135d
  • Cleanup: Generalize some attribute propagation functions 9a28852494
  • Cleanup: Slightly generalize attribute gather function f3ba4115f2
  • Cleanup: Correct offset indices slice assert 876b624320
  • Cleanup: Remove unused old sequencer iterator 2b1b600456
  • Cleanup: Remove unused CustomData function f2aab07760
  • Cleanup: Grammar in comments 29f3d54e91
  • Bounds
    • Cleanup: Return Bounds type directly in mesh to volume code 62b4555d01
    • Cleanup: Acess geometry bounds more directly c56912eade
    • Cleanup: Access mesh bounds directly for Python raycast bc61167d8e
    • Cleanup: Remove unused edit mesh cage bounding box cache 807c076e28
  • Cleanup: Simplify crazyspace loop over mesh corners a0b9865aa6
  • Cleanup: Use enum class for ModifierTypeType 805e6b7525
  • C++ conversions
    • Cleanup: Use C++ types for crazyspace deform storage 4d7274b7f4
    • Cleanup: Use C++ types for modifier type deform callbacks 8f5ff2c5dd
    • Cleanup: Use C++ math functions in mesh normals code df960e5fc3
    • Cleanup: Move several blenkernel headers to C++ 3d57bc4397
    • Cleanup: Move draw_subdivision.h to C++ ea78af4b5d
    • Cleanup: Move BKE_modifier.h to C++ 7b51d32dd9
    • Cleanup: Remove unnecessary keywords in C++ headers 8d2b203a3d, f27aee857b, 0c1bb82fc4
    • Cleanup: Combine crazyspace C header with C++ header 8f362a175d
  • Cleanup: Remove mistaken reference binding to temporary 8a0079053f
  • Cleanup: Fix debug build error after recent commit fdae173ed4
  • Cleanup: Add const to MutableSpan methods 5371f5516c


Review

  • Requested changes PR #112677 WIP: Geometry Nodes: add support for gizmos
  • Requested changes PR #115278 GPv3: Lock unselect materials operator
  • Requested changes, accepted PR #114580 GPv3: Material locking
  • Requested changes, accepted PR #114850 GPv3: Fix Remove Material Slot and Unused Slots
  • Commented, accepted PR #114862 IO: C++ STL exporter
  • Commented PR #114362 ID properties: Support enum values with items
  • Commented PR #114699 Fix #114657: Color attribute from applied GN modifier not active
  • Commented PR #115115 Geometry Nodes: Edge Paths to Curves node speedup
  • Requested changes, accepted PR #114048 Geometry Nodes: Add a 'Group ID' input to the Fill Curve node
  • Accepted PR #115246 Geometry Nodes: Parallel Edges to Face Groups
  • Accepted PR #115245 Geometry Nodes: Edges to Face Groups speedup
  • Accepted PR #115131 Geometry Nodes: Edge Paths to Selection node speedup
  • Commented PR #115138 Geometry Nodes: Face Group Boundaries node speedup
  • Accepted PR #114910 Geometry Nodes: allow naming geometry sets
  • Commented PR #114922 Cleanup: Geometry Nodes: Parallel accumulation
  • Accepted PR #112794 Mesh: add index-independent test for mesh equality
  • Commented, accepted PR #114682 Mesh: Make edge_other_vert function branchless
  • Accepted PR #114791 Cleanup: Avoid shallow copy in PLY exporter
  • Accepted PR #115258 Fix: bevel weights in Simple mode of Solidify
  • Accepted PR #115233 BLI: change timeit to use fmtlib instead of direct cout
  • Accepted PR #115180 Fix #115105: Edge Crease Doesn't Transfer
  • Commented PR #114797 Fix #114760: new attribute does not get active for some domains
  • Accepted PR #115178 Fix #114860: Edge bevel weights in complex solidify
  • Accepted PR #114793 Fix: Typo in: Copy built-in attributes for masked curves type conversion
  • Commented PR #115026 Nodes: add int and bool to shader nodegroups
  • Accepted PR #115394 Fix #115368: Auto smooth node is added every time if the file has linked object
  • Accepted PR #115376 Refactor: GEO: Mesh selection header file
  • Requested changes PR #114194 Geometry Nodes: Sort Elements node
  • Accepted PR #111010 Cleanup: Remove iostreams include from timeit header
  • Accepted PR #114978 Fix #114648: Compositor executes upon editing non-compositor trees
  • Accepted PR #115001 GPv3: Show All Materials
  • Accepted PR #115038 GPv3: Hide Others operator
  • Accepted PR #115041 GPv3: Lock and Unlock all materials operators
  • Accepted PR #115272 GPv3: Lock Unused Materials operator
  • Accepted PR #115440 Cleanup: silence warning inconsistent-missing-override
  • Accepted PR #114724 BLI: Two digit ms precision for SCOPED_TIMER macro


Tracker

  • Investigated: 18
  • Resolved: 15
  • Closed: 1


Next Week

I'll continue to try to finish WIP changes, and make progress on some node tools topics and sculpt mode refactors.

November 6 - November 12

This week was mainly spent discussing geometry nodes design in a workshop with Dalai, me, Jacques, Simon, and Lukas. I'm pretty happy with the results. We agreed on a direction for lots of important topics (except there's more discussion that needs to happen about appended-asset deduplication). There's a blog post about it here.


Changes / Features

  • Mesh: Make vertex normal calculation deterministic 5052e0d407
  • Geometry Nodes: Support top-level instance meshes in boolean node 16553c2a44


Fixes

  • Fix #114686: Cannot execute node tool operators 821060f75a
  • Fix: Debug build error after previous commit 6273205c93
  • Fix: Remove support for node tool data-block inputs for 4.0 871c717c6e
  • Fix: Windows build error from missing template argument deduction 17b875fccf


Cleanup

  • Cleanup: Consolidate draw attribute extraction ae1b4a6a28
  • Cleanup: Remove C header from C++ math header 583bd9662e
  • Cleanup: Small cleanups to mesh normals calculation 0d1831cd2e
  • Cleanup: Follow style guide in new math function, use std:: namespace 70074a7d46
  • Cleanup: Remove unused functions ece4b6e84d
  • Cleanup: Add missing includes to node anonymous attribute header 15f1fe5ddb


Review

  • Requested changes PR #114048 Geometry Nodes: Add a 'Group ID' input to the Fill Curve node
  • Requested changes PR #114580 GPv3: Material locking
  • Requested changes, accepted PR #113978 GPv3: Set caps operator
  • Commented PR #114501 mesh: use faster acos() variant in normals calculation
  • PR #114628Closed Modeling: Implements adaptive Bezier curve tessellation
  • Commented PR #114549 PyAPI: Speed up Mesh.edge_keys using foreach_get and NumPy
  • Requested changes, accepted PR #114188 GPv3: Set selected curve material as active material
  • Accepted PR #114683 Cleanup: Geometry Nodes: General topology map creation in Shortest Edge Paths
  • Commented PR #114682 Cleanup: Mesh: Branchless function edge_other_vert
  • Accepted PR #114006 GPv3: Set Uniform operator for Thickness and Opacity
  • Commented PR #114558 : Skip non-existing UV maps on VBO upload
  • Accepted PR #114684 Cleanup: Geometry Nodes: Early returns in Shortest Edge Paths node
  • Accepted PR #114537 : Cryptomatte node not link drag searchable
  • Accepted PR #111010 Cleanup: Remove iostreams include from timeit header
  • Accepted PR #114638 Cleanup: Sculpt, use C++ types for PBVH proxy node API
  • Accepted PR #114636 Cleanup: Sculpt, use C++ vector types in internal types


Tracker

  • Investigated: 10
  • Resolved: 2
  • Closed: 4


Next Week

Next week I'll mostly try to finish things I've already started. Currently I have too many open pull requests. I'll also work with Sergey to make progress on sculpt mode changes. It's my last week In Amsterdam, so I'll probably have some more design discussions as well.


October 23 - November 5

Another busy week! Actually this includes two weeks (the few days before the conference last week). At the conference I gave a talk about my mesh refactoring project from the last two years. Beyong that I focused on bug fixing and code review, and some work on dynamic topology. I also talked with Simon and made some tasks for issues he's been running into.

  • Overall usability checkup #114280
  • "Lock" with node group asset "Append & Reuse" to prevent accidental editing #114058
  • Blur attribute node face corner handling #114275
  • Sample by Group ID #114278
  • Split curves node #114277


Changes / Features

  • Sculpt: Dyntopo: Consider all vertices in face set brush fbd49adfc4
  • Depsgraph: Hard-code visibility for "from IDs" builder ccfe952f34
  • BLI: Add "scatter" array_utils function 6935cd0798


Fixes

  • Fix: Broken node tool group data-block references 2893dc8ab7
  • Fix #114102: Node tool data-block inputs broken 66c1ca7419
  • Fix #113496: PBVH draw crashes and unsupported attribute types e05c36f56d
  • Fix #112973: Node tools: Incorrect redo behavior in sculpt mode 0f9dcafa76
  • Fix #114177: Crash in extrude mesh vertex mode with unsupported data d503f2ac33
  • Fix: Sculpt redo crash after undoing addition of mask db5cae78b7
  • Fix #113988: Deformed PBVH modifies original normals 5af8b839cf
  • Fix #113665: Sculpt mode does not unshare color attribute data 692292536f
  • Fix #114357: Dyntopo face set brush does not create face sets layer 90269dfe14
  • Fix #113752: Explode modifier edge cut option broken 74af0528f4
  • Fix #114077: Duplicate edges for two point evaluated curves 7dcd777379
  • Fix #114081: Auto smooth versioning node group missing UI data 7ba92a2a2f
  • Fix #114053: Sculpt visibility broken after undo f2627a55ee
  • Fix: Missing keyword for mesh sharpness angle argument c5262d9f9a
  • Fix: Incorrect PBVH mask drawing after recent change d6be6339f1
  • Fix: Selection input inivisible in set selection node 0e4a3bd7aa
  • PR #114425: Fix: Missing update of "all" library when refreshing library


Cleanup

  • Cleanup: Sculpt: Simplify face and face set iteration 44b79af4fc
  • Cleanup: PBVH: Remove redundant storage of face set metadata 756dea7ca1
  • Cleanup: Use utility function to fill triangle face offsets 22e706e87a
  • Cleanup: Remove unnecessary struct keywords in sequences headers 0ff4060cd3
  • Cleanup: Simplify construction of Group ID VectorSet df4df75317
  • PR #114340: Cleanup: Consolidate draw attribute extraction


Review

  • Requested changes PR #113539: Sculpt: Rewrite BMLog to support customdata and geometry undo steps
  • Requested changes PR #114048: Geometry Nodes: Add a 'Group ID' input to the Fill Curve node
  • Requested changes PR #113431: Geometry Nodes: Add Active Camera input node
  • Requested changes PR #114501: WIP: mesh: use faster acos() variant in normals calculation
  • Accepted PR #114049: Fix #113993: Bevel cutoff intersection type crash
  • Accepted PR #114052: BLI: Add std::string variant of BLI_uniquename_cb
  • Accepted PR #114283: GPv3: Multi-frame editing
  • Accepted PR #113908: GPv3: Named Layer Selection node
  • Accepted PR #113836: Sculpt: Better boundary preservation with dyntopo
  • Commented PR #114378: UI: Increase Node Label Name Limit From 63 to 255 Characters.
  • Commented PR #113933: WIP: Geometry Nodes: make instance handling more explicit when modifying all real geometries
  • Commented PR #113978: GPv3: Set caps operator
  • Requested changes PR #114188: GPv3: Set selected curve material as active material
  • Accepted PR #113357: Sculpt: Implement face set brush for dyntopo
  • Accepted PR #114320: PLY: import/export custom vertex attributes ()
  • Accepted PR #114262: PyAPI: Enable MeshPolygon.loop_start raw array access
  • Accepted PR #111909: VSE: use c++ container for strip iterator
  • Accepted PR #114475: Fix: Correct order of nodes in the Mesh > Write menu
  • Requested changes, accepted PR #114007: GPv3: Switch Direction operator
  • Requested changes PR #114006: GPv3: Set Uniform operator for Thickness and Opacity
  • Accepted PR #114017: Curves: Add radius transform mode to edit mode
  • Commented PR #114362: ID properties: Support enum values with items
  • Requested changes PR #106997: Geometry Nodes: Object and Collection Input
  • Accepted PR #114147: Fix: missing attribute in curves selection code
  • Accepted PR #114270: Fix #114240: Initialize output alpha for RGB color
  • Commented PR #114373: Cleanup: BLI: Parallel Transform
  • Requested changes, accepted PR #114088: Fix #114060: GPv3: Transform crash with multiple object editing
  • Accepted PR #114056: Fix #113919: Avoid crashes with unsupported new socket types
  • Accepted PR #114101: Fix #114094: Mask by Color brush has stopped working
  • Accepted PR #114038: Fix "Fix #102885": Wrong check is always False
  • Accepted Node Wrangler: Remove Switch Type operator -addons/pulls/104957 PR #104957
  • Accepted PR #114114: Nodes: Float draw position for sockets
  • Closed PR #114039: Fix "Fix #102885": Wrong check is always False (try/except version)
  • Accepted PR #114375: Cleanup: Use utility to fill index range in curve node
  • Accepted PR #114099: Sculpt: Add timing information for BMesh PBVH
  • Closed PR #107007: WIP: Geometry Nodes: Scene Sound Input Node
  • Closed PR #109846: Geometry Nodes: Add Random Rotation node
  • Closed PR #111544: Geometry Nodes: Change node python identifiers to node names
  • Closed PR #109405: Geometry Nodes: Easing Node
  • Closed PR #106989: WIP: Geometry Nodes Rna Input Node


Tracker

  • Investigated: 42
  • Resolved: 12
  • Needs Information: 1
  • Duplicate: 4
  • Closed: 15


Next Week

Jacques will be here at the HQ, so we'll go through a bunch of design topics. And I still have a couple more things to fix for 4.0.

October 16 - October 22

This was a busy week!

  • I worked with Sergey on the next portion of the dynamic topology project, getting edge attribute interpolation working so we can maintain boundaries. Though I didn't have as much time for that as I would have hoped. I did get to do some cleanups to sculpt mode in general though.
  • I helped to review and design the grease pencil integration with geometry nodes.
  • I finished the face map changes for 4.0, including a change to versioning and a new operator to select elements based on a boolean attribute.
  • I worked on the slides for my conference presentation, though I still have a bit to do there.
  • And then, as always, various code reviews and bug fixes.
  • I landed the auto smooth conversion to geometry nodes, the idea being that it should land early in 4.1.
  • I tested an implementation of an index switch node which would support switching between an arbitrary number of items, like a dumb version of the menu switch.
  • I made progress on the bounding box refactors. That's another big one, but it's a nice simplification so far!


Changes / Features

  • Mesh: Replace auto smooth with node group 89e3ba4e25
  • Refactor: Improve access to object data bounds 1cbd0f5a85
  • Sculpt: Use C++ Set to store PBVH Node BMesh elements 40080f618c
  • Mesh: Add versioning to convert old face maps to boolean attributes 820f0c24c4
  • Mesh: Add operator to select elements based on boolean attribute 3d236bc858
  • Geometry Nodes: Optimize joining of instances a5eaf6698a
  • Curves: Add edit mode operator to set attribute values 31ec00895f
  • Mesh: Update addons for auto smooth removal b1fbf73a08
  • BMesh: Add face duplication check to validation function ba83825cfa
  • PR #113975: Mesh: Add viewport normals simplify option
  • PR #113958: WIP: Draw: Split point cloud position and radius vertex buffers


Fixes

  • Fix #113842: Curves Info node length output always zero cdae07dccf
  • Fix: Missing edge domain in node tool set selection node bd4c310a19
  • Fix #113824: Setting curves select mode changes active attribute b2fe1bf624
  • Fix #112448: Leading deform modifiers skip adding original coordinates d7e501ce3b
  • Fix: MeshPolygon.use_smooth set inversed b4e6ef4279
  • Fix: Mistaken curves copy and reference binding in fillet node c77bbdcf82
  • Fix: Missing node tool menu update after moving asset to catalog b6b17ee5f9
  • Fix: Build error after bounding box refactor 5db502a122
  • Fix: Material selection node test failure e84ba67c73
  • Fix #113894: Node tool crash with deleted group output node f6d45d248c
  • Fix: Misleading node tools popover label eb41a7ec9d
  • Fix #113894: Node tool crash with deleted group output node f6d45d248c


Cleanup

  • Cleanup: Use C++ types instead of BLI_buffer in pbvh_bmesh.cc 062169698a
  • Cleanup: Simplify grease pencil line overlay size counting e1fd7a8a7b
  • Cleanup: Consistent use of curves::has_anything_selected 8ec6260ed5
  • Cleanup: Fix const correctness of node tree interface cache API 8c0fc33739
  • Cleanup: Remove disabled PBVH BMesh code 86bf9b1163
  • Cleanup: Simplifying freeing node editor space data f64ed2e963
  • Cleanup: Consistent const usage in headers, use std::move 7b09983423
  • Cleanup: Improve comment about CurvesGeometry::resize() 44fa749bbe
  • Cleanup: Retrieve virtual array single value in one call 60e7e89bfa
  • Cleanup: Const correctness, unused variable warning in GP draw code fba7671205
  • Cleanup: Comment style, reduce variable scope in pbvh_bmesh.cc 45478706b8
  • Cleanup: Remove unnecessary namespace specification aa34e2f2aa
  • Cleanup: Use simpler copying with begin iterator and count e52b269283
  • Cleanup: Use const in grease pencil drawing code 2528b6da9b
  • Cleanup: Use proper case for "uv_phi" class name 9a458314f2
  • Cleanup: Resolve clang compile warnings 5b108ae522
  • Cleanup: Avoid unnecessary check for empty curves 57c27b47b9
  • Cleanup: Remove unnecessary parentheses in switch cases 4c7fe8b583
  • PR #113957: WIP: Cleanup: Move object runtime data to separate allocation


Review

  • Requested changes, accepted GPv3: Named Layer Selection node PR #113908
  • Requested changes VSE: use c++ container for strip iterator PR #111909
  • Requested changes, accepted GPv3: Cyclical set operator PR #111904
  • Requested changes GPv3: Join Geometry/Realize Instances node PR #113844
  • Requested changes, accepted GPv3: Set Material node PR #113816
  • Requested changes Mesh: add index-independent test for mesh equality PR #112794
  • Accepted Geometry Nodes: new Split to Instances node PR #113083
  • Accepted BLI: Add std::string variant of BLI_uniquename_cb PR #114052
  • Requested changes, accepted GPv3: Material Selection node PR #113827
  • Requested changes, accepted GPv3: Fillet Curve node PR #113850
  • Accepted Nodes Rotation Socket Documentation PR #104584
  • Accepted Nodes: support looking up node sockets by identifier and name PR #113984
  • Accepted GPv3: Separate/Delete Geometry node PR #113828
  • Accepted GPv3: Set Material Index node PR #113821
  • Accepted GPv3: Delete Geometry node PR #113721
  • Accepted Fix #113993: Bevel cutoff intersection type crash PR #114049
  • Commented, accepted GPv3: Transform operators (translate, rotate, scale, opacity, radius) PR #111836
  • Accepted Fix: Dyntopo sculpt on plane destroys the mesh PR #113972
  • Accepted Fix: GPv3: Remap materials PR #113855
  • Accepted GPv3: Convex Hull node PR #113788
  • Accepted GPv3: Set caps operator PR #113978
  • Accepted Refactor: Return by value PR #113761
  • Accepted GPv3: Replace Material node PR #113818
  • Accepted UI: support different main word heuristics in string search PR #113648
  • Accepted Fix: GPv3: Drawing tool didn't initialize all attributes PR #114005
  • Commented WIP: Geometry Nodes: make instance handling more explicit when modifying all real geometries PR #113933
  • Commented Refactor: ANIM_setting_get_rna_values to return a Vector PR #113931
  • Accepted Geometry Nodes: Avoid Face Corner domain as prefer for Blur Attribute PR #113905
  • Accepted Fix #113860: Nullptr checks for node socket and panel name pointers PR #113924
  • Accepted UI: Remove Colons from Property Names PR #113797
  • Accepted Fix #113763: Float2 attributes on curves not rendering in Cycles PR #113884
  • Accepted Cleanup: Remove disabled PBVH BMesh code 86bf9b1163
  • Accepted Cleanup: Simplify public API of unique name functions PR #113934
  • Accepted Fix #102885: IDproperty subtype can cause Blender UI to throw exception PR #114003
  • Accepted Fix: USD Export: Calculate extents properly for lights PR #113910


Tracker

  • Investigated: 12
  • Resolved: 3
  • Closed: 3


Next Week

I'll mostly be doing things related to the conference, but also trying to fix some remaining bugs for 4.0.

October 9 - October 15

This week I helped with the geometry nodes grease pencil support that a few others are working on, did some work in geometry nodes, and otherwise spent my time in sculpt mode, including fixes, cleanup, and code review for dynamit topology features.

Sergey and I talked about face maps for a while and made a plan to lessen the "breaking" aspects of the removal in 4.0. I regret forgetting about that for a while earlier, the situation would be much simpler if I had added a feature or two early on in the 4.0 process.

I also made a video with Pablo about node tools. It was pretty fun to share that project more publicly.


Changes / Features

  • Geometry Nodes: Add default input option for node groups 20d8f27ed2
  • Nodes: Use index instead of reordering for draw order 1ccba4d9fe
  • PR #113510: WIP: Sculpt: Implement vertex data undo for dynamic topology


Fixes

  • Fix #113619: Incorrect nested group assets in compositor add menu 601fba20a6
  • Fix: Set selection node crashes with attributes on the wrong domain 50ed14f228
  • Fix: Sculpt dynamic topology doesn't draw active/render color attribute a6a2af5fdd
  • Fix #112448: Leading deform modifiers skip adding original coordinates 9b0188db03
  • Fix: Incorrect early return in recent cleanup f27ac434f6
  • Fix: Sculpt dynamic topology doesn't draw active/render color attribute a6a2af5fdd
  • Fix #113737: Missing UI text for geometry nodes handle type properties e083be6a9c
  • Fix #113736: Add modifier menu broken for surface objects d3151df74a


Cleanup

  • Cleanup: Use C++ arrays for SculptUndoNode 3e81f66998
  • Cleanup: Extract attribute function to copy values from group to group 7507251071
  • Cleanup: Simplify sculpt faces mask undo loop 9ab290e1b3
  • Cleanup: Use const pbvh node pointers for some accessor functions de47c2a8b4
  • Cleanup: Return PBVH node vertex indices with span instead of pointer cbb4ae80ba
  • Cleanup: Access mesh bounds more directly 4eeabd274e
  • Cleanup: Access mesh bounds directly ab9716f058
  • Cleanup: Move BKE_object.hh to C++ 976eaae02f
  • Cleanup: Remove unnecessary struct keyword in BKE_object.hh a935701a87
  • PR #113646: WIP: Cleanup: Avoid storing redundant state for sculpt colors
  • PR #113465: Refactor: Improve access to object data bounds


Review

  • Requested changes PR #113539: Sculpt: Rewrite BMLog to support customdata and geometry undo steps
  • Accepted PR #113742: Nodes: unify static and dynamic declarations
  • Requested changes, accepted PR #113614: GPv3: Curve Fill node
  • Suggested changes PR #113721: GPv3: Delete Geometry node
  • Requested changes PR #112794Mesh: add index-independent test for mesh equality
  • Accepted PR #113497: Nodes: add forward compatibility for dynamic node declarations
  • Accepted PR #113507: GPv3: Implement expanding of Grease Pencil component in the spreadsheet
  • Accepted PR #113702: GPv3: Reverse Curve node
  • Accepted PR #113659: GPv3: Curve to Mesh node
  • Accepted PR #110146: Fix: Geometry Nodes: Create instance attribute of the right type
  • Commented PR #112535: GPv3: Initial Geometry Nodes support
  • Accepted PR #113446: Fix #113287: Industry Compatible Keymap: Node Editor Search missing
  • Accepted PR #113502UI: allocate panel runtime data separately
  • Accepted PR #113634: GPv3: Curve to Points node
  • Accepted PR #113711Fix #113697: Fix timer leak from panel drag/animate processing
  • Accepted PR #113411: Fix: Node Editor: Improve info panel drawing
  • Requested changes PR #113512: WIP: GPv3: Add support for some more geometry nodes
  • Accepted PR #113598: GPv3: Add support for more geometry nodes
  • Accepted PR #112058: UI: Highlight Selected Item in View3D Mode Menu
  • Accepted PR #113717Fix #113429: Dirty evaluated curve
  • Accepted PR #104585: Fix spelling mistake
  • Accepted PR #110683: Fix #110666: Copy built-in attributes for masked curves type conversion
  • Accepted PR #113589: GPv3: Rename layer domain to just "Layer"
  • Accepted PR #113581: GPv3: Add support for simple geometry nodes
  • Commented PR #110769: Function Node: Hash Value
  • Commented PR #113630: Fix: Python node_utils.connect_sockets broken after API change
  • Commented PR #113584: WIP: UI: uiLayout based subpanels


Tracker

  • Investigated: 8
  • Resolved: 4
  • Closed: 3


Next Week

I'd like to spend more time on sculpt mode, work on my Blender conference talk, and spend time on some geometry nodes topics.

October 2 - October 8

This week I arrived in Amsterdam, so super busy, but fewer commits since there were a lot of in person discussions. Sergey and I worked out a plan to start getting dynamic topology improved in smaller incremental steps, where each step is a more obvious improvement.

We also talked a fair amount about how volumes should work in geometry nodes, and I helped look into some developments for grease pencil, especially the integration with geometry nodes.

I worked on default field inputs to allow building node groups that act more like builtin nodes. That's necessary for this "Random Rotation" node group.

Changes / Features

  • Geometry Nodes: Update set shade smooth node with domain, add note a10cc66432
  • PR #113175: Geometry Nodes: Add default input option for node groups
  • PR #113419: Nodes: Use index instead of reordering for draw order
  • PR #113412: WIP: Hydra: Parallelize and simplify submesh export
  • PR #113205: WIP: Mesh: Add flag to store presence of overlapping topology


Fixes

  • Fix: Incorrect rotation from 3D cursor tool node e59a2b9a21
  • Fix: False positive geometry randomization in split edges node 36f7d33121
  • Fix #113142: Sculpt fairing operators don't update normals 85580c5835
  • Fix #113128: Socket hide value not copied to group input ecb52140cd
  • PR #113367: Fix: Missing edge domain in node tool set selection node


Cleanup

  • Cleanup: Simplify BMesh PBVH draw data upload 9d201dc16b
  • Cleanup: Return early to reduce indentation for 3D cursor drawing ce4663403b
  • Cleanup: Simplify filling constant value per triangle in PBVH draw 5052fe489c
  • Cleanup: Else after return in curves trim b5b0a296b6
  • Cleanup: Avoid combining signed and unsigned integers 6305902b24


Review

  • Requested changes, accepted PR #110093: GPv3: Initial drawing tool
  • Updated PR #113083: Geometry Nodes: new Split to Instances node
  • Commented PR #113382: WIP: Improved parallelization of subdivision
  • Accepted PR #113164: UI: Add descriptions to a few geometry nodes
  • Accepted PR #113114: Geometry Nodes: deduplicate code to deal with dynamic socket amounts
  • Accepted PR #113410: Nodes: move socket declaration methods to base declaration builder
  • Commented PR #109893: WIP: Geometry Nodes: Add Quaternion Math node
  • Commented PR #113411: WIP: Fix: Node Editor: Improve info panel drawing
  • Accepted PR #110981: Cleanup: Replace usage of old BLI_array macros with C++ types
  • Requested changes PR #113353: WIP: Fix #113340: Socket naming consistency
  • Accepted PR #113144: UI: start search in menu when pressing spacebar
  • Accepted PR #112583: Custom Properties: Add extra subtypes for float array
  • Commented PR #111904: GPv3: Cyclical set operator
  • Accepted PR #113348: Sculpt: Improve support of face sets with dyntopo
  • Accepted PR #113354: Fix assert in PBVH face set drawing code
  • Accepted PR #113160: Fix: Geometry Nodes: dangling pointer in geometry after modifier evaluation
  • Accepted PR #113402: Fix #113387: Memory leak with Separate by Loose Parts


Tracker

  • Investigated: 10
  • Resolved: 3
  • Duplicate: 1
  • Closed: 1


Next Week

More of the same, mostly.


September 25 - September 29

This week I changed the way assets work for node tools and modifiers, fixed a bunch of node tool issues and a few bugs in sculpt mode, and did more code review, especially for wrapping up 4.0 features.


Changes / Features

  • Geometry Nodes: Move node tools out of experimental 1a7527b1df
  • Geometry Nodes: Expose non-asset tools 355ed0838c
  • Geometry Nodes: Require modifier tag for add menu, show non-assets af3461c387
  • Geometry Nodes: Add option to force inputs to be single values 6875925efa
  • Geometry Nodes: Store tool group in a separate editor property 9e495c5b06
  • Geometry Nodes: Fix Support for extending nested menus with assets b49c84276c
  • PR #5: Mesh: Add viewport normals simplify option


Fixes

  • Fix #112351: Sculpt implicit sharing thread safety crash 97f2b01ea9
  • Fix #112817: Nodes incorrectly "fully masked" after expand face sets 406de58674
  • Fix #112961: Crash marking Collection as an Asset 8774b20477
  • Fix #109599: Setting custom normals can skip marking some edges sharp 7449f0e14c
  • Fix #112900: Assert displaying mesh with hiding and no material indices c095962d06
  • Fix: Set node interface item active when added with link-drag-search 54ca0c93f9
  • Fix #112957: Incorrect PBVH multires grid iteration 79d0b71751
  • Fix: Compile error from unused module requested in CMake 1badb464b0
  • Fix #112817: Nodes incorrectly "fully masked" after expand face sets 8e188ed55b
  • Fix: Node tools shortcuts don't display in menus 34a1b5bdbd
  • Fix: Crash deleting geometry nodes node group e5e07c184e
  • Fix: Missing node asset menu updates after mark asset 395f279166
  • Fix: Assert requesting vertex group for unsupported object type dfa55f036e
  • Fix: Grammar in operator description 7e0691d027
  • Fix: Missing node asset unassigned non-asset label 03f6fe81b2
  • Fix: Use disabled status for non-selected node tool modes and types 93b285be4b
  • Fix: Missing node group name in non-asset node tool redo panel 772061d57f
  • Fix: Extra menu separator with node tools in nested menus 2ec192a54a
  • PR #112870: Fix: Continuous asset reloading in edit mode with no node tools


Cleanup

  • Cleanup: Move sculpt mask update to a separate function ca447ef542
  • Cleanup: Make PBVH iter mask not a pointer 9e5cf73b4d
  • Cleanup: Missing includes and forward declarations in header 2d19e345cd
  • Cleanup: Consistency between asset-extended menu UI templates 0cb01332f1
  • Cleanup: Move logic out of loops, remove unnecessary ui sublayouts d1fbc69e03
  • Cleanup: Move BKE_screen.h to C++ 916d4c9d9b
  • Cleanup: Remove unnecessary struct keyword in BKE_screen.hh 2aa393e727
  • Cleanup: Make format 06df854112 2e6b81f151


Review

  • Geometry: add utility to check for bad geometry element index dependence #113030 PR #113030 Accepted
  • GPv3: Initial drawing tool #110093 PR #110093 Requested changes
  • Fix #109491: Erratic behavior of materials for text objects #109746 PR #109746 Accepted
  • Geometry Nodes: support baking individual simulations #112723 PR #112723 Accepted
  • Subpanels for node group sockets #108565 PR #108565 Requested changes
  • Fix #112439: Don't hide sockets of Reroute node #112965 PR #112965 Accepted
  • UI: fix and improve a few messages #112975 PR #112975 Accepted
  • CurvesGeometry: Add initial vertex group support #106944 PR #106944 Requested changes, accepted
  • Cleanup: Nodes: Simplify drawing function #112860 PR #112860 Accepted
  • Fix node socket connection util after changes to the interface API #112960 PR #112960 Accepted
  • Fix #112022: allow vertex groups and attributes with same names again #112889 PR #112889 Accepted
  • UI: Add Preference to Instant Search in all Menus #112925 PR #112925 Accepted
  • Geometry Nodes: add Inspection Index to Repeat Zone #112818 PR #112818 Accepted
  • Fix #102885: IDproperty subtype can cause Blender UI to throw exception #112582 PR #112582 Accepted
  • UI: Input Placeholders #112104 PR #112104 Accepted
  • UI: Match Node Editor Node menu with Context menu #112924 PR #112924 Accepted
  • Fix #112933: Bug crash 17.0+ MSVC builds with function passed-by-value arguments captured in lambdas #112616 PR #112616 Commented
  • Fix #112817: Draw Face Sets not working #112824 PR #112824 Closed


Tracker

  • Investigated: 8
  • Resolved: 7
  • Closed: 1


Next Week

Next week I'm traveling to Amsterdam for six weeks! Besides that, I'm also planning to resolve a few limitations for node tools, and do some more work on ongoing projects.


September 18 - September 24

This week I worked more on polishing the node tools feature. It's still not clear if it will make it into 4.0, but I hope so. We'll see.

Using geometry nodes myself a bit, I made some small usability improvements to link drag search and the "Move to Nodes" operator.

I also wrote a design task about how I imagine the material interface to work in the future: Material reusability and fields


Changes / Features

  • Geometry Nodes: Add option to force inputs to be single values 6875925efa
  • Geometry Nodes: Filter data-block buttons for tools and modifiers 1c51f74cb4
  • Geometry Nodes: Don't require geometry input for "Move to Nodes" d1d570d318
  • Geometry Nodes: Disable viewer node shortcut in tool context 0fbb958417
  • UI: Improve geometry nodes tool popover layout 2cb34f7c0d
  • Curves: Add RNA API to add points 07f01b5fc2
  • Nodes: Move float values to "Value" node with link-drag-search 2419acf756
  • UI: Use "unassigned" icon for assets in modifier and node add menus c1954f9846
  • UI: Rename "No Catalog" node assets menus to "Unassigned" 0e1aca735a


Fixes

  • Fix: Exception creating geometry node group or node group socket 1cfed92c84
  • Fix #112500: Crash setting mesh line vertices to 0 9184ea415b
  • Fix #104893: Node wrangler: Shader node preview error with panels 42bba405f0
  • Fix #112590: Split edges crash with loose vertices 4709082e6e
  • Fix: Improve button alignment of single value node group operator inputs e44932473a
  • Fix: Crash drawing node with null panel name 89422a7719
  • Fix: Crashes in geometry nodes group data-block polls f7eb7ced58
  • Fix: Debug build error after recent cleanup c6380d772c
  • Fix: Missing "Add Shortcut" for node group operator 70ffc7a2de
  • Fix: Extra period in menu descriptions 5c9b628596
  • Fix: Missing units in quadrilateral node points inputs 4d07c08cc2
  • Fix: Swapped icons in node tool header popover 652aab0b31
  • Fix #112814: New geometry nodes always named "Tool" 15f24bd248 26e56d0b52
  • PR #112743: Fix: Missing node asset menu updates after mark asset
  • PR #112690: Fix #112351: Sculpt implicit sharing thread safety crash


Cleanup

  • Cleanup: Remove unused sculpt mask expand operator b838c34afa
  • Cleanup: Move sculpt mask fill to lambda, remove data struct 64ce21aa2a
  • Cleanup: Sculpt: Use C++ threading API 72a33623e6
  • Cleanup: Group forward declarations at top of geometry set header a531d19b3d
  • Cleanup: Move depsgraph headers to C++ 867f99c2af
  • Cleanup: Move softbody.c to C++ ef5e57bbff
  • Cleanup: Remove unnecessary struct keyword from newly C++ headers 8a9dad1f2c
  • Cleanup: Small changes in node interface item addition 8954b70d49
  • Cleanup: Add nodiscard to BitSpan and BitVector lookup methods 7b597c2bef
  • Cleanup: Resolve const correctness in grease pencil API 774b9607c9
  • Cleanup: Rename grease pencil function to access layer at index 0fd0539f04


Review

  • Commented PR #112179: WIP: Experiment: Geometry Nodes: support baking individual simulations
  • Accepted PR #112421: Geometry Nodes: use lazy evaluation in repeat zone
  • Commented PR #112723: Geometry Nodes: support baking individual simulations
  • Requested changes PR #112104: UI: Input Placeholders
  • Requested changes PR #112058: UI: Highlight Selected Item in View3D Mode Menu
  • Accepted PR #110828: UI: show recently selected items at the top of searches
  • Accepted PR #112591: Nodes: panel buttons, short names and material properties
  • Requested changes, accepted PR #112589: USD: fix import for uniform colors.
  • Commented PR #112472: Refactor: Geometry Nodes: Move "move value to socket" logic to editors module
  • Requested changes PR #112573: GPv3: Add statistics information
  • Commented PR #112503: Fix #112462: Panel buttons remain active after redrawing
  • Accepted PR #112520: Fix #112490: Always draw socket icons in "hidden" nodes
  • Accepted PR #112531: Nodes: add internal node zone type
  • Accepted PR #109924: Curves: Sculpt mode frame selected operator support
  • Commented PR #112616: Fix: Bug crash 17.0+ MSVC builds with function passed-by-value arguments captured in lambdas
  • Accepted PR #112527: Nodes: Rename ui_items property to items_tree
  • Accepted PR #112706: Fix #112664: Expand face sets freeze when cursor is on mesh boundaries
  • Accepted PR #112525: Fix #112521: Socket in_out type specified as a simple enum
  • Accepted PR #112473: Cleanup: Support value of rotation socket


Tracker

  • Investigated: 9
  • Resolved: 3
  • Duplicate: 1


Next Week

I'll merge the last things for 4.0

September 11 - September 17

This week I worked on node tools. We're down to just a couple tasks for 4.0 now. I also worked more on mesh triangulation and a few other random smaller things.

Changes / Features

  • Geometry Nodes: Update node tool menus dynamically cc83951951
  • Geometry Nodes: Show uncategorized assets in separate menus d2d4de8c71
  • Cycles: Use Blender headers to access geometry data, avoid copy 2fac2228d0
  • Mesh: Pre-fill loose verts and bounds cache of line primitive dd9f196c2e
  • Geometry Nodes: Skip redo panel for node tools without inputs c59d998ce5
  • Geometry Nodes: Show node tool name in redo panel ee1ee584de
  • Nodes: Support shortcuts for adding specific node group assets from menu 75d788f2d3
  • Attributes: Expose "is required" read-only property to Python 99f9a53321
  • Geometry: Move mesh primitives from nodes to geometry module 7344c7875a
  • PR #112264: WIP: Geometry Nodes: Port triangulate node from BMesh to Mesh
  • PR #112389: Geometry Nodes: Filter data-block buttons for tools and modifiers
  • PR #112400: Curves: Add RNA API to add points


Fixes

  • Fix: Duplicate node tool catalog in point cloud edit mode 05045c3e50


Cleanup

  • Cleanup: Remove unnecessary "add node search" #112056 PR #112056
  • Cleanup: Remove unused logic from geometry nodes operator f122193e24
  • Cleanup: Remove unnecessary extern "C" from Python files b67bf17139
  • Cleanup: Remove unused includes in cuboid primitive 67aad1f72d
  • Cleanup: Grammar and corrections in operator type documentation 4caa2dddd9


Review

  • Requested changes PR #111909: VSE: use c++ container for strip iterator
  • Requested changes, accepted PR #111931: USD: Support armature and shape key export
  • Requested changes PR #106944: Curves: Add initial vertex group support
  • Requested changes PR #104542: Geometry Nodes: Points to Curves node documentation
  • Accepted PR #111741: Fix #112331: Add update tags directly in bNodeTreeInterface API methods
  • Commented PR #110093: GPv3: Initial drawing tool
  • Accepted PR #104882: Fix #104865: Adjust Node Wrangler for node socket interface API changes
  • Commented PR #112327: WIP: I18n: make favorites menu entry names translations depend on language
  • Requested changes, accepted PR #112250: Nodes: Support for input/output sockets in same vertical space
  • Accepted PR #112363: Fix: Simulation Nodes: assert when scrubbing the timeline with simulation (Blender 3.6)
  • Commented PR #112326: Fix #112233: Panel collapsed state should not hide socket links
  • Accepted PR #111747: Fix: USD import: deform group name collision
  • Accepted PR #112280: Fix #112068: Crash when loading converted curves
  • Accepted PR #112227: Fix: 3D Viewport header missing update changing vertex groups
  • Accepted PR #104881: Fix: Adjust Node Wrangler texture setup operator for recent API changes
  • Accepted PR #112252: UI/I18N: Fix a couple of issues in new 'Add Modifiers' menu.
  • Commented PR #112473: Cleanup: Support value of rotation socket
  • Commented PR #112298: USD: Fix for spammy attribute prints for unsupported and non-array attributes
  • Commented PR #112241: Asset Shelf: Transparent asset shelf header with background for buttons
  • Commented PR #112254: WIP: Cleanup: Reduce number of parameters on RNA def numeric properties functions
  • Commented PR #112292: Fix #112285: Sculpt Mode: Mask brush smoothing is broken
  • Accepted PR #112234: Fix: USD export: revert renaming active UV maps
  • Accepted PR #112337: Fix #112330: Group sockets not initialized when created by link-drag
  • Closed PR #106871: UI: Import obj files by drag and drop


Tracker

  • Investigated: 5
  • Resolved: 1
  • Duplicate: 1


Next Week

I'd mainly like to finish the to-dos for node tools.

September 4 - September 10

This week I worked on updating the modifier interface, the auto smooth replacement task (I had a meeting with Campbell and Bastien where we agreed to move it to 4.1), and some node tools tasks.

Other than that I started a rewrite of the triangulate node to use Mesh instead of BMesh. That's nearly finished except for the "Beauty" mode for quads which is surprisingly complicated.


Changes / Features

  • Geometry Nodes: Extend add modifier menu with node group assets 6da4b87661
  • Mesh: Further optimize topology map creation 98e33adac2
  • Geometry Nodes: Hide node group selector for asset modifiers 0783debda8
  • Geometry Nodes: Show node group in modifier UI after duplication be68db8ff9
  • Geometry Nodes: Expose sharp edge status with builtin nodes 4e97def8a3
  • Geometry Nodes: Improved defaults when creating new tool b4dc16f32d
  • UI: Remove name property from node interface active panel UI 6642bd6220
  • UI: Add a separator before modifier context menu geometry nodes items 80b1d098a7
  • UI: Rename Geometry Nodes "Show Node Group Selector" property 75c57e924f
  • UI: Add separator after "Empty Modifier" in add modifier menu b51a2dde3f
  • PR #112166: Geometry Nodes: Update node tool menus dynamically


Fixes

  • Fix #111811: Corrective smooth modifier crash with zero vertices a8bbddc10b
  • Fix: Debug build error after previous commit c4cec77b91
  • Fix #109583: Avoid non-threadsafe writing to custom normals data c8c6f62cf3
  • Fix: Node link drag search attachment to existing group input broken f47de98def


Cleanup

  • Cleanup: Change mesh face triangle count macro to C++ inline function 9f998c3e3a
  • Cleanup: Avoid assuming guarded allocator in corrective smooth modifier 88a7860251
  • Cleanup: Move sequencer_intern.hh to C++ dcd0512eb1
  • Cleanup: Add comment about purpose of add modifier operator 82438b37ad
  • Cleanup: Use simpler face vert iteration in sculpt expand e52404db95
  • Cleanup: Use BitVector instead of BLI_Bitmap in sculpt expand f4505e7b0a
  • Cleanup: Simplify Hydra SubMesh creation and removal f5472dcebc
  • Cleanup: Change OffsetsIndices::data() to return Span instead of pointer 9db02c8617
  • Cleanup: Use C++ Set for expand snap enabled face sets 646b3555ff
  • Cleanup: Use const arguments to sculpt "get" functions 96f761a17c
  • Cleanup: Remove mesh validation assert in mesh code 2cc3a63216
  • Cleanup: Remove unnecessary struct keyword in C++ code 006104645a
  • Cleanup: Remove unnecessary search item in texture node add menu e86211cded
  • Cleanup: Use consistent static function names in sculpt_geodesic.cc 8bc1e5a0e9
  • Cleanup: Remove mistanly committed timer 644297cc6e


Review

  • Requested changes PR #111909: VSE: use c++ container for strip iterator
  • Requested changes PR #111931: USD: Support armature and shape key export
  • Accepted PR #111695: Nodes: Add PanelDeclarationBuilder for panels in builtin nodes
  • Requested changes, accepted PR #112140: Geometry Nodes: add Skip input to Simulation Output node
  • Requested changes PR #112058: UI: Highlight Selected Item in View3D Mode Menu
  • Requested changes, accepted PR #112185: Fix #112184: Adapt optimized case of Points of Curve node for domain
  • Requested changes PR #111747: Fix: USD import: deform group name collision
  • Accepted PR #110855: UI: support searching in menus
  • Accepted PR #111756: UI: Add canvas picker to paint modes in 3D Viewport
  • Accepted PR #111894: USD: skip exporting deform group attributes
  • Accepted PR #111514: Fix #109670: attribute shared between geometries even when edited
  • Commented PR #111193: WIP: Fixed 149 XCode compiler warnings. (needs revision)
  • Commented PR #112110: Fix #111978: Passthrough if there is no simulation state (backport to 3.6)
  • Commented PR #112111: UI: Use asset icon for "Mark Asset" in menus
  • Accepted PR #112023: Fix #112021: Crash dragging node groups into an empty node editor
  • Accepted PR #112047: Fix #111788: Label width needs to use UI scale to match node width
  • Requested changes PR #111813: Correct initialization of bNodeSocket::default_attribute_name
  • Accepted PR #111921: Fix #111779: drop asset shading group to GN editor still imports
  • Accepted PR #112109: Fix: Incorrect NodeTreeInterface move functions argument descriptions
  • Accepted PR #111838: Texture Nodes: Refactor Add menu
  • Commented PR #105841: Assets: Implement Traits
  • Accepted PR #112142: Fix #111832: Move the Node Group Icon to a first position in header
  • Accepted PR #112037: Fix #111898: Custom normals data transfer modifier does not work
  • Accepted PR #111958: Fix #111933: wrong rest position
  • Commented PR #106320: Fix #106235: Use consistent order for multi-input socket links
  • Accepted PR #111989: Fix #111936: Nodes forward compatibility data is not freed
  • Commented PR #111993: Workbench: Remove old implementation
  • Accepted PR #111994: Fix: Build error with Audaspace turned on
  • Accepted PR #112020: Fix #111983 : Context Path in the node editors is broken
  • Accepted PR #112205 : Fix #112087: Float curve flickers with aligned points at x axis


Tracker

  • Investigated: 12
  • Resolved: 2
  • Duplicate: 1


Next Week

I'll mainly work on some node tools things but also spend a bit of time on the auto smooth node group task to make some progress on the todos here.


August 28 - September 3

This week I landed a bunch of mesh changes I had been working on for a while, I worked more on the auto smooth port to geometry nodes, and did a bunch of code review. Towards the end of the week I worked on changes to the modifier UI in order to make the auto smooth change work better.

I worked on integrating geometry node group assets with the add modifier menu. That will be really important as custom modifiers are used more and more.
I also worked on a design for remaking the modifier stack into a list. My work here is coming full circle to how my contracted work started years ago! I think this is pretty elegant, especially as the single-modifier workflow is used more for the more complex things.


Changes / Features

  • Mesh: Rewrite split edges algorithm f41dc90925
  • Mesh: Add three cached topology maps 4e94db97e2
  • Mesh: Replace EdgeHash and EdgeSet with C++ classes 425b871607
  • Geometry Nodes: Avoid attribute copy in simple case of points to curves 7563b96945
  • Subdiv: Use index instead of pointer for grid to face map 2228006d5b b81a257059
  • UI: Remove gap for decorators in node group interface panel af56a4f0d3
  • PR #111718: Mesh: Make vertex normal calculation deterministic
  • PR #111717: Geometry Nodes: Extend add modifier menu with node group assets
  • PR #111675: WIP: Multires: Simplify threading and use C++ data structures
  • PR #111468: Attributes: Expose "is required" read-only property to Python
  • PR #111761: Geometry Nodes: Improved defaults when creating new tool


Fixes

  • Fix: Crash in sculpt mode with shared normals caches b339e3937d
  • Fix: Memory leak with node interface forward compatibility e160a4ceca
  • Fix: Compile error with Ghost X11 off and Wayland on eafe8332c7
  • Fix: geometry nodes asset traits not written to file 9600b74318
  • Fix: Various crashes and issues dragging node group interface 32ca4caaac
  • Fix: Crash dragging node interface panels at root level 78495acaa0
  • Fix: Crash adding panel to node group b36367e663
  • Fix: Incorrect assert in node tree interface copy 9fd4091f5b
  • Fix #111698: Sculpt draws unchanged normals on first stroke 2a28112bb8
  • Fix #111582: Delete geometry node incorrectly marks no loose vertices 7c57eb42d7
  • Fix: Build error with Audaspace turned off 249a03525c


Cleanup

  • Cleanup: Simplify mesh primitive grid and cuboid quad creation df7f22d28e
  • Cleanup: Simplify USD export mesh data access 59d1fc4b61
  • Cleanup: Use Map instead of std::map for USD mesh writer 0b23816d5c
  • Cleanup: Sculpt: Remove duplicate visibility update function c9621a002d
  • Nodes: Remove unused shader and compositor NodeItem definitions 15f5dfd45d
  • Cleanup: Remove unnecessary includes from C++ data structure headers fa34992def
  • Cleanup: Remove unnecessary/wrong solidify modifier normal recalculation 74bd927f7c
  • Cleanup: Remove redundant asserts about dirty normals bb181fb8f1
  • Cleanup: Simplify bContextStore API with C++ concepts feb14a4d38
  • Cleanup: UI: Store uiBlock context stores in vector instead of list 1763a46cbf
  • Cleanup: Use const for context store variables ceb3d75c18
  • Cleanup: Remove unnecessary Mesh C API functions 69c498084a
  • Cleanup: Remove unused BMesh include 3766084bf9
  • Cleanup: Correct outdated tree view item comment da0c7ca0c2
  • Cleanup: Fix unused variable warning 3f0eba32d4
  • Cleanup: Make SubdivCCG a non-trivial struct e56b1fc164
  • Cleanup: Small C++ changes to two tree view uses 840769d855
  • Cleanup: Add missing struct forward declaration fdd6065c21
  • Cleanup: Fix warning from mistaken copying od node tree d600a38e44
  • Cleanup: Fix else after return fe7412bbdc
  • Cleanup: Move BLO headers to C++ 3db523ab3e
  • Cleanup: Move IO headers to C++ 78dd7d91c4


Review

  • Requested changes, accepted PR #111348: Nodes: Panels integration with blend files and UI
  • Requested changes, accepted PR #109610: Geometry Nodes: Points to Curves node
  • Requested changes, accepted PR #111623: Geometry Nodes: refactor simulation storage and how simulation nodes access it
  • Requested changes PR #111741: Add update tags directly to bNodeTreeInterface to enable tagging by API
  • Requested changes, accepted PR #111589: UI: Move Auto-Offset toggle to User Preferences
  • Commented PR #110802: Node: Gabor Noise Texture
  • Requested changes, accepted PR #111368: Geometry Nodes: Support drag & drop for Materials
  • Accepted PR #110707: Mesh: Parallelize vertex and edge to corner topology map creation
  • Requested changes PR #111747: Fix: USD import: deform group name collision.
  • Accepted PR #111752: UI: support context dependent menus (aka assets) in menu search
  • Accepted PR #110855: UI: support searching in menus
  • Accepted PR #111145: UI: fix and improve a few messages
  • Accepted PR #111845: Geometry Nodes: generalize modifier simulation cache storage names
  • Accepted PR #111615: Fix #111607: Do not unregister internal nodes
  • Accepted PR #111799: PyAPI: Better error msg when re-using internal node id
  • Accepted PR #111739: Node Editor: show auto-attach status while moving
  • Accepted PR #111640: UI: Node Grid Adjustments for Line Width
  • Accepted PR #111822: Geometry Nodes: rename bdata to blob
  • Requested changes PR #111813: Correct initialization of bNodeSocket::default_attribute_name
  • Accepted PR #111798: Shading Nodes: Refactor Add menu
  • Accepted PR #111921: Fix #111779: drop asset shading group to GN editor still imports
  • Accepted PR #111815: Fix (unreported): Assert for mesh without corners
  • Commented PR #111740: BLI: add parallel_memset and use for normal calculation
  • Accepted PR #111707: Fix: socket hidden in the link drag operator for group input nodes
  • Accepted PR #111609: Customdata merging does not check layer limit on destination
  • Commented PR #111695: WIP: Add a PanelDeclarationBuilder for adding panels to builtin nodes
  • Commented PR #111766: UI: Show Labels for BSDF "Distribution" and "Subsurface Method"


Tracker

  • Reported #111817: "Move to Nodes" operator broken after node group interface refactor
  • Investigated: 9
  • Resolved: 3
  • Duplicate: 4


Next Week

I'd really like to commit the auto smooth to geometry node group conversion, including the changes to the modifier add menu. I assume I'll spend time resolving some node tools limitations, and maybe doing more cleanup in sculpt mode code too.

August 21 - August 27

This week I mainly focused on mesh normals, with the goal of finishing the conversion of auto smooth to a geometry nodes modifier. I made a design task for an asset to replace auto smooth, called "Smooth by Angle". I also met with Pablo where we discussed asset integration to modifiers and a more general UI overhaul there. We also discussed a reorganizing the compositor add menu.

As part of the work on rotation nodes, I made a design task about a Swap Node Operator meant to be a proper implementation of the feature node wrangler had for a while.


Changes / Features

  • Mesh: Share normals caches by splitting vertex and face calculation 383a145a19
  • Geometry Nodes: Initial basic rotation socket nodes 45d8a8b0c3
  • Nodes: Move rotation socket out of experimental 34e4bedcd8
  • Nodes: Change rotation socket color 4b26fbbd02
  • Nodes: Remove "Make Group" and "Ungroup" from add menu 7c2dc5183d
  • Geometry Nodes: Move tool-specific nodes to proper menus 550c15bccd
  • PR #111482: Geometry Nodes: Convert four nodes to use rotation socket
  • PR #111468" Attributes: Expose "is required" read-only property to Python


Fixes

  • Fix #111255: Sculpt mode crash for mesh with no faces 42bf06a57d
  • Fix #110516: Geometry nodes use attribute toggle boolean values broken a1dceeec00
  • Fix: Missing multires to faces visibility sync after box hide 4a0581eca2


Cleanup

  • Cleanup: Sculpt: Avoid unnecessarily changing vertex normals 111e586424
  • Cleanup: Use C++ threading API in sculpt/paint code cf9fcbf24e
  • Cleanup: Simplify PBVH update of mesh pointers 119fbba47d
  • Cleanup: Simplify, parallelize multires to mesh visibility propagation 4d82e1a7ee
  • Cleanup: Separate sculpt undo restore into types 7fc7441a7b
  • Cleanup: Use FunctionRef for PBVH filtering callback 1857df8d5b
  • Cleanup: Remove unused node function e7abe1fd76
  • Cleanup: Remove unnecessary mesh C API function f5b7813f3c
  • Cleanup: Remove unused sculpt function declaration d8757236e0


Review

  • Requested changes PR #111348: Node panels: Integration with blend files and UI
  • Commented PR #110828: UI: show recently selected items at the top of searches
  • Commented, accepted PR #111390: GPv3: Refactor code for the hard eraser
  • Requested changes PR #111429: Fix #110908: Crash when scrubbing timeline with sim node
  • Accepted PR #111282: Compositor: Refactor Add menu
  • Accepted PR #110042: Cleanup: Refactor Switch View node to use dynamic declarations
  • Requested changes PR #111368: Geometry Nodes: Support drag & drop for Materials
  • Accepted PR #110707: Mesh: Parallelize vertex and edge to corner topology map creation
  • Accepted PR #111514: Fix #109670: attribute shared between geometries even when edited
  • Accepted PR #111427: Fix #111174: dropped nodegroups from the asset browser show selector
  • Accepted PR #111421: Fix #111273: multiple vertex weight sliders show the same value
  • Accepted PR #111521: Fix #111504: Regression: Mesh draw corruption in sculpt mode
  • Commented PR #109924: Curves: Sculpt mode frame selected operator support


Tracker

  • Investigated: 5
  • Resolved: 2
  • Duplicate: 1


Next Week

More work on existing projects!

August 14 - August 20

I was on a bike trip this week. Checked in a bit with my laptop along the way though, so I might as well list that here.


Cleanup

  • Cleanup: Subdiv: Replace "stack or buffer" storage with C++ classes 39a40d6f84


Review

  • Accepted PR #111313: Cleanup: Reduce unnecessary mesh position copying
  • Accepted PR #111145: UI: fix and improve a few messages
  • Accepted PR #111270: Fix: Display nodelinks consistently across different UI scales
  • Accepted PR #110952: Node panels: RNA for node group interfaces
  • Commented PR #111243: WIP: UI: TreeView Drop Target Position Feedback
  • Commented PR #111282: Compositor: Refactor Add menu


Tracker

  • Investigated: 2


Next Week

A normal week, though I'll be on my laptop so things might be a bit slower.

August 7 - August 13

This week I was at Siggraph and traveling to and from LA. The conference was a lot of fun-- inspiring and huge. I saw some technical things I want to check back on when I get the time, but also I got the impression our current priorities were the right ones too, good to see!

I had the time for some cleanup and code review at the hotel or at airports.


Fixes

  • Fix: Potential error in RNA operator description callback d38a0cf537
  • Fix: Build error on windows after recent commit 0bd3c23f1b


Cleanup

  • Cleanup: Return std::string from operator name and description callbacks f0467b4615
  • Cleanup: Make sculpt face visibility test inline 9804b2244a
  • Cleanup: Add comment for mesh triangulation faces cache efacffebfc
  • Cleanup: Remove unused argument to PBVH draw 3d6a8ab54f
  • PR #111061: Cleanup: Use contiguous storage for delaunay triangulation arrays


Review

  • Requested changes PR #110093: GPv3: Initial drawing tool
  • Requested changes, accepted PR #109518: USD IO: Generic Attributes Support
  • Accepted PR #110952: Node panels: RNA for node group interfaces
  • Commented PR #111079: GPv3: Dissolve Operator
  • Accepted PR #110929: Fix #110723: cant drop object name on object field/socket in node editor
  • Accepted PR #110885: Node panels: New DNA and C++ API for node group interfaces
  • Accepted PR #111075: Fix #111073: Crash when F3 is pressed
  • Accepted PR #110686: Nodes: use auto registration for nodes
  • Accepted PR #110935: Fix #110464: rna_idprop_ui_create() fails to create new string property
  • Accepted PR #110963: Fix #110447: Curves random selection is reversed
  • Accepted PR #111002: Vertex Paint: Add set vertex colors option to lock alpha
  • Accepted PR #111052: Refactor: Solve invalid icon-id enum values, use type alias
  • Accepted PR #110619: Fix #110096: Crash Crash on calling curve pen operator
  • Accepted PR #111036: Fix #111024: Crash when adding attribute to curve object


Next Week

Next week I'm on vacation.


July 31 - August 4

This week I committed the existing node group operator patches, did code review, a bit of bug fixing, and looked some more into sculpt mode performance-- though with no real results this week.

One new design task this week:

  • #110807: Geometry node group input for "Single Value Only"


Changes / Features

  • Sculpt: Improve PBVH draw performance for meshes f10965dcb8
  • Geometry Nodes: Operators: Support more object types and modes fd9d22ba57
  • Geometry Nodes: Initial tool-specific nodes e3e6fb8ecf
  • Geometry Nodes: Draw node operator inputs in redo panel bc393c4033
  • Refactor: Retrieve node operator asset with property 65591b2c8c
  • Geometry Nodes: Rename "Operator" context to "Tool" 733f90bd24
  • Mesh: Replace older flip faces utilities 4309c32be6
  • Mesh: Add API functions to assign vertex normals eabff37483
  • Mesh: Move flip faces function to blenkernel 40de15d521
  • PR #110813: Geometry Nodes: Add warning for tools and text in node editor header


Fixes

  • Fix #110411: Mesh loop cut preview uses final instead of cage positions 29a338811c
  • Fix #110682: Loading old files crashes from missing DNA rename 9cad2e8771
  • Fix #110001: Edit mesh overlay text uses final positions instead of cage c126708d69
  • Fix: Missing updates for geometry node group tool properties 9909bf60c9
  • Fix: Node group operators reset mesh select mode 85bac9d292
  • Fix: Geometry nodes self object crash in node operator 4395e0da93
  • Fix: Duplicate "Tool" geometry nodes menu with asset catalog 444a42e71c
  • Fix: Array modifier assert when not recalculating normals d0d21f2934


Cleanup

  • Cleanup: Use references for mesh extraction render data and cache a049f3b5df
  • Cleanup: Make geometry set naming more consistent dc7979a056
  • Cleanup: Use const for Blender data in Hydra exporter 66dd1657b8
  • Cleanup: Small improvements to Hydra mesh and curves export e0efc234c8
  • Cleanup: Return std::string from operator name and description callbacks f0467b4615
  • Cleanup: Simplify mesh triangle material counting 55970fa367
  • Cleanup: Sculpt: Remove unnecessary visibility flushing e4e23bdd73
  • Cleanup: Simplify some parallel iteration over PBVH nodes 8104d6e95c
  • Cleanup: Split fsmenu.c before C++ conversion 97769581f5
  • Cleanup: Remove unused variable in pbvh draw code 02e0d7717b
  • Cleanup: Sculpt: Remove unused function to set vert visibility 12258d4931
  • Cleanup: Remove unused simulation data-block defaults 6806b1c93d
  • Cleanup: Sculpt: Use utility functions for setting face visibility 7114d2efa6
  • C++ conversions
  • Cleanup: Reduce indentation in pbvh clipping b54bca9f08
  • Cleanup: Sculpt: Use consistent operator function names c3685fe068
  • Cleanup: Make object material count function take a const pointer 39c3a86d8e
  • Cleanup: Make mesh normal calculation function const f97a51350d


Review

  • Requested changes PR #110065: Node previews in the shader editor
  • Accepted PR #110812: Custom Data: make get_layer_index_n always safely handle n overrun
  • Accepted PR #110810: Cleanup: avoid using NOD_static_types.h for creating the node.type enum
  • Commented PR #110707: Mesh: Parallelize vertex and edge to corner topology map creation
  • Requested changes PR #110275: Mesh Edit: implement an operator to smooth shape key deformation
  • Accepted PR #110803: Nodes: Remove the experimental "node panels" feature
  • Updated, committed PR #110539: Creator: move to C++ #110539
  • Accepted PR #110678: Fix #110471: Normal Edit modifier screws up UVs
  • Accepted PR #110575: Compositor: Improve link drag search
  • Accepted PR #110805: Cleanup: simplify usage of NOD_static_types.h in rna
  • Accepted PR #110619: Fix #110096: Crash Crash on calling curve pen operator
  • Accepted PR #110487: Fix #110485: Mesh to curve node incorrect implicit sharing crash
  • Requested changes, accepted PR #110670: Fix #106257: Move to Nodes does not work if the node tree has no Geometry input or output
  • Commented PR #110773: LibOverride: Add ID pointer to operations over ID pointers
  • Accepted PR #110800: Fix: simulation outputs empty geometry when going to frame zero


Tracker

  • Investigated: 7
  • Resolved: 4
  • Archived: 1
  • Duplicate: 1


Next Week

Siggraph next week!

July 17 - July 23

This week I was mostly stalled on my main project the node group operators, but in the meantime I looked into some performance improvements for sculpt mode, focussing on decreasing the time to switch from object mode to sculpt mode. I also updated some patches for normals and worked more on rewriting the edge split node. Some meetings and related discussions about node tools took a fair amount of time too.

I renamed some mesh data and make a follow-up task about renaming "loops" too:


Changes / Features

  • Mesh: Extract loose edges and vertices in two threads c4ac4ecc4c
  • Sculpt: Improve PBVH draw performance for meshes f10965dcb8
  • Sculpt: Remove dynamic topology "Smooth Shading" option a632f1ddfd
  • Sculpt: Multithread PBVH mesh triangle bounds calculation 79115c5c56
  • Sculpt: Parallelize grid bounds calculations for creating PBVH bed79d9ad1
  • Sculpt: Replace GHash with Map when building PBVH 69cf65732a
  • Mesh: Rename "polys" to "faces" 5e9ea9243b
  • PR #110479: Mesh: Split vertex and face normal calculation


Fixes

  • Fix #109583: Avoid non-threadsafe writing to custom normals data 580833165c
  • Fix: Mesh face normal calculation can give zero vectors f557222a7b
  • Fix: Remove static assert causing build error on macOS 95b2c252fb


Cleanup

  • Cleanup: Use C++ containers and spans for some PBVH data 1be70f22cc
  • Cleanup: Simplify iteration over mesh faces, use utility functions 0e87e25b37
  • Cleanup: Simplify removing curves in GP erasor stroke mode 189fc24f1a
  • Cleanup: Remove unnecessary manual mesh edit data destruction 673fc326db
  • Cleanup: Rename mesh custom data fields 95edff7495
  • Cleanup: Pass edge to corner map by value in normal calculation af19de3986
  • Cleanup: Small changes to GP smooth operator 0a33594d78
  • Cleanup: Avoid passing redundant face index in normal calculation bd4be36894
  • Cleanup: Access more mesh data with C++ methods f9a4fcd8cf
  • Cleanup: Pass array references with spans in GP eraser 78dba0bb17
  • Cleanup: Clarify string usage in PBVH draw 38fc111fc9
  • Cleanup: Use const reference for PBVH draw arguments 82f67a1b58
  • Cleanup: Use const for PBVH node grid indices 81e687b49d
  • Cleanup: Use const pointers in PBVH draw arguments 318f9b259b
  • Cleanup: Remove check for null object when building PBVH 79cb56e1f1
  • Cleanup: Remove using keyword for std::string in pbvh draw e749599f95
  • Cleanup: Sculpt: Use r_ prefix for return argument 1c9e32cab1
  • Cleanup: Make format aebc743bf1 795ca93de5 f3f31054ba


Review

  • Requested changes, accepted PR #109518: USD IO: Generic Attributes Support
  • Accepted PR #110577: Geometry Nodes: extract bake items from simulation baking
  • Requested changes PR #110065: Node previews in the shader editor
  • Commented PR #109846: Geometry Nodes: Add Quaternion data type to Random Value node
  • Accepted PR #110619: Fix #110096: Crash Crash on calling curve pen operator
  • Commented PR #110468: Modifiers: Add idname field to ModifierTypeInfo
  • Commented, accepted PR #110500: GPv3: Initial modifier support
  • Accepted PR #110552: BLF: Conversion of blf_font_w32_compat to c++
  • Accepted PR #110321: UI: fix and improve a few messages
  • Requested changes PR #110487: Fix #110485: Copy attribute only for same domai
  • Accepted PR #110200: UI: Refactor quick label tooltip implementation for buttons
  • Commented PR #110458: WIP: UI: Add initial UI support for ID pointers custom properties.
  • Commented PR #110124: WIP: UI: Node Dashed Lines Readability
  • Accepted PR #108234: UI: Rename Distort socket in the Lens Distortion compositing node
  • Accepted PR #110225: Fix #110210: Hide Value option doesn't work on color sockets
  • Accepted PR #109910: Fix #103410: name collisions between vertex groups and attributes
  • Closed PR #110251: Geometry Nodes: Add Transform Order to the Transform Geometry node
  • Closed PR #110240: Geometry Nodes: Add Invert option to Rotate Euler node


Tracker

  • Reported #110508: Crash accessing text style properties in object mode
  • Reported #110546: Edit text overlay not working after C++ conversion
  • Investigated: 5
  • Resolved: 2
  • Archived: 1


Next Week

I'd really like to get my existing node group operators patches landed.

July 10 - July 15

This week I mainly worked on bug fixes, node group operators, code review, and started adding support for face domain color attributes (in vertex paint and sculpt mode). One bug with the split edges node took a LOT of time and I'm not quite done with it yet. I'm much happier with the state of the code now though; it's a bit longer but easier to follow and doesn't have any intermediate states anymore.

Two new design tasks this week:

I have to respond to some valid points on the second one. I think it's probably not worth splitting up the color separate/combine nodes. I still think the math nodes are worth separating though, eventually.


Changes / Features

  • Geometry Nodes: Avoid geometry copies in "no cache" simulation 424c6edc53
  • Geometry Nodes: Hide node operators behind experimental option for now c8e0c69c73
  • Geometry Nodes: Remove assets loading warning from 3D view header baf1c79668
  • PR #110018: Refactor: Retrieve node operator asset with property
  • PR #109819: Mesh: Rename "polys" to "faces" #109819


Fixes

  • Fix #109462: Incorrect "No Cache" simulation cache invalidation 80f105e924
  • Fix #110107: Subdivide curves crash with empty input d74b984467
  • Fix: Adding node group asset doesn't respect import method 2549272f02
  • Fix #109840: Select similar crease broken after generic conversion 12d7f8e7c1
  • Fix: Draw manager uses empty positions after recent refactor a3e05f06a6
  • Fix: Potential crash with null simulation cache during playback 6fbe0e27ca
  • Fix: Node operators crash when using depsgraph f5ffdafea2
  • Fix: BLI: Assert in generic array move constructor 5ca29d293b
  • Fix: Build error in rigid body code with bullet turned off 791a06061c


Cleanup

  • Cleanup: Remove unused "Simulation" data-block f3f05daf11
  • Cleanup: Simplify RNA access of attribute data type and domain 282993e75f
  • Cleanup: Simplify retrieving color attribute, improve const correctness c728fa0663
  • Cleanup: Reduce use and scope of templates in vertex paint 087612c042
  • Cleanup: Move simulation nodes cache reset function to proper place 4d54e3b6e1
  • Cleanup: Use spans and float3 to store sculpt and PBVH vert positions f0b53777c8
  • Cleanup: Move Map performance test out of header a5a72019a9
  • Cleanup: Use C++ Array types for Edit Mesh SoA cache 3d383d383f
  • Cleanup: Use C++ types, references for custom normals 3fc45d6151
  • Cleanup: Fix macOS build error, move set performance test out of header 9a879b27b3
  • Cleanup: Return corner normal space by value 5c4694759b
  • Cleanup: Move ED_curves.h to C++ 5a86705d4c
  • Cleanup: Remove unused animation channel type be09e94f05, 90ba798885
  • Cleanup: Remove unused function 6d74a7173e
  • Cleanup: Make format 2c1a7d6960


Review

  • Requested changes PR #110063: WIP: GPv3 : Hard Eraser tool
  • Requested changes PR #109635: GPv3: Stroke smoothing operator
  • Requested changes PR #109703: Geometry Nodes: support materials in simulation state with data-block mapping
  • Requested changes PR #109924: Frame Selected operator for curves sculpting
  • Requested changes PR #109910: Fix #103410: name collisions between vertex groups and attributes
  • Commented PR #110099: Fix: Geometry Nodes: Sample curve crash with invalid curve indices
  • Accepted PR #110095: Fix #110021: Deform modifier binding can go wrong in certain stacks
  • Requested changes, accepted PR #109825: UI: Basic tree-view drag & drop reordering and inserting support
  • Requested changes PR #109836: Refactor: Mesh Merge: deduplicate code, no interpolation for edges
  • Commented PR #110016: UI: Customizable quick label tooltip for buttons
  • Accepted PR #105841: Assets: Implement Traits
  • Accepted PR #109764: Geometry Nodes: Blur node speed up
  • Commented PR #109394: Geometry Nodes: Propagate geometry component limitation on group declaration
  • Commented PR #110044: WIP: Volume grid attribute support in geometry nodes
  • Commented PR #110064: Use ImBuf instead of a raw buffer for compositor previews
  • Commented PR #109221: GPv3: Segment selection support for all relevant selection operators
  • Commented PR #109969: WIP: Mesh: Merge by Distance: Split code
  • Accepted PR #109851: Geometry Nodes: Rotation socket tooltip
  • Accepted PR #109733: GPv3: Add access functions for opacity and radius attributes
  • Accepted PR #108683: Fix: Removing layer in BMesh can destroy others
  • Accepted PR #109892: Fix #109885: Check if BVH tree is null in correct place
  • Commented PR #108001: Nodes: Move preview images to an overlay
  • Accepted PR #109996: Sculpt: Split paint_vertex.cc into paint_weight.cc
  • Accepted PR #109905: Geometry Nodes: add run-time data to geometry nodes modifier
  • Accepted PR #109871: Fix #99569: Socket type drawing of custom type in view template
  • Commented PR #109746: Fix #109491: Erratic behavior of materials for text objects
  • Commented PR #109919: Cleanup: Improve comments, rename variables, reduce indentation and use OffsetIndex API
  • AcceptedPR #109801: Cleanup: Prepare versioning_250.c to move on C++
  • Commented PR #109228: UI: Improved Initial Vfont Sizes
  • Accepted PR #110084: Fix #110083: Fix incorrect initialization of bounds max


Tracker

  • Investigated: 9
  • Resolved: 4
  • Duplicate: 1


Next Week

I'll be on vacation.


July 3 - July 9

This week I mainly worked on node group operators. I also did some code review-- mainly a PR to import and export generic attributes for USD, which is pretty exciting! I also worked on a few performance improvements in some random areas, and renamed Mesh "polys" to "faces" (in a PR for now).

Inputs are working for node group operators, though there are still a couple limitations.

The basics of the design for more object types for the operators is coming together. We won't use tags, but a more specialized UI in the node editor. That helps make things a bit easier to learn and a bit faster. You still have to open the asset browser to add the asset to a catalog though.

An initial UI for editing asset traits, to control how an operator can be used.


Changes / Features

  • BLI: Optimize utility for index counting 53416281bd, a3bfd6e20d
  • Mesh: Fix missing multithreading in part of BMesh to Mesh conversion 827baed610
  • Geometry Nodes: Fill new quad poly offsets in parallel 2b4666b17b
  • Refactor: Simplify mesh edit mode modifier evaluation 91b27ab637


Fixes

  • Fix #109691: Edge crease not handled in complex solidify 7538127a58, c65fa57b0b
  • Fix #109471: BMesh to Mesh conversion invalid UV boolean attribute data 87b8e2e18d
  • Fix #109745: Mesh poly normals RNA accessor returns vert normals 0f510f3ae9
  • Fix: Incorrect name for calculate simulation job 19e2d7cd0e


Cleanup

  • Cleanup: Simplify replacing component data in geometry set ec29d96d11
  • Cleanup: Reduce indentation in paint_vertex.cc 29bfd03009
  • Cleanup: Deduplicate color attribute domain and type RNA enums 475e8bcd97
  • Cleanup: Use C++ attribute API to add attributes in a few places 2a1ac6145a
  • Cleanup: Simplify access to next face corner in domain interpolation ec30217755
  • Cleanup: Correct two curves and mesh comments 7830d9f21e
  • Cleanup: Unused variable in mesh writing, C++ casting ca7f4122da
  • Cleanup: Remove unnessary C API for asset representation 1b4b90f5f7
  • Cleanup: Remove outdated comment for Mesh geometry component b0b5af5dd6
  • Cleanup: Use more explicit casting in mesh RNA code 96ad44a462
  • Cleanup: Move BKE_editmesh_cache.h to C++ 75b42d1d95
  • Cleanup: Various changes in modifier simulation cache 7b3097f6ff
  • Cleanup: Fix enum conversion warning in grease pencil code b0412ad3d1
  • Cleanup: Make format 97634b7f6e
  • PR #109821: Cleanup: Use C++ Array types for Edit Mesh SoA cache


Review

  • Requested changes PR #109518 USD IO: Generic Attributes Support
  • Accepted PR #109627: Fix #109565: Array modifier changes the Root vertex of Skin modifier
  • Commented PR #109733: GPv3: Add getters and setters for opacity and radius of a grease pencil drawing
  • Accepted PR #109164: Geometry Nodes: new repeat zone
  • Accepted PR #109287: Cleanup: Move versioning file 2.6 to C++
  • Commented PR #109764 Geometry Nodes: Blur node speed up
  • Commented PR #109453: GPv3: Add separate paint mode
  • Committed PR #109715: Editors: move some files to C++
  • Commented PR #105841 Assets: Implement Traits


Tracker

  • Investigated: 5
  • Resolved: 3
  • Archived: 1


Next Week

More of the same, but also I'll implement face domain color attribute painting, because otherwise the USD color attribute import will have to become weirder and more complex.

June 26 - July 2

This week I worked on node group operators and made a prototype for a button in the modifier interface to switch modes for editing attributes.

I'm finding the node tools stuff pretty exciting. The possibility of letting geometry nodes work better interactively is really cool. The possibilities are endless, and the idea makes Blender much more easily customizeable and scalable.

A first set of nodes that are only available when geometry nodes is run as a tool/operator.


Changes / Features

  • Geometry Nodes: Node group operators initial phase e4cc91a611
  • Geometry Nodes: Use implicit sharing for mesh to curve node simple case 301f13191b
  • Curves: Share positions array for single point profile at origin bef20cd3f1
  • Curves: Optimize curve to mesh with single point profile 48fad9cd0c
  • Curves: Avoid calculations in curve to mesh single point case 6e9f54cbda
  • Sculpt: Use a factor for mask extract factor property 95df909bcc
  • Point Cloud: Add initial edit mode support f89b32382a
  • Spreadsheet: Support selection filter for point cloud objects 267d449a50
  • PR #109628: BLI: Add and optimize utility for index counting
  • PR #109526: Geometry Nodes: Operators: Support more object types and modes
  • PR #109423: WIP: Geometry Nodes: Add button to switch context to edit attribute
  • PR #109517: Geometry Nodes: Initial operator-specific nodes


Fixes

  • Fix: Node group operator crash with group node 4f90504def
  • Fix: Assert in sculpt mask extract object creation 15cecd1833
  • Fix: Missing null check for forward compatibility in mesh conversion 5ae500b535
  • Fix #109547: Error creating geometry node group from property editor 6eea4acc62
  • Fix #109523: Crash applying modifier with shape keys f6f3a6a928
  • Fix: Spreadsheet filter toggle active when not functional a5b5623933


Cleanup

  • Cleanup: Sculpt: Remove unnecessary absolute values of face sets 5ccb458a21
  • Cleanup: Remove unnecessary modal callback for face set extract 9e78d4e646
  • Cleanup: Simplify mask usage when evaluating attribute ccfc67e4cd
  • Cleanup: Remove unused variable in curve to mesh conversion 49977c3aee
  • Cleanup: Simplify topology node deduplication comparisons 7be0d1481c
  • Cleanup: Mesh to Curve: Decrease variable scope, improve comments b2017978d4
  • Cleanup: Remove unused custom data type a1cc621e1e
  • Cleanup: Move NOD_socket.h to C++ 4369429101


Review

  • Requested changes PR #109518: USD IO: Generic Attributes Support
  • Requested changes PR #109393: WIP: Geometry Nodes: Curve intersections
  • Accepted PR #109444: Nodes: add nested node ids and use them for simulation state
  • Requested changes, accepted PR #109084: Geometry Nodes: Mix Rotations
  • Accepted PR #109164: Geometry Nodes: add support for serial loops
  • Commented PR #109287: Cleanup: Move versioning file 2.6 to C++
  • Accepted PR #109366: Curves: Reimplement random selection with mask
  • Accepted PR #104717: Fix: glTF importer shading flat/smooth
  • Accepted PR #109385: Cleanup: Remove unused variable in a add node search function
  • Accepted PR #109303: Fix #109295: Adding simulation item inconsistent with group interface
  • Accepted PR #109476: Fix: Assert creating offsets in duplicate elements node
  • Commented PR #109288: Simplified base color for socket types


Tracker

  • Investigated: 9
  • Resolved: 4
  • Duplicate: 1
  • Archived: 1
  • Known Issue: 1


Next Week

More work on node group operators, and hopefully moving forward with rotation nodes. Maybe we'll decide more solidly on the "switch context" button so I can work more on that too.

June 19 - June 23

This week I spent most of my time fixing bugs for 3.6. It took a while but I finally have no more high priority reports assigned to me. I also worked on a few larger projects:

  • Mesh Normals and Auto Smooth in 4.0 #93551
  • Node group operators initial phase PR #108947

Rotation nodes are held up because we didn't agree yet about whether to have more than one node or combine a bunch of operations into some "Combine/Separate Rotation" node.


Fixes

  • Fix #109070: Creating mesh from Python skips setting faces sharp ee352c968f
  • Fix #109236: Split Edges node skips loose edges b226c115e2
  • Fix #109231: Python defined socket type switching broken c9a8b1f13f
  • Fix: Meshes created by addons shaded smooth 4c21a4eaca
  • Revert "Fix: Revert changes in Mesh to Volume node and modifier to Blender 3.6" c1292b4a80, 9b708c8650
  • Fix #109060: Crash with mask modifier smooth option e516f25e8f
  • Fix #109161: Baking freeze with invalid edge array d622673f4b
  • Fix: Torus primitive shaded smooth after mesh refactor c3a12704de
  • Fix: Creating sharp_face attribute skipped with smooth set 30bf4c0945
  • Fix #108930: Mirror modifier handles custom normals incorrectly 2ef27684c5
  • Fix #109042: Bake from multires different from previous versions 00f88babed
  • Fix: Mistakenly duplicated code in previous split edges fix fa1121765d


Cleanup

  • Cleanup: Use newer IndexMask implementation in split edges node cd6a428259
  • Cleanup: Remove redundant name copying when building dynamic sockets b1d83e9bef
  • Cleanup: Remove unnecessary C wrappers from Mesh RNA cb07162c74
  • Cleanup: BLI: Deduplicate bounds merging eeecc24014
  • Cleanup: Quiet unused warnings in rna_mesh.cc c5fe62ac8e
  • Cleanup: Move NOD_geometry.h to C++ e570f13616


Review

  • Requested changes PR #109221 WIP: GPv3: Segment selection support for all relevant selection operators
  • CommittedPR #109297 Fix: revert changes in Mesh to Volume node and modifier to Blender 3.6
  • CommentedPR #109237 BMesh: Respect data alignment for attributes
  • CommentedPR #108639 EEVEE-Next: Irradiance Cache: Initial Implementation
  • AcceptedPR #109287 Cleanup: Move versioning file 2.6 to C++
  • AcceptedPR #109174 Geometry Nodes: Avoid index lookup from index mask
  • AcceptedPR #109305 Geometry Nodes: Move simulation panel higher in node editor sidebar
  • AcceptedPR #109293 Curves: Mask function for end points
  • AcceptedPR #109203 Fix: geometry nodes modifier property not working after changing it in Python
  • AcceptedPR #109352 Fix: Incorrect rotation socket hiding in raycast node
  • AcceptedPR #108995 Cleanup: Preparation to move versioning file 2.6 to C++
  • AcceptedPR #109222 Fix: Too complex to be optimized by compiler
  • AcceptedPR #109208 Fix: zero interior band width leads to no volume output
  • AcceptedPR #109143 Cleanup: MutableSpan: Add assert for catch negative indices
  • CommentedPR #109268 WIP: Fix: Geometry Nodes: Don't create dependency graph relations for linked socket values
  • AcceptedPR #109228 UI: Improved Initial Vfont Sizes
  • AcceptedPR #109172 Fix #109171: Delete curve instead trying to create empty result
  • CommentedPR #109240 GPv3: Select Alternate
  • CommentedPR #109303 Fix #109295: Make new simulation socket operator the same as new group socket
  • CommentedPR #109324 Fix #109307: Memory leak changing simulation item name
  • CommentedPR #108286 Animation: Make Vertex Weight Edit modifier inclusive
  • CommentedPR #109248 Cleanup: Remove unused include
  • AcceptedPR #109242 Cleanup: Remove unused variable from recent commit
  • AcceptedPR #109167 Cleanup: Undo revertions from last cleanup

Tracker

  • Investigated: 13
  • Resolved: 10
  • Duplicate: 1
  • Known Issue: 1


Next Week

I'd like to move on to the next phase of node group operators, and get some agreement about rotation nodes.

June 12 - June 18

This week I worked on node group operators and rotation sockets. The basics of both are working now.

Dynamic menus built from the asset catalogs of node group operators. I'd like to add point cloud edit mode, and use it as experiment of a node group only mode, that could be really cool.
Some initial rotaiton socket nodes, mostly just for separating and combining at this point.

I also worked on some mesh cleanups and moved more code to C++. And did a bunch of code review.


Changes / Features

  • Mesh: Move vertex/edge crease to generic attributes e5ec04d73c
  • Mesh: Forward compatibility with generic crease in 4.0 83ef3bc923
  • Attributes: Add quaternion rotation type 1e4b80fed9
  • Attributes: Support quaternion attribute in spreadsheet b275851d1c
  • Attributes: Add identity default value to quaternion type 612e306598
  • Nodes: Add rotation socket type, support in many geometry nodes 63dae2a105
  • Mesh: Update addons for edge and vertex crease changes 6e83949a13
  • UI: Use property split for geometry nodes modifier bake path 655f00bb41
  • Refactor: Move geometry nodes execute implementation for reusability 8a3dad6f14
  • PR #109030 : Geometry Nodes: Initial basic rotation socket nodes #109030


Fixes

  • Fix #108517: Mesh split edges can give invalid indices 8a11f0f3a2
  • Fix: Quadratic performance of simulation state frame lookup 261959cd9c
  • Fix #109043: Mask modifier smooth option broken 17aaff69c6
  • Fix #108817: Extrude node crash with vertex-only input 18350ba06a
  • Fix: Crash deleting all curve points 13d567ba92
  • Fix: Crash with "use sharp" turned off in weighted normal modifier 4834b301f0
  • Fix: Build error without OpenEXR a6931db38b
  • Fix: Fix two small link drag search issues, small cleanup 41f5ed970d
  • Fix: Avoid creating uninitialized attribute in distribute points node 89232d52db
  • Fix: Add missing header used by recent backport fix 05190a5a23
  • Fix debug build error, geometry nodes test failure 87a6b98875
  • Fix: OffsetIndices assert with invalid span 107c5e39aa


Cleanup

  • Cleanup: Move GeometrySet and components to proper namespace f4124ee02d
  • Cleanup: Access geometry bounds more directly 6301775f48
  • Cleanup: Use C++ accessors for mesh data 7826aed105
  • Cleanup: Use C++ accessor for mesh position attribute 68c6402666
  • Cleanup: Remove unnecessary DispList bounds call 2c7daa34b5
  • Cleanup: Remove unnecessary includes and declarations from mesh headers a43c7997aa
  • Cleanup: Remove unnecessary C wrappers for mesh evaluation functions af53207b43
  • Cleanup: Remove redundant copy of mesh fields f1d1caa44a
  • Cleanup: Use fmt library for geometry nodes error messages 31145ffce5
  • C++ conversions
  • Cleanup: Grammar: it's vs its 7d935f94f3
  • Cleanup: Use nullptr, clang format 1f0e206da6
  • Cleanup: Silence unused parameter warning f98e488311
  • Cleanup: Use functional cast for std::string_view 3db0c59ec1
  • Cleanup: Make curves/volume copy functions const 0ec8599de7
  • Cleanup: Make point cloud copy function const 8593c5fa11


Review

  • Accepted PR #108649: Nodes: Panel declarations for grouping sockets
  • Commented PR #109083: WIP: Make ComponentAttributeAccessor handle active/default_color_attribute
  • Commented PR #108915: WIP: Fix #108880: Skin and Miffor modifiers cause mesh collapse
  • Accepted PR #108995 : Cleanup: Preparation to move versioning file 2.6 to C++
  • Accepted PR #108535: Fix #108049: Nodes pasting can leave multiple active nodes
  • Accepted PR #108332: Fix #108141: Group Insert operator creates invalid links
  • Commented PR #108700: WIP: Curve-to-Mesh node Even Thickness
  • Accepted PR #108686: Cleanup: replace the use of listbase in io_alembic.cc with vector
  • Commented PR #109039: WIP: Cleanup: Node panels fixing/simplification
  • Accepted PR #108998: Cleanup: Move space nla files to C++
  • Accepted PR #108959: Cleanup: Move space sequencer files to c++
  • Commented PR #108970: GPv3: domain support for selection operators (domains point and stroke)
  • Commented PR #108864: GPv3: Select ends operator
  • Accepted PR #108976: Geometry Nodes: use shared_ptr for sharing simulation cache
  • Accepted PR #109016: UI: Add type-safe C++ button apply function object
  • Accepted PR #109052: Fix #109047: Screw modifier's smooth shading option does not work
  • Accepted PR #108484: Cleanup: Move versioning file 2.7 to C++
  • Accepted PR #107987: UI: improve layout for the texture mapping panel
  • Accepted PR #108801: Geometry Nodes: crash when propagating attributes
  • Accepted PR #108990: Fix #108977: Propagate material from first point cloud by Join Geometry node
  • Accepted PR #109068: Fix: Sculpt: Remove face map option from face set initialization
  • Commented PR #108924: BLI: Add Span template for arrays with known size
  • Requested changes PR #104416: Geometry Nodes: new Axis to Euler node
  • Commented PR #109012: Cleanup: various tweaks to the transform snap object code
  • Accepted PR #108956: Cleanup: float2 in nodeToView & nodeFromView in BKE_node.hh
  • Accepted PR #108412: Fix #108376: Copy from geometry to other node tree types resets shapes
  • Accepted PR #109056: Fix #108053: Make the Collada UV sets enumerated from zero


Tracker

  • Investigated: 9
  • Archived: 1
  • Resolved: 5
  • Known Issue: 1


Next Week

I have some high priority bugs to fix for 3.6, and I'd like to commit the first phase of the node group operators project.

June 5 - June 11

This week I worked on bug fixing (including all of Friday on an unfortunate bug in the mesh edge split implementation), rotation attributes, some cleanup to geometry nodes for node group operators, and cleanup to meshes and the mesh modifier stack.


Changes / Features

  • Mesh: Remove face map list, convert to integer attribute 46cf093270
  • Mesh: Fix remesh color attribute propagation, improve performance 2b45f2d662
  • Geometry Nodes: Use smaller grain size for sampe nearest surface node 65d294c385
  • BLI: Add hash function to quaternion type 65d8cfd82d
  • PR #108678: Attributes: Add quaternion rotation type


Fixes

  • Fix #108571: OBJ vertex group import crash 41d994c9ac
  • Fix #108788: Data transfer nearest interpolated broken 6a3ca93c7e
  • Fix: Build error after previous remesh fix 0dde6ab424
  • Fix: Amend previous windows build error fix fd74b280d9
  • Fix: Remove non-threadsafe BMesh assertions in Mesh conversion d9dfa782eb
  • Fix: Compile error in main after recent fmt usage 708dfbb91b
  • PR #108826: Fix #108517: Mesh split edges can give invalid indices


Cleanup

  • Cleanup: Avoid curve to mesh conversion in some deform modifiers 73d921a0c6
  • Cleanup: Fix mistaken dependency between rotation headers 04422064fb
  • Cleanup: Avoid using custom data type enum incorrectly 250c9ccc10
  • Cleanup: Simplify namespaces in geometry component files 319b68763f
  • Cleanup: Use explicit default for corner normals optional parameter d651ee69bd
  • Cleanup: Fix mistakenly nested loops in versioning code 6ceb6fa27a
  • Cleanup: Use const for modifier utility function 5ee22dd490
  • Cleanup: Remove disabled code from particle system modifier c2430e55c8
  • Cleanup: Remove unused deprecated socket type decf089e06
  • Cleanup: Remove unused forward declaration 3503f7675c
  • Cleanup: Remove argument from deform modifier utility function 102c015306
  • PR #108637: Refactor: Simplify mesh edit mode modifier evaluation #108637


Review

  • Requested changes Nodes: Category declarations for grouping sockets #108649 PR #108649
  • Requested changes Fix: Removing layer in BMesh can destroy others #108683 PR #108683
  • Requested changes, accepted Curves: Add separate start and end amounts to Select End operator #108799 PR #108799
  • Requested changes More flexible callback for persistent panel expand flags #108648 PR #108648
  • Accepted Improvements for "Geometry Node Editor" page #104483 PR #104483
  • Commented GPv3: "Select First"/"Select Last" operators #108864 PR #108864
  • Commented, accepted Mesh: Remove unnecessary mesh position copying #108721 PR #108721
  • Commented, accepted Fix #108737: Python error in Property Editor search menu #108795 PR #108795
  • Requested changes Cleanup: Geometry: Some unification in working with attributes in realize instances #108821 PR #108821
  • Requested changes, accepted adds docs for new geonodes corners_of_edge #104464 PR #104464
  • Commented UI: Asset Shelf (Experimental Feature) #104831 PR #104831
  • Commented UI: Add Mute property to node panel #108634 PR #108634
  • Accepted Add Catmull Rom as supported types to relevant node pages #104473 PR #104473
  • Accepted GPv3: "Select Box" operator #108661 PR #108661
  • Accepted Refactor: Pass deformation data to curve selection #108650 PR #108650
  • Accepted Fix #108578: Crash when unlinking input sockets #108623 PR #108623
  • Accepted Fix: UI: cannot copy-paste many array buttons in nodes #108349 PR #108349
  • Accepted Fix #108198: Particle hair crash when using Hair Dynamics #108480 PR #108480
  • Accepted Fix #108591: Handle null material adding paint slot #108592 PR #108592
  • Accepted Cleanup: Correcting default cases in node.cc #107339 PR #107339
  • Accepted Cleanup: Move io files to c++ #108477 PR #108477
  • Accepted Fix: Crash when using loop select on edge that has only 1 face #108759 PR #108759
  • Accepted Fix: Face loop select toggle behaviour in paint mode #108753 PR #108753
  • Accepted Cleanup: Fix comment warning #108676 PR #108676
  • Commented Fixing typo and rephrasing the Island Index section of the Mesh Island node #104481 PR #104481
  • Closed Cleanup: Geometry: Avoid nesting with simpler material handling in realize instances #108822 PR #108822
  • Accepted Cleanup: Fix strict compilation warnings #108803 PR #108803


Tracker

  • Investigated: 9
  • Archived: 1
  • Resolved: 5


Next Week

I'll post a design task about mesh normals, update the initial node group operators patch, and work more on rotation sockets.


May 30 - June 4

This week I worked on the delete geometry node, code review, splitting out a small change from the node group operators branch, and on rotation sockets. I also did code review and looked into fixing some high priority bugs I caused in the last few weeks. Monday was a holiday here, and I was moving to a new appartment later in the week, so I wasn't able to work full days.


Changes / Features

  • BLI: Improve IndexMask::complement() performance 49b48209e7
  • Geometry Nodes: Rewrite mesh delete geometry node 50bfe1dfe3
  • Geometry Nodes: Improve delete geometry performance with vertex groups ab6860f3de
  • Geometry Nodes: Copy no loose vert/edge status in delete geometry node 9e9e0bf6d0
  • Mesh: Forward compatibility with generic bevel weight in 4.0 f75af7cbf5


Fixes

  • Fix #108039: Incorrect results when setting custom normals 214da4b6b4
  • Fix #108273: Mirror modifier resets copied custom normals 1551d7f033
  • Fix #108330: Resample node crash with empty curves ac4b76318a


Cleanup

  • Refactor: Remove pre-2.8 function to reevaluate a single object e64b3c8212
  • Cleanup: Simplify retrieval of evaluated point cloud for conversion c39bb12744
  • Cleanup: Use unique_ptr, references for UV aabb islands c5694fdf10
  • Cleanup: Remove unnecessary assert 37f6af9e2c
  • Cleanup: Simplofy use of modifier eval context flags 66d20c8723
  • PR #108482: WIP: Refactor: Move geometry nodes execute implementation for reusability


Review

  • Requested changes, accepted PR #108462: GPencil: Add operator to create new grease pencil object
  • Accepted PR #107653: Paint: Add loop select for faces
  • Accepted PR #107968: Geometry Nodes: Add "Corners of Edge" node
  • Accepted PR #108541: Cleanup: Parallel edge vertices selection in Delete Geometry node
  • Accepted PR #108540: Fix #108537: Incorrect early return in delete geometry node
  • Accepted PR #108359: Node Editor: Don't change size of resize area for frame nodes with zoom
  • Accepted PR #108375: Fix #108336: Treat node sockets with muted links as linked
  • Accepted PR #107460: Fix #103068: Link insert offset not working when rotating/scaling nodes
  • Accepted PR #108411 Fix: remove materials from simulation state in all cases
  • Accepted PR #104465: Fix small grammar errors in Simulation Zones page
  • Accepted PR #108286: Animation: Make Vertex Weight Edit modifier inclusive
  • Commented PR #108468: WIP: Geometry nodes: Basic volume simulation support
  • Commented PR #108477: Cleanup: Move io files to c++
  • Accepted PR #108476: Fix: Redeclaration variable in loop
  • Commented PR #108529: Cleanup: int16_t casting in index_mask.cc
  • Commented PR #108535: Fix #108049: Nodes pasting can leave multiple active nodes
  • Commented PR #108542: Cleanup: Replace C includes
  • Accepted PR #108271: Fix #108266: sculpt auto created color attribute not set as render color


Tracker

  • Investigated: 5
  • Archived: 1
  • Resolved: 2


Next Week

I'd like to finish rotation sockets and the first iteration of node group operators, and fix more of the high priority bugs.

May 23 - May 28

A 4.5 day week here-- I took most of Monday off. I spent a fair amount of time this week unifying things after the index mask refactor landed, which gave some nice improvements to the delete geometry node (I'm also looking at simplifying that for meshes locally). Besides that, I looked into bugs, did some code review, kept some PRs up to date, and spent a bit of time with the node group operators branch (kept getting distracted from that though!)


Changes / Features

  • Curves: Optmize and simplify point and curve deletion f63cfd8e28
  • Curves: Avoid inverting selection when deleting elements 865f14c641
  • Curves: Improve IndexMask usage in curves sculpt brushes 1b19f62917
  • Mesh: Reimplement and unify topology maps 4d841e1b35
  • Curves: Use simpler index mask logic in various places d7e671028c
  • Mesh: Remove deprecated argument to split_faces API function efbcfd8703
  • PR #108331: WIP: BLI: Improve IndexMask::complement() performance


Fixes

  • Fix: IndexMask slice and offset ignores offset 6bf3831b2c
  • Fix #108226, #108219: Crash in mesh validation in importers 39780b39bd
  • Fix #108258: Sculpt mode crash after remesh de2c8416a0
  • Fix: Crash entering vertex paint mode 1c88721442
  • Fix #108108: Remesh modifier crash with empty result 34791dc37b
  • Fix #108175: Missing subversion bump for recent geometry nodes change ba880db09a
  • Fix: Crash with "use sharp" turned off in weighted normal modifier d168df7c23
  • Fix #108034: Multires simple subdivide crash 2262ea079b
  • Fix: Windows build error in template code a6eae61b52


Cleanup

  • Cleanup: Standardize delete geometry code ea937b304d
  • Cleanup: Simplify IndexMask usage in two geometry nodes 5063f7a725
  • Cleanup: Remove IndexRange::as_span() static array and cache 986ff5a3a4
  • Cleanup: Consolidate public point cloud/mesh conversion functions 93a2e5dbfa
  • Cleanup: Simplify iteration in align euler to vector node 379a8b700b
  • Cleanup: Rename loose edge and loose vert variables in draw code 4a7cfa18e2
  • Cleanup: Remove template in vertex color transform operators fa8351486f
  • Cleanup: Remove unnecessary template in curve subdivide node e704ebaba4
  • Cleanup: Use C++ BitVector in subdiv code instead of Bitmap 9fd8fe134d
  • Cleanup: Corrections in IndexMask comments d049e622bd
  • Cleanup: Move offset size copying utility to generic header 0b0b6a687a
  • Cleanup: Mark deprecated custom data types as such 9268a47b5b
  • Cleanup: Remove unnecessary namespace specification de0f11515e
  • Cleanup: Remove #pragma once in .cc files 14e6a5c44c
  • Cleanup: Fix uninitialized variable warning in bit span test f78639ff9f


Review

  • Requested changes, accepted PR #104629: BLI: refactor IndexMask for better performance and memory usage
  • Requested changes PR #107653: Paint: Add loop select for faces
  • Commented PR #105690: WIP: I18n: add per-label translation contexts for nodes
  • Requested changes, accepted PR #108227: UI: Fix and improve a few messages
  • Requested changes, accepted PR #108291: Mesh: Avoid position copying in corrective smooth modifier
  • Accepted PR #107968: Geometry Nodes: Add "Corners of Edge" node
  • Accepted PR #108201: Geometry Nodes: store path to simulation bake in modifier
  • Accepted PR #108100: Move versioning file 2.8 to C++
  • Accepted PR #108220: Geometry Nodes: expose simulation bake path in UI
  • Commented PR #108234: UI: Rename Distort socket in the Lens Distortion compositing node
  • Commented PR #108289: EEVEE: Fix non-deterministic codegen preventing shader cache to work


Tracker

  • Investigated: 7
  • Resolved: 5


Next Week

I'd like to split some changes from the node group operators branch and make it a bit more generic so it's not just for curves. Besides that, I'd like to make progress on rotation sockets and the auto smooth replacement.

May 15 - May 19

This week I worked on a few projects:


Changes / Features

  • Core: Write mesh and movieclip with new format 1b63a290c6
  • Geometry Nodes: Only use realized geometry in mesh boolean node fc06a471f1
  • Mesh: Move bevel weight to generic attribute 2a56403cb0
  • Geometry Nodes: Keep loose vert/edge tags for extrude and split edges 381fae91b1
  • Mesh: Remove sculpt vertex colors from RNA API 6805657a39
  • Carver: Update for change in bevel weights API 874d7bf885
  • PR #107954: WIP: Geometry Nodes: Rotation type
  • PR #108089: Mesh: Move vertex/edge crease to generic attributes
  • PR #108014: WIP: Mesh: Replace auto smooth with node group
  • PR #104609: Mesh: Update addons for auto smooth removal


Fixes

  • Fix #108034: Multires simple subdivide crash 0eba8ac85a
  • Fix: Assert loading undefined geometry node 216cb9e3f0
  • Fix: Missing loose vertices converting BMesh to Mesh 112a5196f6


Cleanup

  • Cleanup: Undo move of functions in previous node cleanup commit f3babec2df
  • Cleanup: Add a function to sample mesh point normals 468295cb7c
  • Mesh: Remove deprecated face/vert custom data API d41021a7d4
  • Cleanup: Remove redundant node type lookup function 859c0d9edf
  • Cleanup: Remove unused node function for finding link d87547abd5
  • Cleanup: Remove unnecessary struct keywords in node header 320ac28f75
  • Cleanup: Remove redundant writing of old face set type 9bdfb15e98
  • Cleanup: Remove deprecated unused fields in raycast node ea64b2ce08
  • Geometry Nodes: Remove realize instances legacy behavior f17ea1f2a7
  • Cleanup: Add function to check if named custom data layer exists f106579a9a
  • Cleanup: Rename mesh loose edges tag function 71d22331b1
  • Nodes: Remove deprecated useless width_hidden property 30a20b4def
  • Node Wrangler: Remove deprecated useless width_hidden property 0c0b00d6df
  • Cleanup: Add version after linking function for 4.0 series 180c72a708


Review

  • Requested changes, accepted GeometryNodes: Add "Corners of Edge" node
  • Accepted PR #107656: Geometry Nodes: Sample Volume node
  • Accepted PR #107790: Cleanup: Move BKE_node.h to C++
  • Accepted PR #105375: USD Export: New Curves/Hair Support
  • Commented PR #108001: Move the node previews to the tooltip region
  • Accepted PR #107945: Fix #107633: USD import: duplicate shader nodes
  • Commented Refactor Render Result to allow implicit buffer sharing PR #108045
  • Accepted Cleanup: Fix copyright date in new bke header PR #108112
  • Closed Sculpt: Fix #107123: New normals impl. for PBVH_FACES PR #107456


Tracker

  • Investigated: 4
  • Resolved: 2
  • Archived: 1


Next Week

Hopefully I can finish some of the things I started this week, and maybe make some progress on node group operators.

May 8 - May 14

This week I finished adding some more features to simulation nodes-- making caching optional and subframe mixing, and worked more on mesh topology caching. I refactored the existing topology maps to all use the same implementation, and added a few cached maps to Mesh. The tricky part there is figuring out which topology maps to cache, all of them would be way too much, but only one or two seem to miss some significant performance improvement opportunities. Both of the changes are still in review but I hope I can make more progress next week.


Changes / Features

  • Mesh: Reduce custom normal calculation memory usage 17d161f565
  • Geometry Nodes: Implement simulation subframe mixing e6e6fb3a62
  • Geometry Nodes: Make simulation caching optional 8efd6d5f82
  • Geometry Nodes: Add display toggle for simulation cache in timeline ee08b2ddff
  • Mesh: Tag no loose verts and edges when converting from BMesh 6323d56eb5
  • Geometry Nodes: Extrude: Skip topology map with no edge attributes 5b5e6a846a
  • Geometry Nodes: Slightly optimize mesh to curve node 143ca272bd
  • PR #107816: WIP: Mesh: Add three cached topology maps
  • PR #107861: Mesh: Reimplement and unify topology maps


Fixes

  • Fix #107151: Multires data from external file is not loaded 34e29440f7
  • Fix #107826: Missing defaults for principlied volume string sockets 2db23d38ca
  • Fix #107694: Assert adding custom normals to empty mesh e151425c5c
  • Fix: Build error after previous commit 4d7a93930c
  • Fix: Incorrect value retrieval in simulation subframe mixing 6491387fba
  • Fix: Build error after simulation header cleanup ce96abd33a


Cleanup

  • Cleanup: Reduce binary size by deduplicating attribute processing 4f2ac09886
  • BLI: Use inline instead of static for bounds functions 3f44b24cf2
  • Cleanup: Move remaining sculpt_paint files to C++ 150943e084
  • Cleanup: Use OffsetIndices class in extrude node and merge by distance node 85ddc1b0de
  • Cleanup: Avoid redundant attribute adding in extrude node da43c42e40
  • Cleanup: Add comments to simulation state header 2f349ce884
  • Cleanup: Correct commet about curves bounds 3a0d17ceea


Review

  • Requested changes PR #107653: Paint: Add loop select for faces
  • Requested changes PR #107790: Cleanup: Move BKE_node.h to C++
  • Requested changes PR #107656: Geometry Nodes: Sample Volume node
  • Accepted PR #107916: UI: Capitalize "Python" in UI messages, improve a few others
  • Accepted PR #107894: Fix #107893: Attribute Statistic produces wrong Variance value
  • Commented PR #107827: Geometry Nodes: Add 'Fill Interior' option to Mesh to SDF Volume
  • Accepted PR #107636: Fix #106929: adjust normalization of zero vector in nodelink shader
  • Accepted PR #107828: Geometry Nodes: Add 'Signed Distance' input node
  • Accepted PR #107814: Fix: Empty built-in attributes are duplicated by some nodes
  • Commented PR #107885: Fix #107882: Get evaluated mesh from curve object too
  • Commented PR #107911: Cleanup: Use StringRef instead of std::string for node declaration
  • Accepted PR #107868: Geometry Nodes: Change "Separate Components" node output order to match Spreadsheet


Tracker

  • Investigated: 7
  • Resolved: 4
  • Archived: 1


Next Week

The rest of the team is having a workshop on node group operators and node tools. I'm not sure how much I'll be able to participate remotely, so I might have to find something else that can occupy a fair amount of time. I think that might be rotation sockets, or more work on my branch that replaces mesh auto smooth (for 4.0).


May 1 - May 7

A 4 day week, I took Friday off.

We committed the simulation nodes branch! I did a bunch of cleanup there to get it into a mergeable state, and helped implement a couple of the remaining features. I also finished some performance improvements to face corner normal calculation with custom normals, just reducing memory usage and doing things like using indices instead of pointers.

Suzanne is spinning about twice as fast as a few versions ago, in this test file from Brad Clark.

After simulations landed, I started implementing a cache toggle for simulation nodes so it could work more efficiently in a realtime context that isn't concerned with the cache. I also started working on simulation subframe mixing, but stopped when I didn't understand the context or the big picture of why it would work the way I was doing it. I'll have to look into that again next week.


Changes / Features

  • Mesh: Split MLoopTri poly indices into a separate array d0705bd697
  • Cleanup: Unify mesh sampling multifunctions 7ff752b789
  • BLI: Remove clamping from generic span slicing 1f76863f80
  • PR #107592: Mesh: Reduce custom normal calculation memory usage


Fixes

  • Fix #107480: Crashes in mesh format conversion for old files 5525e5b942
  • Fix #107505: Temporary stack not cleared in BMesh normal calculation d5fc1b9ba4
  • Fix #107514: Broken normals wtih weighted normal "keep sharp" option 2e50e0a849
  • Fix: Missing normalization for sampled normals when adding curves f59fdc40ec


Cleanup

  • Cleanup: Move remaining modifier files to C++ 730b11034f
  • Cleanup: Deduplicate sampling at index in geometry nodes 7f040099e3
  • Cleanup: Move attribute_math to proper blenkernel namespace 367145209c
  • Cleanup: Avoid allocating extra array in sample nearest node b3a3b94976
  • Cleanup: Miscellaneous changes in corner fan normal calculation 96f9930de1
  • Cleanup: Reduce indentation when setting custom normals 2390abf1d3
  • Cleanup: Use array and span in weighted normal modifier c2a2c2dcab
  • Cleanup: Simplify CurvesGeometry deletion copying 09c1a93c21
  • Cleanup: Rename field input classes to match UI names d9a7f1285f


Review

  • Requested changes, accepted PR #106848: Initial Grease Pencil 3.0 stage
  • Requested changes, accepted PR #107470: Geometry Nodes: Link drag search value moving improvement
  • Requested change PR #107627: Geometry Nodes: Simulation calculate to frame operator
  • Commented PR #107656: Geometry Nodes: Sample Volume node
  • Accepted PR #107575: Fix #107566: Gesture face set respect hidden faces
  • Requested changes PR #105375: USD Export: New Curves/Hair Support
  • Commented PR #107686: Nodes: Update of nodes topology cache more parallel
  • Accepted PR #107713: Fix #105147: Rename geometry node to Is Face Planar
  • Accepted PR #107535: Fix: calculating duplicates in kdtree does not work with selection
  • Accepted PR #107312: Fix #107306: Merge by distance node is not deterministic
  • Accepted PR #107569: Cleanup: Move node_util.h to C++
  • Accepted PR #107591: Cleanup: convert node_exec.h to c++
  • Accepted PR #107516: Cleanup: Move pipeline.h to C++
  • Accepted PR #107508: Cleanup: Move draw_manager_profiling to C++
  • Accepted PR #107628: Fix #107623: Do not allow dragging search menu from custom socket
  • Accepted PR #107622: Fix #107545: Mistakes in recent node.cc cleanup
  • Commented PR #107258: I18n: Remove extraction macros from the node socket declarations


Tracker

  • Investigated: 9
  • Resolved: 6
  • Archived: 1


Next Week

I hope to finish adding the cache checkbox early on Monday or Tuesday. Beyond that it depends on the team's priorities I think, not sure where we'll head right now. I might look into caching mesh topology maps again too.

April 24 - April 30

This week I helped to finish parts of the simulation branch, including moving some of the changes to main. I did some bug fixing, and looked into mesh face corner normal calculation again. I've mostly been looking at it from the perspective of reducing memory usage, which has been enough for a 50% improvement so far at least, I'd say. I also looked into the performance of the new Index of Nearest node a bit.


Changes / Features

  • Mesh: Reduce memory corner normals memory usage and simplify threading 9fcfba4aae
  • Mesh: Allocate custom normal spaces in array 3c43632651
  • Mesh: Reduce memory usage calculating custom normals 9292e094e7
  • Nodes: Support adding multiple nodes from search menu 45cecb101c
  • Subdiv: Optimize coarse position extraction with cache 3507431c30
  • Multires: Use cached loose edge information 9f78530d80
  • Geometry Nodes: Use implicit sharing in store/capture attribute nodes b54398c16c
  • Geometry Nodes: Index of Nearest: Use grain size based on tree sizes d8f4387ac9
  • Geometry Nodes: Index of Nearest: Use span for non-single ids 4346314351
  • BLI: Add bit span operations and bounded bit spans b87ccedd75
  • BLI: Add "take front" and "take back" methods to bit spans 67700ced54
  • BLI: Allow different integer types when filling span indices a6baf7beae
  • Curves: Avoid retrieving arrays many times e0a3212176
  • BLI: Add methods to generic spans to retrieve size in bytes 4daa7ae649
  • Attributes: Allow attribute API to create non-deleteable attributes 098e58ea24


Fixes

  • Fix: Extrude node propagates all anonymous attributes 0f47722d82, bea6391188
  • Fix #107095: Spikes during multires reshape propagation ae57d86d42
  • Fix #106289: Copy optimal display edges in mirror, array modifiers 5a1013f6a8
  • Fix: Compile error in debug build in normals code d086249f4d
  • Fix: Wrong crease accessed for multires reshape 30f8e688c3
  • Fix: Build error in quadriflow ace686983c
  • PR #107458: Fix #107123: Refactor sculpt normal calculation to require vert poly map


Cleanup

  • Cleanup: Simplify and deduplicate mesh sampling code bec033e057
  • Cleanup: Avoid storing redundant information in corner normals task data bdaf8e3715
  • Cleanup: Standardize mesh corner normals code 93f99859bc
  • Cleanup: Use short2 for custom normals, simplify access 82769653f8
  • Cleanup: Use simpler C++ types in mesh corner normals code f8eebd3b25
  • Cleanup: Remove unnecessary vertex normal custom data masks 5ce4447f02
  • Cleanup: Remove redundant namespaces in mesh normals code 803f03ae32
  • Cleanup: Declare field context variables const 5727851d65
  • Cleanup: Use helper function to sample normals when adding curves 0a5f0890cc
  • Cleanup: Extract function to make extend node declaration d6c61ccadc
  • Cleanup: Remove timer in node, improve comment 4b96af6cdd
  • Cleanup: Implement "make available" for extrude node individual input 060216ac31
  • Cleanup: Fix spelling in subdiv function name 032e69527d
  • Cleanup: Use consistent enum type in header 2cbf536605
  • Cleanup: Fix typo in mesh sample function name 96fd14a65f
  • Cleanup: Remove global mesh threading size macro 1777f40c27
  • Cleanup: Add note about adding attributes while iterating 696b56c1da
  • Cleanup: Simplify passing empty anonymous attribute set f8cc6cc866


Review

  • Requested changes PR #106848: Initial Grease Pencil 3.0 stage
  • Requested changes, accepted PR #107279: Mesh to Volume: Changes in Fog Volume
  • Accepted PR #107133: Add support for attributes storage in simulation state
  • Accepted PR #106919: Simulation nodes: UI for simulation state items in sidebar
  • Commented PR #107470: Geometry Nodes: Drag and drop value moving improvement
  • Accepted PR #107097: Cleanup: Type conversions in node.cc
  • Accepted PR #107413: Cleanup: prefer nullptr inside extract_mesh.hh
  • Commented PR #107312: Fix #107306: Geometry Nodes: Merge by Distance node be deterministically
  • Requested changes PR #107339: Cleanup: Ensure default cases in node.cc
  • Accepted PR #107323: Fix #107273: Group input is not listed in the node search
  • Commented PR #107336: Vulkan: Conversions between Blender and Vulkan Enums
  • Accepted PR #107310: Fix Python error when trying to call the Search Menu with no object
  • Commented Fix: Knife tool does not interpolate vertex customdata in interior cuts PR #107367
  • Committed 18f4fd6b85: Attributes: Add function to rename attribute
  • Committed fee9a3796c: Cleanup: Add not equal operator to compute constext hash
  • Committed ac1827edda: BLI: Add utility method to check if CPPType matches multiple types


Tracker

  • Investigated: 6
  • Resolved: 4
  • Archived: 1


Next Week

Hopefully we can merge the simulation branch. Beyond that, I hope to just get closer to finishing a bunch of the things I've been working on, no particular focus yet.


April 17 - April 23

This week I finally finished the mesh struct of arrays refactor I started a year and a half ago (#95965). A big project! But not really bigger than I expected, I actually sort of expected it to take longer. I learned a lot in the process. And the benefits can still trickle into other places, but with the file-format impacting changes over with, there's no urgency.

I tried to help with some of the simulation nodes changes, taking some of the tangentially related topics and finishing them up for main. I did plenty of code review too, mainly for simulation things. And we spent some time discussing the baking UI (#107181).

Along with that I committed a cache for loose vertices, aiming to make viewport drawing of large geometry-nodes-generated meshes faster.


Changes / Features

  • Mesh: Move edges to a generic attribute 2a4323c2f5
  • Mesh: Cache loose vertices 8e967cfeaf
  • Attributes: Integrate implicit sharing with the attribute API e45ed69349
  • Subdiv: Tag result mesh with no loose edges/verts 54072154c5
  • Geometry Nodes: Slightly optimize mesh to curve node 98ccee78fe, 097b9c5a36
  • Curves: Optimize edit mode selection draw extraction 70d854538b
  • PR #107154: Geometry: Refactor creation to avoid empty data arrays


Fixes

  • Fix: Spreadsheet missing other geometry types for edit mode mesh objects 2f4a8ecf18
  • Fix #106138: Node add searches missing context-based poll d6abd2ce72
  • Fix #107185: Edit mode or existing attribute break rest position 82ca3d3604
  • Fix: Search in node editors missing items 716b9cff23


Cleanup

  • Cleanup: Miscellaneous improvements to subdivision geometry nodes 993d24c174
  • Cleanup: Use generic edge calculation for legacy curve to mesh 5ab48a53e4
  • Cleanup: Use function ref instead of pointer for transform gizmo 21b51e7b88
  • Cleanup: Remove redundant "reference" argument to geometry copy 7535ab412a
  • Cleanup: Remove unnecessary point cloud function argument 2ab500c234
  • Cleanup: Avoid switch fallthrough, avoid copying bit span bc338aac74
  • Cleanup: IO: Separate creating mesh and adding to Main 60bb57663a
  • Cleanup: Remove unnecessary attribute provider callbacks d818d05415
  • Cleanup: Improve comments about curves and mesh offset spans 7bb8c8a5cf
  • Cleanup: Remove unused includes, correct comments e7eb8fd908
  • Cleanup: Remove redundant custom data initialization 5ca7e1301f
  • Cleanup: Use utility to create mesh in metaball tessellation 3e41b98295
  • Cleanup: Use more specific arguments to calc edges function a32fb96311
  • Cleanup: Avoid magic number for bits per integer 5bed959e81
  • Cleanup: Use consistent argument order for mesh creation functions 10d175e223
  • Cleanup: Use curve positions accessor function ab8acbbfe5
  • Cleanup: Remove unused variables/functions b647c2b88d
  • Cleanup: Remove unused using keyword c234a802ba, 4edcae75aa
  • Cleanup: Remove else after return in subdiv modifier code 473bb8a8b0
  • Cleanup: Fix custom data memcpy call null argument 491f098edf


Review

  • Requested changes, updated PR #106937: Simulation Nodes: bake simulation states to disk
  • Requested changes, updated PR #104619: Geometry Node: Index of Nearest
  • Requested changes PR #106346: Mesh To Volume fixes / refactoring
  • Requested changes PR #106920: WIP: Sculpt: cleanup sculpt attribute API
  • Updated, accepted PR #106903: Undo: support implicit-sharing in memfile undo step
  • Requested changes PR #106919: Simulation nodes: UI for simulation state items in sidebar
  • Requested changes PR #107133: Add support for attributes storage in simulation state
  • Accepted PR #107179: Fix #106208: data-block socket defaults not used for node group
  • Accepted PR #106812: Support for simulation zones in copy operators
  • Requested changes PR #106065: Add Active Camera geometry node
  • Accepted PR #106700: Core: Add sub-types for float-type custom properties
  • Accepted PR #107196: RNA: ignore some large arrays in override code
  • Accepted PR #107255: Geometry Nodes: Delete value moving for drag and drop group inputs
  • Commented PR #107043: Geometry Nodes: Simulation Zone drawing updates
  • Accepted PR #107097: Cleanup: Type conversions in node.cc
  • Accepted PR #107146: Fix #107067: Properly clear CD_FLAG_ACTIVE/DEFAULT_COLOR flags
  • Accepted PR #107055: Cleanup: Replace manually flag checking by method in node.cc
  • Commented PR #106972: Make first non-anonymous CustomData layer active
  • Accepted PR #106750: UI: Change the name of Invert nodes to Invert Color
  • Requested changes PR #106515: Fix #106484: Show all rotations with same precision
  • Commented PR #107214: Fix #107186: Curve assets don't generate preview images


Tracker

  • Investigated: 11
  • Resolved: 3
  • Archived: 5


Next Week

I plan to do more bug fixing and help with merging the simulation nodes branch (late for Bcon1 unfortunately).

April 11 - April 16

This week I worked on implicit sharing for mesh and curve offsets, a few random mesh related improvements, and made progress with node group operators. I started to look into how to register the input properties, but didn't make much progress after that. I ended up being very busy with bug fixing recently. That figures considering the large changes I've been making across mesh stuff though. I also did some cleanups to the geometry nodes simulation branch.


Changes / Features

  • Geometry: Use implicit sharing for curve and mesh offsets dcb3b1c1f9
  • Attributes: Add 2D integer vector attribute type 988f23cec3
  • Curves: Define "lookup int" function for RNA arrays d633d9fd02
  • Curves: Avoid unnecessary allocations in copy and move constructors e03da77033
  • Point Cloud: Avoid unnecessarily initializing initial positions 71ed98debe
  • Mesh: Avoid unnecessarily initializing corner topology arrays e35f971da1
  • PR #106638: Mesh: Move edges to a generic attribute
  • PR #106774: Mesh: Split MLoopTri poly indices into a separate array
  • PR #106917" Geometry Nodes: Use implicit sharing in point/mesh conversion nodes
  • PR #106694: WIP: Cycles: Parallelize copying geometry attributes from Blender


Fixes

  • Fix: PLY export behavior with multiple meshes 254d148458
  • Fix: Remove unsupported data types in extrude and split edges nodes 80f3f59555
  • Fix #106802: Incorrect modifier deform evaluation result 99c630cd9c
  • Fix #106879: Texture Node add search is broken 8df6974a15
  • Fix #106366: Handle exceptions in add fur operator c7995f3185
  • Fix: Assert when converting curves object to mesh object a1cc15f239
  • Fix: Mesh validate missing mesh polygon removal tags 15683d81be
  • Fix: Incorrect mesh data used in mesh remap code 1a6cfa1ae1
  • Fix #106845: Extrude node crash when no faces added 16de3ba759
  • Fix #106828: Extrude individual mode crash on mesh with no faces 4170545dc5
  • Fix #106780: Crash with sculpt undo and poly offsets 03c4173d81
  • Fix #106745: Subdivision surface crash with more than 8 UV maps fd234fe1ce
  • Fix #106743: Crash writing with legacy mesh format cd30bce7f1
  • Fix #106901: Dangling pointer after freeing mesh runtime data 1db918f948
  • Fix: Dangling pointer when clearing mesh 4c793a5b20
  • Fix: Incorrect creation of deform mesh with no deform modifiers a04098ebba
  • Fix #106778: Incomplete copy of curves radius to Cycles 90ad930a01
  • PR #106829: Fix #106138: Node add searches missing context-based poll


Cleanup

  • Cleanup: Deduplicate curves data-block copying 936e608382
  • Cleanup: Slightly CurvesGeometry reorganize read function dd229a9d54
  • Cleanup: Add access method for point cloud positions a7bee90c1d
  • Cleanup: Remove setting polygon loop total from Python c31434a570
  • Cleanup: Remove unused PBVH "respect hide" variable 3fadaa4fca
  • Cleanup: Remove setting polygon loop total bb76a94d06
  • Cleanup: Remove unnecessary PBVH attribute pointer 4472717de2
  • Cleanup: Remove unnecessary check when allocating mesh face offsets b7e9906337+
  • Cleanup: Add utility function for clearing mesh geometry baf6892270
  • Cleanup: Use consistent mesh vertex position names 7d4edcfa68
  • Cleanup: Make deprecated custom data type handling consistent 3f31ac2e1a
  • Cleanup: Use more descriptive function name in extrude node 197e9b9f80
  • Cleanup: Use swap to take ownership of mesh data dccd42766c
  • Cleanup: Use references in mesh.cc 000aef6e5e
  • Cleanup: Access curves offsets in RNA with C wrapper function 642bc5546a


Review

  • Requested changes PR #106346: Mesh To Volume fixes / refactoring
  • Requested changes, accepted PR #106884: Cleanup: Use Vector for passing lists of PBVHNodes around
  • Requested changes PR #106812: Support for simulation zones in copy operators
  • Commented PR #106919: Simulation nodes: UI for simulation state items in sidebar
  • Commented PR #105841: Assets: Implement Traits
  • Accepted PR #106838: UI: Add slash character support to fuzzy search initials mode
  • Accepted PR #105509: Cleanup: Reduce nesteds in node.cc
  • Accepted PR #104998: UI: Rename Bright/Contrast to Brightness/Contrast
  • Accepted PR #106721: UI: Add slash separators to Hue/Saturation/Value
  • Commented PR #106897: UI: Add prefix to Blender version
  • Commented PR #106944: WIP: Add vertex groups to CurvesGeometry
  • Commented PR #105598: WIP: IO: C++ STL exporter


Tracker

  • Investigated: 22
  • Resolved: 14
  • Archived: 3


Next Week

More of the same basically.

April 2 - April 10

This week I committed the refactor reducing memory usage of mesh faces, added the drop-down to change node socket subtypes, worked a bit on node group operators, and did a bunch of code review. I also found some easy improvements to Cycles copying of Blender attributes, which is now around 10x faster in general. I also worked on various WIP improvements for meshes, some are just in branches on my repo for now:


Changes / Features

  • Mesh: Replace MPoly struct with offset indices 7966cd16d6
  • Cycles: Avoid overhead from RNA when extracting mesh data 4bcd59d644
  • Cycles: Optimize extraction of Blender attributes 8d0920ec6d
  • Cycles: Optimize Blender point cloud attribute extraction aef0e72e5a
  • Cycles: Optimize Blender curves attribute extraction ae017b3ab7
  • Nodes: Add dropdown to select group socket subtype e7f395dd20
  • PR #106677: Attributes: Add 2D integer vector attribute type
  • PR #106638: Mesh: Move edges to a generic attribute
  • PR #106694: WIP: Cycles: Parallelize copying geometry attributes from Blender
  • PR #106774: Mesh: Split MLoopTri poly indices into a separate array


Fixes

  • Fix #106584: Active/default UV map legacy conversion with name conflict 42a9c62bff
  • Fix: Cycles ignores point cloud and curves byte color attributes 5a86c4cc88
  • Fix: Crash and broken multires baking 85bd64ece4
  • Fix: Crash loading autosave/last session file after MPoly removal e785d956c4
  • Fix #106622: Various errors filling cone/cylinder primitive faces 11ba8c6ab4
  • Fix #106598: Cone primitive crash after MPoly removal 6cb5b14f16
  • Fix: Wrong attribute name used for corner edges array a2b259aa2c


Cleanup

  • Cleanup: Removed DerivedMesh triangle cache 7adea7ee15
  • Cleanup: Remove poly normal writing 7a1ec82af4
  • Cleanup: Deduplicate OffsetIndices utility for meshes and curves 4b2ea18ec9
  • Cleanup: Use const arguments for DerivedMesh functions 547f0d5dab
  • Cleanup: Use generic mesh corner to poly map utility f594e951e0
  • Cleanup: Use generic index copying utility for normals dec9c593cb
  • Cleanup: Slight improvements to Python BVH tree utility 47ab0403f0
  • Cleanup: Remove unused DerivedMesh variables 6f2263bc79
  • Cleanup: Remove unused DerivedMesh edges/corners code 68092297ca
  • Cleanup: Remove unused DerivedMesh functions 2887557907
  • Cleanup: Remove unused DerivedMesh vert normals calculation 6652d2ee9b
  • Cleanup: Remove commented code c71f66daa8
  • Cleanup: Comment formatting, remove debug print 8906aa77cd
  • Cleanup: Incorrect assignment in previous cleanup commit f7029bc960


Review

  • Updated, accepted PR #106228: Custom Data: support implicit sharing for custom data layers
  • Commented PR #106515: Fix #106484: Show Rotation with higher precision
  • Requested changes, accepted PR #106648: Core: Fix broken CustomData IO with Autosave files
  • Accepted PR #106580: UI: Fix several messages in the UI
  • Accepted PR #105972: Nodes: Move data-block default values with link drag search
  • Accepted PR #106271: PBVH: update mesh data pointers stored in pbvh
  • Requested changes PR #104619: Geometry Node: Index of Nearest
  • Commented Mesh Edit: implement an operator to smooth shape key deformation. #110275 PR #110275
  • Commented PR #105598: WIP: IO: C++ STL exporter
  • Accepted PR #106250: Mesh: Use more efficient update tag when flipping faces
  • Requested changes PR #105422: Shape Key editing: propagate updates through basis chains
  • Requested changes, accepted PR #106537: Fix #106430: Index the right UVmap in BMesh
  • Requested changes PR #104998: UI: Rename Bright/Contrast to Brightness/Contrast
  • Requested changes PR #106597: Remove simulation inputs when deleting outputs and vice versa
  • Accepted PR #106402: DRW: remove edges hidden by Optimal Display in IBO creation
  • Accepted PR #106605: Fix #106602: Cyclic link in versioning code
  • Accepted PR #106545: Fix #106530: Don't try to move unmovable node socket values
  • Accepted PR #106417: Fix #106354: Account for hidden vertices in weight gradient operator
  • Accepted PR #106507: Fix #106422: Mesh Data Attributes Using tip_ for iface_
  • Accepted PR #106644: Fix #106628: Use correct function to get active uv layer
  • Closed PR #106573: optimized blenloader for loops


Tracker

  • Investigated: 10
  • Resolved: 6
  • Archived: 1


Next Week

Next week I'll hopefully have more visible results for node group operators, and I'll fix a bunch of the bugs that have been piling up.


March 27 - April 1

This week I fixed bugs, worked on mesh optimizations including a 4-6x improvement in time for extracting mesh data for Cycles and some improvements for skipping calculation of loose edges and vertices for rendering. I also made progress on an initial implementation of node group operators and cleaned up some of the geometry nodes modifier code to make it more reusable.


Changes / Features

  • Geometry: Skip recomputing bounds after translation 59c0e19db2
  • Geometry Nodes: Copy cached no loose edge status in realize instances 00bb30c0e9
  • Geometry Nodes: Tag no loose edges after curve to mesh node 63689e4756
  • Geometry Nodes: Simplify retrieval of node dependencies cbb813886c
  • Geometry Nodes: Slightly improve curve to mesh performance 52eced3eef
  • Release Cycle: Blender 3.5 Bcon5 1be25cfff1
  • PR #106275: Cycles: Avoid overhead from RNA when extracting mesh data


Fixes

  • Fix #106315: Use after free mirror modifier custom normals handling 6fa464d189
  • Fix #105912: Texture paint removes evaluated mesh attributes 0face8bd22
  • Fix #106134: Broken triangulation without cached face normals 5efa39096c
  • Fix #105965: Add fur modifier properties missing UI data ba4442ef41
  • Fix: Debug assert extracting multiple UV maps in edit mode 80319035e6
  • Fix: Crash when loading 3.4 autosave file f9b9430982
  • Fix: Mistake in mesh vertex normal dirty tag in previous commit 16576beb22
  • PR #106161: Fix #91256: Convert UI data when changing IDProperty data type


Cleanup

  • Cleanup: Mode most of MOD_nodes.cc to the blender namespace 1a956ce196
  • Cleanup: Use helper function to create AttributeFieldInput 60cac27ccc
  • Cleanup: Make geometry nodes execution functions more reusable 1113a25d1f
  • Cleanup: Use const arguments for IDProperty functions 3d5ba79050
  • Cleanup: Use Vector for metaball tessellation vertex data 9bb6f92fe0
  • Cleanup: Geometry Nodes: Split modifier property update function 498287bca0
  • Cleanup: Use const pointers for evaluated meshes 1af3c16962
  • Cleanup: Use consistent type in function definition 389025bee2
  • Cleanup: Retrieve const custom data layers 431d9858c5
  • Cleanup: Remove unused variable efda95840d
  • PR #106186: WIP: Refactor: Remove pre-2.8 function to reevaluate a single object


Review

  • Requested changes PR #106402: DRW: remove edges hidden by Optimal Display in IBO creation
  • Requested changes PR #106350: Fix #106247 - Fix incorrect selection check when in multi-mesh
  • Requested changes PR #106417: Fix #106354: Account for hidden vertices in weight gradient operator
  • Accepted, committed PR #106237: Fix #105855: Crash with node add menu assets and keyboard navigation
  • Accepted PR #106185: Fix #106128: OBJ exporter crash when a mesh only has loose vertices
  • Requested changes PR #106320: Refactoring: Consist: Directly linked links & index & drawing order & evaluated behavior of multi-input links
  • Requested changes PR #106250: Mesh: Use more efficient update tag when flipping faces
  • Accepted PR #106318: Fix #106261: When geometry output is viewed the cycling operator picks wrong sockets.
  • Accepted PR #106301: Fix: unnecessary edge pan updates
  • Accepted PR #105924: Fix #105917: Correct compositing map range clamp tooltip
  • Requested changes PR #105972: Nodes: Move data-block default values with link drag search
  • Closed PR #106359: WIP: Modelling: Add rotate to array modifier
  • Accepted PR #106172: Fix #106131: invalid selection after select random curves operator
  • Commented #106398: UsdGeomPoints import support


Tracker

  • Investigated: 14
  • Resolved: 4
  • Archived: 3


Next Week

More node group operators work and more bug fixing.

March 20 - March 26

This week I worked on landing the final mesh struct-of-array refactors (two still to land, but everything is finished), more bug fixing for 3.5, and helped with some final manual updates for 3.5 (not sure how to link those on my weekly report though).

I also worked on a slightly longer-term improvement to Mesh normals calculation that I also mentioned last week, PR #105920. This week I did some performance testing. Long story short, it's going to need some more work, at least for the final goal of proper determinism.

I helped Jacques with the refactor to IndexMask from PR #104629 by replacing a trivial implementation of the function to convert a bit mask to an IndexMask with something that should take advantage of the new design. It still needs a bit of work though.


Changes / Features

  • Mesh: Replace MLoop struct with generic attributes 16fbadde36
  • BLI: Simplify and extend OffsetIndices class 309553fc07
  • BLI: Add dirty and cached checks to shared cache 40bd35c9c4
  • BLI: Add a default constructor to OffsetIndices dab0ab673e
  • PR #105938: Mesh: Replace MPoly struct with offset indices
  • PR #106159: Geometry: Skip recomputing bounds after translation
  • PR #105940: Mesh: Simplify mesh triangle length counting


Fixes

  • Fix #105949: Uninitialized array used when counting material triangles 711a830ede
  • Fix #106029: Crash sculpting with dynamic topology 058a0187f8
  • Fix #105926: Sharp edge attribute removed when all edges are sharp 0323f8d1d9
  • Fix: Invalid custom data read during legacy mesh format conversion de49d18af5
  • Fix: Hide corner vert and edge attributes in UI dd7e1a3574
  • Fix: Unused variables mistake from previous commit 6addd195fa
  • PR #106161: WIP: Fix #91256: Convert UI data when changing IDProperty data type


Cleanup

  • Cleanup: Move poly topology lookup functions to C++ header 5c3f4195b6
  • Cleanup: Remove mesh poly macros, simplify loops 73d0531f50
  • Cleanup: Use Array and Span for mesh draw buffer cache data 638709b0ed
  • Cleanup: Reorder mesh draw cache functions to avoid prototypes 5256b2ca62
  • Cleanup: Pass UV offset in UV edit code 21e3b4483f
  • Cleanup: Grammar: "it's" vs "its" cef82a1d39
  • Cleanup: Avoid contractions for loose geometry variables aa1fc6102f
  • Cleanup: Rename variables in BMesh loose element extraction 85066f3748
  • Cleanup: Remove unused polys variable ce140c1b15
  • Cleanup: Make SculptSession a C++ only type 59050f3fdd
  • Cleanup: Avoid unused includes in EnumerableThreadSpecific header 7c952d6d15


Review

  • Accepted Core: new blenlib library for implicit-sharing PR #105994
  • Requested changes, accepted Fix: Vertex paint filter operators broken undo PR #106136
  • Commented UI: Generalize drop target API, support them for UI views PR #105963
  • Requested changes Nodes: Move data-block default values with link drag search PR #105972
  • Accepted Animation: Weight Paint select more/less for faces PR #105607
  • Requested changes, accepted Fix #105397: Support viewer socket cycling with linked geometry output PR #105836
  • Accepted Animation: Weight Paint select more/less for vertices PR #105633
  • Accepted, committed Mesh: Set bounds eagerly for spherical and cylindrical primitive nodes PR #105743
  • Commented WIP: Nodes: Rename Bright/Contrast to Brightness Contrast PR #104998
  • Accepted Add helper function to node_utils to create links to virtual sockets PR #105975
  • Accepted Fix #106097: Don't offset child nodes when pasting PR #106099
  • Accepted Fix #106094: Snap curves to surface operator does not update geometry PR #106104
  • Accepted Separate ColorRamp node name into Color Ramp PR #104996
  • Accepted Python API: Add deprecation warning to MeshUVLoop PR #105970
  • Commented Extra documentation for outputting UV maps from Geometry Nodes #104392
  • Accepted Fix #105917: Correct compositing map range clamp tooltip PR #105924


Tracker

  • Reported #106140: Array store test falure in latest main debug build
  • Investigated: 12
  • Resolved: 3
  • Duplicate: 1
  • Archived: 3


Next Week

Actually final commits to 3.5 if necessary, and I'll try to work on node group operators and help on simulation where I can.

March 13 - March 19

This week I worked on the simulation nodes branch (mainly 3bad7a51cb), finishing my mesh refactoring, and some final bug fixing for 3.5. I also ended up doing some more cleanup in mesh draw data extraction and worked on refactoring mesh vertex normal calculation to be deterministic (see PR #105920).

One new design task:

  • Add Active Camera geometry node #105761


Changes / Features

  • Mesh: Optimize BMesh to Mesh conversion with UV maps 0fe0db63d7
  • Mesh: Parallelize extraction of UV maps 63a44e29ac


Fixes

  • Fix #103021: Metaballs have jagged normals c6878d5e82
  • Fix: Edit mesh face corner color operators always use first layer ee18b625ca
  • Fix: Dyntopo attribute data warning doesn't work 6a96a151be
  • Fix #105775: Make "Add > Fur" node setup stable with deformation 4f18022f80
  • Fix: Various issues with attribute removal f23e3c7f04
  • Fix #105577: Python MeshPolygon API allows negative material indices d260cacc9d
  • Fix #105791: Alembic procedural ignores materials e7295efb4b
  • Fix #105681: Sculpt trim generates smooth shaded faces f6f2f4f264
  • Fix: Uninitialized boolean arrays in mesh conversion 46da66f4df
  • Fix: Crash in weighted normal modifier 99506b3d73
  • Fix: Failing assert for meshes with no faces d3cfb2e20e


Cleanup

  • Cleanup: Use spans for mesh data in texture margin code 21b6f6f1f6
  • Cleanup: Wrap C++ normal accessors with C functions b21537d215
  • Cleanup: Store cached mesh normals with Vector 4aa2a3522e
  • Cleanup: Use better check for UV map attribute 35bb942ae3
  • Cleanup: Use spans and C++ type to access mesh normals d7ac2a177a
  • Cleanup: Use C++ attribute API r37889015f342c400d98bb5f821f73855dae65ed7
  • Cleanup: Use more specific variable names for color attributes f149d7625d
  • Cleanup: Avoid keeping mesh normals references after dirty tag bad85fe8c7
  • Cleanup: Remove mesh validation of cached normals d9c2fb9ae2
  • Cleanup: Small changes in Mesh BMesh conversion 2ae9526cd9
  • Cleanup: Tweak mesh normal accessors documentation 17a53d6647
  • Cleanup: Remove two redundant color attribute functions 90076b543b
  • Cleanup: Remove redundant mesh normals dirty tag function f9132e2bbf
  • Cleanup: Remove unused pbvh function declarations f2a05c3e4e
  • Cleanup: Use C++ array type in skin modifier 13ae75f545


Review

  • Requested changes PR #104478: WIP: Core: use generic copy-on-write system to avoid redundant copies
  • Requested changes PR #105607: Animation: Weight Paint select more/less for faces
  • Requested changes PR #105598: WIP: IO: C++ STL exporter
  • Requested changes PR #105743: WIP: Mesh: Add bounds eagerly for circle primitive node
  • Requested changes, accepted PR #105871 Fix #105152: Removing color attribute doesn't update active
  • Requested changes, accepted PR #105756: Mesh: Remove unnecessary mesh position copying
  • Accepted PR #105696: Geometry Nodes: use lazy-function directly for switch node
  • Accepted PR #105708: CustomData: add separate function to add layer from existing data
  • Accepted PR #105809: Fix #105778: Prevent invalid links with link swap
  • Requested changes PR #105836: Fix #105397: Support viewer socket cycling with linked geometry output
  • Accepted PR #105192: Fix #104730: Suppress using anonymous UV layers for rendering
  • Accepted PR #105814: Fix: Correct several messages in the UI
  • Requested changes, accepted PR #105838: Fix: Broken mesh to curve conversion
  • Accepted PR #105877: Fix #105720: crash when adding viewer node
  • Accepted PR #105870: Cleanup: Simplify mesh to legacy curve logic
  • Accepted PR #105737: Refactor: Extract CurvesGeometry read/write function
  • Closed PR #105792: FIX: Disable the bounding box that replaces the Alembic object

Tracker

  • Reported #105778: Node editor link swapping can create invalid link
  • Reported #105885: Toolbar items and icons stacked and clipped
  • Investigated: 9
  • Resolved: 8


Next Week

I'll have to take a couple days off I think, but I hope to be nearly done with the mesh refactoring, and make some more progress on simulation nodes, and hopefully start some work on node group operators.

March 6 - March 12

This week was a bit slower because of nodes and physics workshop going on in Amsterdam. I still found things to work on though-- bug fixes, performance improvements, the subtype selector for node group inputs/outputs, mesh refactors, and of course code review. So I think it was actually a productive week!

I also added the first infrastructure for multiple inputs and outputs to the simulation nodes branch.

I worked on caching for loose vertices too (PR #105567), but there are two definitions of "loose vertices" and both are used:

  • Vertices not connected to any faces (may be used by loose edges)
  • Vertices not connected to any edges

Maybe caching both would be fine, it's only a bitmap anyway. But I'll put that one on hold for now.


Changes / Features

  • Mesh: Parallelize BMesh to Mesh conversion 5669c5a61b
  • Mesh: Set bounds eagerly for cube and grid primitive nodes f9c627b275
  • Mesh: Move face shade smooth flag to a generic attribute 5876573e14
  • Mesh: Avoid writing unnecessary attributes 27b9ce6ab6


Fixes

  • Fix #105587: Triangulated shading in sculpt mode {{GitCommit|caf90c6a905574e7524d53c8c05cae056adda89b}
  • Fix #105524: Texture paint broken after recent cleanup 68a142ee7b
  • Fix #105610: Missing "Amount" validation in duplicate elements node 4912695e00
  • Fix #105518: Crash in edit mode with cage editing fefb35988c
  • Fix: Hide ".uv_seam" attribute in UI 60f35207d4
  • Fix: Logic error in check for curves selection ea80e14464
  • Fix #105496: Incorrect solidify modifier materials after recent cleanup 8faeccf6e5
  • Fix #105430: Curves pick select selects multiple objects 281f383c23


Cleanup

  • Mesh: Move functions to C++ header 1dc57a89e9
  • Cleanup: Make mesh function static cbc73a1e05
  • Cleanup: Remove unused node function declarations 111038062a
  • Cleanup: Remove unused mesh function 68ec41d00e
  • Cleanup: Fix unused variable warning in release builds 03fffc08b6
  • Cleanup: Small tweaks to new PLY code 3c5a15db57
  • Cleanup: Remove unused UI handlers function 050e08e5f0
  • Cleanup: Remove unused GPU subdivision function declaration 6398c9cd7f
  • Cleanup: Unused variables, missing includes in PLY IO 96263368b5
  • Cleanup: Move functions in BMesh Mesh conversion 85fb63f99c
  • Cleanup: Fix warning in skin modifier 5ab49afe8d


Review

  • Requested changes, accepted PR #104941 Rotation C++ API
  • Requested changes PR #105375 USD Export: New Curves/Hair Support
  • Requested changes PR #105192 Fix #104730: Suppress using anonymous UV layers for rendering
  • Requested changes PR #105607 Animation: Weight Paint select more/less for faces
  • Accepted PR #105631 Fix #105601: Remove duplicates when inserting links into multi inputs
  • Commented PR #105633 Animation: Weight Paint select more/less for vertices
  • Accepted PR #105394 Cleanup: Don't do recursion where possible in node.cc
  • Requested changes PR #105515 Spreadsheet: Add Volume grid's active voxel count
  • Commented PR #105598 IO: C++ STL exporter
  • Requested changes PR #105509 Cleanup: Reduce nesteds in node.cc
  • Accepted PR #105474 Cleanup: Fix incorrectly formatted multi-line docstring


Tracker

  • Investigated: 16
  • Duplicate: 1
  • Confirmed: 1
  • Archived: 1
  • Resolved: 7


Next Week

I'd like to keep making progress on the two remaining mesh refactors, and work o node operators, or maybe simulation nodes.

February 27 - March 5

This week I mainly focused on mesh cleanups, with the goal of making my two remaining large patches (corners and faces refactors) simpler. I want them to look more like "find and replace" than complex changes, since the diffs are massive.

I also did the regular code review and bug fixing as things came up. I also made some design tasks for planned breaking changes in 4.0:

  • #105316 Particle system removal for 4.0
  • #105317 Face maps removal for 4.0
  • #105321 Remove legacy instancing panel for 4.0
  • #100153 Breaking Mesh API changes for 4.0


Changes / Features

  • Mesh: Move edge UV seams to a generic attribute cccf91ff83
  • Mesh: Clear loose edges bitmap with count of zero f37077ae5a
  • Mesh: Avoid recalculating bounds after some operations 52104c1a0c
  • Geometry Nodes: Remove unnecessary position copying in delete node 79d64bfde3


Fixes

  • Fix #104219: Node links dragged from wrong socket after selection 076a33ccd1
  • Fix #105162: Array modifier cap material index ignored 079dbf4d1b
  • Fix #105314: Custom node groups missing sockets 15f59470a3
  • Fix #105259: Copy & paste boolean custom property as driver doesn't work d90d6f8674
  • Fix #105331: Assert in solidify extrude after recent cleanup 52d20c6a0e
  • Fix #104915: Race condition writing subsurf optimal display edges 3db246a3ce
  • Fix #105165: Weighted normal modifier crash after recent cleanup 62c6eb12bf
  • Fix: Explode modifier cycles test failure after recent cleanup baa27d0aef
  • Fix: Use of uninitialized variable after recent cleanup 2324eb4f8c
  • Fix #105319: Crash in weighted normal modifier after recent cleanup f2ea7ae751
  • Fix: Debug build error after recent variable rename cleanup 7de2f21001


Cleanup

  • Cleanup: Standardize mesh edge and poly naming 3022a805ca
  • Cleanup: Use references for mesh poly variables 915ff8d152
  • Cleanup: Use simpler iterator for mesh polygons 45cff837bc, 08e20376b1
  • Cleanup: Use spans for mesh render data 0f61497e20
  • Cleanup: Access mesh data with spans d939ecc46f
  • Cleanup: Mesh: Access looptris with Span eb68334b58
  • Cleanup: Use consistent "positions" term for mesh update tag functions c3d803c2ef
  • Cleanup: Use consistent "vert" term for mesh normals b37111c574
  • Cleanup: Clarify mirror modifier copying and face flipping ce25209e26
  • Cleanup: Remove mesh normals function, deprecate in RNA d0eeb3d155
  • Cleanup: Small tweaks to new PLY code 3c5a15db57
  • Cleanup: Unused variables, missing includes in PLY IO 96263368b5
  • Cleanup: Move UV parameterizer to blender::geometry namespace b43f520a82
  • Cleanup: Small cleanups to flip faces node 71a79a7a7c
  • Cleanup: Remove legacy argument from mesh creation functions 96abaae9ac
  • Cleanup: Remove unused variable f1f47df56b
  • Cleanup: Remove unnecessary declarations in laplacian smooth modifier 4ffae99d6d
  • Cleanup: Make mesh validation functions static 93508ab2df
  • Cleanup: Use clearer variable names in mirror modifier 8aa1a7db3e
  • Cleanup: Move five mesh related files to C++ 118ec54ec7
  • Cleanup: Move five modifier files to C++ d449539cd2


Review

  • Requested changes PR #105393 Fix #102843: Add UV Packer with O(nlogn) performance
  • Requested changes PR #105090 Nodes: SDF Volume nodes milestone 1
  • Accepted PR #105088 UI: Region polling support
  • Requested changes PR #105394 Cleanup: Don't do recursion where possible in node.cc
  • Accepted PR #105413 Cleanup: Deduplicate node parent checking functions
  • Accepted PR #104404 IO: New C++ PLY importer/exporter
  • Accepted PR #105264 Geometry Node: Make Capture Attributes more lazy
  • Accepted PR #105237 Animation: Remove the 'Weight Paint: Fix Deforms' operator
  • Accepted PR #105195 I18n: add per-socket translation contexts for nodes
  • Requested changes, accepted PR #105184 Fix #105109: Pick selection with multi object edit
  • Accepted PR #105182 Curves: change default font offset from 1.0 to 0.0
  • Accepted PR #104937 Cleanup: Use const arguments in node.cc
  • Accepted PR #105252 Fix #105028: No update exiting curves edit mode
  • Requested changes, accepted PR #105212 UV: Migrate UV packing from Editor to bf_geometry.
  • Accepted PR #105340 Refactor: Replace DNA_DEPRECATED attribute with _legacy suffix
  • Requested changes PR #105469 Cleanup: nodeToView & nodeFromView usage
  • Accepted PR #105473 Cleanup: Fix a few messages in the UI
  • Accepted PR #105370 Fix #105278: IDProperty UI missing library overridable toggle
  • Commented PR #105474 Cleanup: Fix incorrectly formatted multi-line docstring


Tracker

  • Investigated: 11
  • Duplicate: 2
  • Confirmed: 1
  • Archived: 1
  • Resolved: 6


Next Week

Next week I'll hopefully get closer to finishing the mesh changes, and maybe start on node group operators if the design is a bit more settled. I'll also probably take part in some design discussions happening at the HQ, at least a bit.


February 20 - February 23

This was a four day week for me. I mainly worked on bug fixing, but also did some code review and found some performance improvements while investigating other things. I also did a bit more mesh data access cleanup.

I made some tasks for curves edit mode this week too:

  • #105053: Curves edit mode draw tool
  • #105054: Curves edit mode extend/extrude operator
  • #105055: Curves edit mode radius editing
  • #105037: Curves edit mode Bezier handle drawing
  • #105038: Curves edit mode Bezier handle editing


Changes / Features

  • Nodes: Allow adding multiple search items per type in add menu cc925b9282
  • Subdiv: Simplify final vertex counting 3b59163b02
  • Curves: Avoid unnecessary allocation when calculating offsets 612965497e
  • Geometry Nodes: Remove unnecessary position copying in delete node 79d64bfde3


Fixes

  • Fix #103387: Radius affects curves bounding box 97a8bb450c
  • Fix #104842: Incorrect cyclic curve parameter node factor 11766574a4
  • Fix #104915: Race condition writing subsurf optimal display edges 3db246a3ce
  • Fix #105150: Mesh.vertex_colors.new() returns existing active layer f9f29eefc7
  • Fix #105089: Curves sculpt add creates invalid resolution fcdfc0a85b
  • Fix #104902: Use forward compatible integers for boolean RNA properties 720dbea429
  • Fix #104980: Apply All Shape Keys operator not working d1b6f16906
  • Fix #104975: Essentials assets missing from node link-drag search 3e721195b0
  • Fix: No default for NURBS weights in realize instances and join nodes 8b45f583a2
  • Fix: Global buffer overflow of enum property items on startup 1b72712283
  • Fix: Missing essentials path in internal assets function b5fa180d5d
  • Fix: Set curve type node creates unnecessary nurbs weight attribute 4ba73b50d0
  • Fix: Debug build failure and warnings after recent cleanup commit 2bd097a58d
  • Fix: Use of uninitialized mesh size variables after recent cleanup 5b1f94f05a


Cleanup

  • Cleanup: Access mesh edges, faces, and loops with spans cb62ab5b28
  • Cleanup: Remove unnecessary copying of mesh data outside CustomData a74fd9f2ae
  • Cleanup: Use simpler syntax to return panel open status 05637254da
  • Cleanup: Remove unused UV map deletion functions 996eb1bd5f
  • Cleanup: Move area.c to C++ 140a663f6f
  • Cleanup: Move rna_access.c to C++ 709013dca4


Review

  • PR #104941: Requested changes Rotation C++ API
  • PR #105102: Requested changes Nodes: Add custom color option for Node header
  • PR #105090: Requested changes Nodes: SDF Volume nodes milestone 1
  • PR #105212: Requested changes UV: Migrate UV packing from Editor to bf_geometry
  • PR #105020: Accepted Fix #103761: creating a color attribute doesn't make it active
  • PR #104620: Accepted Curves: Add support for proportional editing
  • PR #104967: Accepted Curves: Add cursor snapping support
  • PR #104968: Accepted Fix #103269: node group asset description not showing as tooltip in the Add menu
  • PR #105040: Accepted Fix #104947: Tag mesh for depsgraph update on UV map deletion
  • PR #105182: Commented Curves: change default font offset from 1.0 to 0.0
  • PR #105136: Accepted Mesh: replace 'BKE_mesh_merge_verts' algorithm
  • PR #104957: Accepted Fix #82936: Make Geometry Nodes modifier icon blue in outliner
  • PR #105130: Accepted Fix #103865: keep id properties overridable when setting them with Python
  • PR #104994: Requested changes Fix: Node operators crash when 'region' is null
  • PR #104977: Accepted Cleanup: Mark overriden virtual call as such
  • PR #105169: Accepted Fix #105168: Entering vertexpaint creates a non-default color attribute
  • PR #105201: Accepted Fix #105198: Ensure Frame and Reroute nodes are searchable


Tracker

  • Investigated: 26
  • Duplicate: 2
  • Confirmed: 1
  • Archived: 7
  • Resolved: 14


Next Week

Next week I'll do more bug fixing, more mesh refactoring, and probably start a bit of work on 3.6 features (node group operators maybe).

February 13 - February 19

This week I focused on bug fixing for 3.5 again. I had a giant pile of bug reports, with more coming in.

The pile is now a bit smaller! I also did a fair amount of code review, and committed two or three final features for 3.5.


Changes / Features

  • Mesh: Set active attribute values edit mode operator 6661342dc5
  • Curves: Replace quick fur operator, add to add menu 4387dbf03e
  • Geometry Nodes: Operator to wrap a modifier's node group 5ca65001ea
  • Geometry Nodes: Remove "normal" attribute 300c673a64
  • Spreadsheet: Add original indices to mesh debug information 2ee5560b3f
  • WM: Add option for clearing asset data to append operator 81b53aa507
  • Curves: Add delete operator to edit mode 3807a0981e


Fixes

  • Fix: Incorrect BMesh to Mesh attribute copying dfacaf4f40
  • Fix: Missing const specifier for curve field input 2a7440176e
  • Fix #104652: UV Face Dots randomized 459c210154
  • Fix #104869: Crash converting UV maps to legacy format 8b416f7f60
  • Fix #104690: Evaluated positions user-after-free for copied poly curves 72a2229848
  • Fix #104826: Mesh to BMesh with shape keys can corrupt layers 4ebb66864a
  • Fix #104698: Assert and failure adding shortcuts to curves sculpt tools c9285f83ab
  • Fix #104697: Curves Sculpt: Setting brush shortcuts does not work 9d15b3f424
  • Fix #104841: Split function for Cycles for sharp edges ignores attribute efc2e5134f
  • Fix #104588: Initialize Face Sets from edit mode selection broken 0dfc102531
  • Fix #104789: uv_layers.remove() always raises error b7e39acfcd
  • Fix #104785: Quick fur keeps asset status of appended node groups 9f41f95c8e
  • Fix #104188: Screw modifier edges invisible in edit mode wireframe view d9398bb53f
  • PR #104835: Fix #104358: Crash with broken writing to freed evaluated mesh: Fix: No update setting curve selection domain with all selected bea1eff3a5


Cleanup

  • Cleanup: Use simpler attribute transfer API in duplicate elements node 7ad1d3156c
  • Cleanup: Remove read-only attribute type be6847e773
  • Cleanup: Use Span to iterate over nodes instead of ListBase c2a0decbf3
  • Cleanup: Nodes: Avoid unnecessary const cast, use early return 851de8170d
  • Cleanup: Quiet unused variable warning 86b3073c9e
  • Cleanup: Move draw_attributes.hh to C++ c92c52f0c9
  • Cleanup: Make format, fix missing static warning d465b92823


Review

  • PR #104404: Requested changes IO: New C++ PLY importer/exporter
  • PR #104707: Requested changes, accepted USD Import: USD Shapes Support
  • PR #104620: Requested changes Curves: Add support for proportional editing
  • PR #104703: Requested changes, accepted Curves: Fix curve segment selection
  • PR #104605: Requested changes Cleanup: Node internal link relink
  • PR #104623: Requested changes Geometry Node: Edge Rings node
  • PR #104671: Accepted BLI: new bit span data structure
  • PR #104709: Requested changes, accepted Fix #104370: Draw: Don't request the same attribute more than once
  • PR #104577: Accepted Refactor: Weight Paint Select Linked Faces
  • PR #104783: Accepted Fix: Skip anonymous CustomData layers for the python API
  • PR #104589: Accepted Curves: add Curve Parameter Falloff to comb brush
  • PR #104832: Requested changes Geometry Nodes: Add selection and depth options to realize instances
  • PR #104750: Requested changes, accepted Curves: Add transform tools to toolbar
  • PR #104617: Accepted Fix: Use proper types in compare node link drag search options
  • PR #104626: Requested changes, accepted Curves: Add select more/less
  • PR #104833: Accepted Nodes: Add 'View Online Manual' to context menu
  • PR #104813: Accepted Curves: Add remove_selection function
  • PR #104793: Accepted Fix #102529 : deduplicate NodeGroups with assets
  • PR #104889: Accepted Fix #104850: Create Geometry Nodes operators fails if not in English
  • PR #104694: Accepted Fix #104166: Add redraw for asset marking and unmarking
  • PR #104715: Requested changes, accepted Curves: Draw point overlay only in point selection mode
  • PR #104897: Accepted Fix #104604: Don't remove the potentially next element of the iteration
  • PR #104937: Requested changes Cleanup: BKE Nodes: Try to always use const
  • PR #104467: Accepted Curves: cage overlay for sculpt mode
  • PR #104619: Commented Geometry Node: Index of Nearest
  • PR #104705: Accepted Curves: Use deformed points in overlay (crazyspace)
  • PR #104672: Accepted Cleanup: fix a few typos in UI messages


Tracker

  • Investigated: 24
  • Duplicate: 2
  • Confirmed: 1
  • Archived: 4
  • Resolved: 11


Next Week

Some more bug fixing, finishing more mesh refactors, and possibly some work on the simulation branch.


February 6 - February 12

This week I mainly worked on bug fixing and code review, and also committed a some final features for 3.5, and two more mesh struct-of-array refactors. I also got used to using Gitea.

Changes / Features

  • Mesh: Remove unnecessary edge draw flag 7ca651d182
  • Assets: Implement viewport drag and drop for geometry nodes bfa7f9db0e
  • Geometry Nodes: Add option to hide input in modifier 158f809dcb
  • Geometry Nodes: Edges to Face Groups Node 50dfd5f501


Fixes

  • Fix #100957: Dyntopo shows false positive data loss warnings 88f9c55f7f
  • Fix #104297: Cycling geometry nodes viewer ignores sockets 5c994d7846
  • Fix: Inaccessible default for node group image sockets 0ea15a6fbb
  • Fix: Curve resolution input node missing default e1a29b58bb


Cleanup

  • Cleanup: Use lambdas in mesh mapping callback, remove unused arguments 284cdbb6cf
  • Cleanup: Remove unused/redundant includes from BKE_curves.hh 3c8f7b1a64
  • Cleanup: Move 18 sculpt files to C++ 53b057aa09
  • Cleanup: Move 6 sculpt-session-related files and header to C++ 5c8edbd99b
  • Cleanup: Fix const correctness warning in recent commit 50918d44fb


Review

  • PR #104577: Requested changes, accepted Refactor: Weight Paint Select Linked Faces
  • PR #104414: Accepted Geometry Nodes: use smooth normals in Distribute Points on Faces node
  • PR #104416: Accepted Geometry Nodes: new Axis to Euler node
  • PR #104469: Accepted Curves: initial surface collision for curves sculpt mode
  • PR #104569: Requested changes, accepted Curves: Add select linked
  • PR #104560: Requested changes, accepted Curves: Add lasso and circle select
  • PR #104465: Accepted Cleanup: Use utility function to find groups in node tree
  • PR #104440: Accepted Cleanup: Geometry Node: Make Accumulate Attribute node more generic
  • PR #104465: Accepted Cleanup: Use utility function to find groups in node tree
  • PR #104406: Requested changes, accepted Curves: Add select pick operator
  • PR #104451: Commented UI: Change Behavior for Multi-Select Enums
  • PR #104602: Commented Geometry Node: Select by Component node
  • PR #104600: Accepted Fix #104501: CLear CD_FLAG_NOCOPY flag after use...
  • PR #104411: Requested changes, accepted Curves: Add box selection
  • PR #104585: Accepted Cleanup: Use const char * for layer names in collada exporter
  • PR #104563: Accepted Geometry Nodes: improve parallelization in Delete/Separate Geometry node
  • PR #104552: Accepted Geometry Nodes: Experimental option for Volumes
  • PR #104493: Commented UI: Make text nomenclature and ordering consistent
  • PR #104602: Commented Geometry Node: Select by Component node
  • PR #104461: Commented Subdivision Surface: add dependency graph tracking when cpu mesh is needed.
  • PR #104484: Commented I18n: write messages of the vertex group lock operator explicitly
  • PR #104425: Accepted Fix: Experimental Panel links modified for Gitea


Tracker

  • Investigated: 6
  • Confirmed: 1
  • Archived: 4
  • Resolved: 1


Next Week

Same thing as last week basically!


January 23 - February 5

Combined the last two weeks since some unexpected personal stuff came up and I had to travel a bit. Besides a bit of distraction (probably only really did a week of work or so) I still got some things done, though mostly unplanned things and a bit more simple work like refactors and triaging than usual.

I made two new tasks also, two interesting (IMO) performance topics. I've made a fair amount of progress on the first, I'm down to 83 uses of MPoly now from over 1000 before. Still a ways from getting the branch to compile though (refactor-mesh-face-generic for those curious).

  • T95967: Struct of Arrays Refactor for Mesh Polygons
  • T104327: Decrease SharedCache overhead


Changes / Features

  • Geometry Nodes: Tweak menu location of sample nodes rB789e549d
  • Curves Sculpt: Add report about missing surface for puff brush rBf954029e
  • Performance
    • Curves: Use shared caches for evaluated data rB7f958217
    • BMesh: Parallelize BMesh to evaluated Mesh conversion rBebe8f8ce
    • Geometry Nodes: Skip sorting in topology nodes if possible rBd6c9cd44
    • Geometry Nodes: Optimize start point case of Points of Curve node rB000e722c
    • D17135: Curves: Optimize evaluation of many NURBS curves


Fixes

  • Fix: Incorrect forward-compatible saving of face sets rBb642dc7b
  • Fix: Compile error after BMesh conversion commit rB1195933a
  • Fix T104168: No active UV when reading auto-save files rB179605bd
  • Fix T104088: Geometry nodes modifier boolean lost on undo rB42f8f98e
  • Fix: Debug build compile error after recent cleanup commit rB0ad4d07f
  • D17141: Mesh: Simplify BMesh Mesh conversion attribute copying


Cleanup

  • Cleanup: Use offset indices arguments for curves utilities rB7fc39535
  • Cleanup: Simplify mesh and point cloud conversion rB9facc506
  • Cleanup: Array types, const, math API in workbench code rBf5e76aa3
  • Cleanup: Quiet unused variable warning in non-debug builds rB8343e841
  • Cleanup: Remove unused image paint function rB96e37aff
  • Cleanup: Edit Mesh: Decrease variable scope, use bool instead of int rB6e0d58a6
  • Cleanup: Compiler warnings in new sculpt & workbench rB79ba1a1a
  • Cleanup: Rename pbvh.cc to pbvh_colors.cc rBf24b9a79
  • C++ Conversions


Review

  • Commented D17109: Geometry Nodes: Use face corner normals in Distribute Points on Faces node.
  • Requested changes D16792: New C++ based ply importer/exporter
  • Commented D17161: Fix T104256: Propagate all required curves attributes on points for move it in point cloud
  • Accepted D17190: Nodes: Add modal keymap for Node link drag
  • Accepted D17185: Modifiers: Measure execution time and provide Python access.
  • Commented D17084: UI: Statistics Overlay Improvements
  • Requested changes D16977: Fix T103761: creating a color attribute doesn't make it active
  • Accepted D17164: UI: Make uiBut safe for non-trivial construction
  • Accepted, committed D17131: Geometry Node: Curve to Points: Fix wrong field supported interface status
  • Accepted D17093: Shader Nodes: Use layers from evaluated mesh
  • Accepted D17092: BLI: GValueBuffer container
  • Accepted D17183: Fix T104296: Crash caused by incorrectly initialized group nodes.
  • Commented D16009: Geometry node: Add a point selection input to Fillet Curve Node
  • Accepted D17122: Fix T104136: Crash with Mesh to Volume & Simplify
  • Accepted D16103: USD IO: Moving to the new Mesh Attributes API for Colors
  • Accepted D17103: Fix T104044: keep order of UVMaps on load
  • Accepted D17194: Fix T104316: Fix width of headerless panels on overlapping regions
  • Accepted D17165: Keep CustomData layers properly sorted
  • Accepted, committed D17111: Fix T104071: Mix up in Realise Instances tooltip text


Tracker

  • Investigated: 28
  • Confirmed: 7
  • Archived: 7
  • Resolved: 7


Next Week

I have quite a few high priority reports stacked up so I'll really have to start with those. Then there's some code review I can get to, and the remainder of my most recent to-do list looks like this:

  • Duplicate entries in node search for assets with local ID
  • Grab curves sculpt brush
  • Root ID use in shaders for randomization
  • Field status toggle
  • Subtype editing

January 16 - January 22

This week I worked on various fixes, performance improvements, smaller new features, code review, and updating some existing patches. I also moved 50 files to C++, in preparation for another mesh data structure refactor. This time I'd like to replace MPoly with offset indices like we did for curves. There's no need to store the size of a polygon when it can be calculated from the next offset integer in the array. Storing the size is like caching the result of a subtraction, which doesn't really make sense. Jacques also added a nice abstraction for that this week, the OffsetIndices class, which I used in more places.

I still have two high priority bugs to look into, but I was able to close a few this week.


Changes / Features

  • Nodes: Use dynamic declarations for group nodes rB70260960
  • Geometry Nodes: Use checkbox for exposed boolean sockets rB2ea47e0d
  • Geometry Nodes: Rename Interpolate Domain and Field at Index nodes rB4961e5f9
  • Geometry Nodes: Rename node and socket for "Group ID" convention rB203ab983
  • Curves: Add RNA access to evaluated normals per control point rB241d87e9
  • Geometry Nodes: Add warning to set material node with no faces rB400f0229
  • Geometry Nodes: Adjust modifier UI to put field toggles on the right rB68625431
  • Geometry Nodes: Prefer evaluate at index value input in search rB9179362e
  • Performance
    • Curves: Avoid building evaluated point offsets for poly curves rB8d63293c
    • Geometry Nodes: Parallelize flip faces node rB4cfa4f75
    • Geometry Nodes: Parallelize mesh and curve edit hint transformation rBe0e6afb7
    • Curves: Avoid adding curve type attribute when setting default rB647a7da1
    • Curves: Avoid reallocations when evaluating NURBS curves rBdfd63bf1
    • Curves: Deduplicate and parallelize point to curve map creation rB6c4e3a9e
    • Curves: Remove attribute retrieval, deduplicate evaluation logic rB30111961
    • Curves: Avoid reallocations when evaluating curve in trim node rBe12498e4
    • Geometry Nodes: Avoid creating cyclic attribute when redundant rBbaf69b06


Fixes

  • Fix: Avoid node reevaluations for selection and parenting rBd76a0e98
  • Mesh: Skip conversion from legacy data if reading new format rB6d12d43a
  • Fix T103704: Particle hair doesn't fall back to active UV rB45372489
  • Fix T103911: Custom property edit gets wrong existing default rB2a41e082
  • Fix T103911: Editing boolean custom property UI data resets value rB50105b29
  • Fix T103937: Applying modifier resets shape keys rB873794b1
  • Fix T103632: Single point trim samples curve end point incorrectly {{GitCo