Week 15 + Holidays: January 7 - 11
- Fixed Bugs: T60342, T60338, T60327, T60282, T60291
- Started working on a new project called derivedrepo. It's purpose is to generate a new repository based on some (git) repository using some derivation function. The primary goal is keep a repository of compiled Blender builds to make bisecting more efficient. However, the project tries to solve a more general problem.
- Started working on nodes in Blender. So far I mostly implemented a node compiler that uses LLVM as backend. Will write more documentation this week. The code is currently in two separate repositories on Github: Blender Core and UI.
Week 16: January 14 - 18
- Testing new ArrayBase data structure as a replacement for ListBase (linked lists should not be used when it can be avoided...) (D4225).
- Fixed Bugs: T60591, T60383, T60304
- Unfinished fixes: D4221
- Started working on making vertices active using box/circle/lasso select, but stopped for UX reasons (D4217).
- Wrote a wiki page for the Everything Nodes project.
Week 17: January 21 - 25
- Fixed Bugs: rBA2eb519c, T60816, T58502, T59145, T60791, T60126, T60709
- Wrote a small addon for the Spring team to copy drivers (Github).
- Tried to help some new developers to do their first code contribution (Twitter -> D4258, D4260, D4261).
- Tested a generic interface for function calls. Also learned a lot about C++ this week. Currently, the code is still on Github, but will push the branch to developer.blender.org soonish.
Week 18: January 28 - 01
- Created an initial proposal for a Python Tool API. Many things have to be discussed still (T61105).
- Removed deprecated ghosting code (D4271).
- Fix T60996: Dyntopo flood fill fails due to missing ob->imat
- Fix T60067: some modifiers don't use shape keys correctly
- Fix T60226: Inset not working well on very small faces
- Fix: allow curve of driver to be evaluated individually (f4c0dac).
- Fixed some addons that were broken, because the object color does have an alpha value now (1ceaca7, 4e8ddec, 04dc7f2).
- Fix: allow removal of addons that are symlinked (e6ba760).
- Reviewed and merged: 9552d4b, d473d5b, 5348919
- Started to update the bgl docs (D4280).
- Committed to the Blender manual repository for the first time (4563).
Week 19: February 04 - 08
- Fix T61275: recognize values with decimal separator in svg importer
- Investigated D4312.
- Cleanup: Remove deprecated ghosting code (4547815).
- Fix T60935: More numerically stable distance to ray computation.
- Some improvements/fixes for the Object Scatter addon (f40ec5d, 8e3a51e, 6f0deb3).
- Don't split groups by default when importing .obj files (899c287).
Besides these things I also continued to work on the functions project. I'm spending quite some time learning how to do certain things in C++ (which I did not use for a serious project yet). I investigated/implemented the following:
- Managing shared ownership over language boundaries.
- Using dynamic composition instead of inheritance for some types.
- How to use const so that it does not get in the way.
I also worked on some data structures that I want to work with. I put those into BLI for now. Feels like a good place for Blenders own C++ data structures. Most of them also have some unit tests already.
- SmallVector<T>: Similar to std::vector, just that it does not have to allocate memory when it is small.
- SmallSet<T>: Build on top of SmallVector but supports different operations.
- SmallMap<K, V>: Similar to SmallSet.
- SmallSetVector<T>: An vector that supports efficient membership testing.
- Composition: Can be used in other objects to extend them dynamically. In my case I use it to have generic type and function objects that can be extended with backend specific information.
- RefCounter<T>: Generic object that wraps another object and extends it with an atomic reference counter.
- Shared<T>: Similar to std::shared_ptr but wraps a RefCounter object. Having it allows automatic shared ownership within C++, but still makes it possible to pass the RefCounter to C code.
Furthermore, I added a new node tree type, but it doesn't really do anything yet. I hope I'll get to that point next week.
Week 20: February 11 - 15
- Make marker lines in sequencer and graph editor optional (D4348).
- Tracked down some bugs I experienced when having references to node trees in a modifier. They were caused by user count problems of nodes (T61506, T61515). The bugs were fixed by Bastien.
- Fix T61430: invoke_popup() does not respect ui scale.
- Libs for Functions (quite experimental still): Small Stack, MemPool, Lazy Initialization Macro, ListBase Wrapper
- Functions: Type Inferencer Interface, Type Relations, Gather function dependencies
I took two days off.
Week 21: February 18 - 22
- Fix T61791: Motion path step is not taken into account
- Fix T61702: obmat used incorrectly when calculating constant detail size
- Fix T61707: Use id attribute to initialize object and curve names when importing .svg.
- Fix T61666: missing NULL_UNIT that stops iteration over units.
- FCurves: Remember active fcurve when selecting other bone (c598ad9).
- Reviewed D4320: Port "Import BrushSet" addon to Blender 2.8.
- Committed marker line patch from last week (3b3eba6).
- Made some nodes a bit more generic (input/output/math).
- Added possibility to use a generated function in the Displace modifier to calculate vertex weights.
- Added a new driver variable that can evaluate a function (and also set-ups dependencies mostly correct).
Week 22: February 25 - 01
- Fix T62050: Remove non-persistent timers in load-pre callback.
- Fix T61994: Crash when box selecting instances.
- Fix T61827: Operator align.selected2xyz was very slow.
- Fix T61875: Wrong description of normalize node in manual.
- Fix T61919: Rename "Smooth Vertex" -> "Smooth Vertices"
- UI: Show marker lines in remaining animation spaces (d541430).
- Reviewed D4401: Create new temperature unit.
- Gave a presentation about Everything Nodes in the Studio.
- Initial LLVM backend.
- Major file structure cleanup.
Week 23: March 04 - 08
- Fix T62319: Changing keyframe properties does not trigger update.
- Fix T62305: Unconnected group vector inputs are mapped incorrectly.
- Fix T61671: Too strong too dark text shadow in Blender Light theme.
- Fix T61761: Randomize Transform is an object mode operator.
- Fix T62112: Wrong curve face count.
- Fix T62208: Constant detail picker not taking object scale into account.
- Fix T62163: Duplicating particle system results in crash.
- Fix T62202: Circle select does not work on hair points.
- Refactor building the draw string for floats and ints (d617466).
- Patch that allows displaying factors as percentages (D4462).
- Found cause for T62210. Unfortunately applied wrong fix.
- Went over old bug reports and closed 40+ that had too little information to reproduce the issue.
- Mostly cleanup and small refactorings.
- Further experiment with how to manage shared ownership.
- Build LLVM IR for a function graph.
- Allocate Tuple objects on the stack in C and LLVM IR.
- Simplify node creation with automatic registration and automatic search menu.
- New Function Points modifier that uses a function which outputs a list. This is mostly for testing purposes for non-trivial data types.
- New "Append to List", "Get List Element" and "Combine Lists" node. They only work with Float Lists for now.
Week 24: March 11 - 15
- Fix truncated text errors (T61300, T62594, T62678).
- Fix T62614: Copy eevee settings when scene is copied.
- Fix T58668: Misaligned text when editing multiple values.
- Fix T61253: Wrong syntax highlighting when @ is used for multiplication.
- Fix T62059: Driver not updating in Color Ramp.
- Fix T59928: 'Radius' option does nothing when adding light probe.
- New Option to display factors as percentages (107c94c3).
- Remove functions from bgl docs, that don't exist anymore (D4280).
- Produced a video showing my bug fixing process (YouTube).
Tried to find the right abstractions to allow for more complex socket declarations in nodes. I have a plan now, but still has to be implemented correctly. Examples for behaviors that should be supported:
- Nodes that operate on lists adapt automatically based on what is connected.
- Vectorized nodes that can switch between accepting lists and single values automatically.
- Sockets that can accept any data type, but is still statically typed.
- Variadic nodes that allow a dynamic amount of sockets (e.g. function input/output, but this is useful in many nodes).
Week 25: March 18 - 22
- Fix T62587: Particle instances Use Count node saved correctly.
- Fix T62636: Overlapping scrollbar in driver editor.
- Fix T61226: Make hair editing (more?) thread safe.
- Fix T62558: Certain IES file causes crash.
- Fix T62758: Hair curves with UV mapped textures renders wrong.
- Fix T62711: Incorrect motion path update.
- Fix T62678: Better glyph clipping test.
- Fix T62808: Hair shape cut crash.
- D4553: Wrong user count after changing gpencil material.
- D4563: Do not show full action range.
- D4566: Incorrect context when selecting particles.
- Unified socket declaration system.
- More specialized automatic type inferencer.
- New Pack List node (replaces "Append to List" and "Combine Lists").
- Initial support for calling "subfunctions".
- Custom search terms for nodes.
- Initial body type for lazy input evaluation.
- New Boolean type.
- New Switch node that makes use of lazy input evaluation.
Week 26: March 25 - 29
- Fix T62776: Face maps are initialized incorrectly.
- Fix T62536: Incorrect context when selecting particles.
- Fix T62958: Improve exponential easing formula.
- Fix T62955: Missing panels in workbench engine.
- Fix T62935: Missing tag when copying constraints.
- Fix T62901: Bad handling of missing addon category.
- Fix T63040: Resizing node has offset.
- Fix T63015: Crash when using circle select tool in lattice edit mode.
- Fix T63032: Increase camera properties precision in UI.
- Fix idnames in addons after recent change (0f2207e).
- Experimental lazy fgraph evaluation.
- Manage execution stack and keep track of where functions come from.
- Initial problems panel in node editor.
- Use Blender's guarded allocator in more places.
- Initial multipool allocator structure.
- Wrap LLVM's IRBuilder to allow for cleaner code.
- Utility functions to optimize and print generated code.
- Refactor node declaration system.
- Wrote some technical documentation for the stuff I've been working on in the last couple of weeks. Some topics are still missing, but that should give a good overview of the general architecture as it is right now.
Week 27: April 01 - 05
- Fix T61830: Remove option to add new keymap item in search mode.
- Fix T63256: Make Dupli Face was broken since there are collections.
- Fix T60891: bgl docs still include deprecated opengl functions.
- Fix T63000: Don't use original file name for autosave.
- Started implementing a proposal for an Animation Editor Scrubbing Area (D4654).
- Reviewed D4648: Fix T63227: import vertex colors from .ply file without alpha.
- Reviewed D4601: Interface: New region type 'Footer', used by text editor.
- Reviewed D4649: Cleanup: Replace deprecated finite with isfinite.
- Reviewed D4479: Remember the last display mode in File Browser.
- Reviewed D4629: Fix T62939: Incorrect cursor position when exiting UI slider.
- Reviewed D4611: UI: Fix odd behavior in region sizing, simplify code.
- Reviewed D4617: UI: Collapsed nodes have the same width as uncollapsed nodes.
- Implement and use actual hash map/set instead of using linear search.
- Support for vectorized nodes in the UI.
- Generic automatic vectorization of functions.
- New Vector Math node.
- Splitup C API code into multiple files.
- More robust node tree update after changes.
- Simple cache to not build the same IR multiple times per module.
- Support for reroute nodes.
- Improve UI of Pack List node.
- Simple operators to create function trees from modifier.
Week 28: April 08 - 12
This week was the "Homestretch Workshop" week, therefore there were a lot of meetings and less time for actual coding work.
- UI: Do not show full action range (14e1a4e).
- Refactor View2D number drawing (D4681).
- Reviewed D4667: Fix add_search node operator to show custom nodes.
- Reviewed D4479: Remember the last display mode in File Browser.
- Implement MultiMap and ArrayRef data structure.
- Experimented with some lazy non-recursive evaluation methods, but this still needs more work.
- New Float Range node.
Week 29: April 15 - 19
- Refactor View2D number drawing (7fdffd7).
- Refactor boundbox handling of event handlers (D4705).
- Refactor storage usage during fcurve modifier evaluation (81ce380).
- Avoid autosave name collisions (5461a68).
- Fix T63673: Wrong API documentation for Quaternion.dot(other).
- Reviewed D4697: Incorrect poll methods in node category classes.
- Better defined relations between types.
- Support for implicit conversions in all directions between boolean, integer and float.
- New document about mesh type requirements.
- New document about categorizing modifiers.
- New simulation architecture proposal.
Week 30: April 22 - 26
- Fix T63233: Set default blur kernel radius to 2.
- Fix T63649: Action group expand setting for graph editor missing.
- New BLI_NOINLINE macro (ea940bc).
- Sequencer: Use Alpha Over blend mode by default (7c6c5b4).
- UI: Simple confirm dialog when loading new file (ca41548).
- Refactor: Allow event handlers to have a poll function (ea80264).
- Refactor: Separate template selection from read_homefile operator (cfe9c7b).
- Refactor: Separate scrollers from text drawing in API (D4747).
- Refactor: Markers drawing (D4745).
- Continued working on the Animation Editor Scrubbing Area (D4654).
- Reviewed: New backdrop draw-callback for node editor (D4709).
- Splitup DataFlowGraph into a dynamic DataFlowGraphBuilder and a very compact DataFlowGraph. This allows faster traversal of the graph for evaluation.
- Initial unit tests or the function system. Still have to figure out how to link the tests correctly to be able to test everything.
The new data structure allowed me to implement a more efficient evaluation procedure with the following properties:
- It uses no recursive calls.
- It does no heap allocation in the common case (except when the tree depth is very large).
- Support for lazy tuple calls (only calculate the inputs that are necessary).
- Frees values that are no longer needed very early.
- Copies are avoided in many cases by handing over ownership between nodes.
- Very few hash map lookups (nodes and sockets are identified by an index in a long array in the new data structure).
- Call stack information is maintained.
Week 31: April 29 - 03
- Finished the animation editor scrubbing area (D4654).
- Refactor: Support arbitrary y offset for channel list (fa59346).
- Refactor: Grid and scale indicator text drawing (667af6c).
- Reviewed D4759: A.N.T. Landscape addon broken after psutil API change.
- Generate more readable IR by not calling hardcoded integer pointers directly but through a named wrapper function.
- Automatic function vectorization using llvm.
Week 32: May 06 - 10
I only worked 2 days this week, but also found some time to work in the train.
- UI: Animation editor scrubbing area (f2b7582).
- Keymap: Special keymap for clip editor scrubbing area (c79fc71).
- UI: Move scrollbars to the right in animation editors (3b9813f).
- Experimented with multi-step-user-interaction-operators (D4829).
- Make it easier to build LLVM IR for common constructs like loops and if-then-else.
- Make printf function easily accessible within LLVM IR for debugging purposes.
- Start using ArrayRef in more places, as it really simplifies the code, avoids code duplication and reduces memory allocations.
- Initial support for default values for auto-vectorized functions (necessary when one input list is empty).
Week 33: May 13 - 17
- UI: Confirm dialog when closing an unsaved file (687385b).
- UI: File Close Dialog (5ce3f69).
- UI: Don't display markers in driver editor (86650b0).
- Correct outliner width computation (D4887).
- Fix T64721: Object Scatter addon broken after recent changes.
- Fix T64634: Incorrect type casting in versioning code.
- Interface: Callback to free popup arguments (c66a782).
- Refactor: Simplify ID Property freeing (db51206, e608900).
- BLI_memarena: Unpoison memory before freeing it (a7542b9).
- Wrote some more comments for the C++ data structures in BLI.
- New StringRef and StringRefNull class that can point to strings owned by another object (similar to ArrayRef).
- Use StringRef and ArrayRef in many more places to decouple implementation details.
- Remove Signature and Parameter classes. The data is now directly stored in the Function class.
Week 34: May 20 - 24
- Fix T64776: Multiple close file dialogs.
- Fix T64766: Use grid size from user preferences.
- Fix T64941: Insert missing bpy. to access context after recent changes.
- Fix T63443: Tool 'builtin_brush.draw' not found for space 'IMAGE_EDITOR'.
- Fix T65071: Crash when selecting joined tracks.
- GPU: Double uniform names buffer size (6f893d6).
- BLI_memiter: unpoison memory before freeing it (aa02421).
- Graph Editor: View-selected takes scrubbing and marker region into account (b03ee48).
- Reviewed D4912: Update operator_modal_draw python template.
- One cleanup pass over all new data structures.
- Cache auto-vectorized functions.
This week I spent some time writing documents about various topics.
- Guide for users on how to help triaging bugs (link).
- Proposal for basic C++ data structures, that can be used in many places in Blender (link).
- First steps towards making simulations "first-class" in Blender (link).
- Patterns for how nodes can define their socket interfaces (link).
- Proposal for how a particle system can be represented with nodes (link).
Week 35: May 27 - 31
I only worked on three days this week.
- Fix T65080: Handle case when View2D has 0 scale.
- Fix T65145: Draw curve draw tool settings in column.
- Fix T65177: Camera frame visible in viewport render.
- Fix T65275: Missing dereference.
- Sequencer: Drag outside of sequence to initiate box select (8e125f2).
- Sequencer: Fix box select using incorrect rectangles for sequences (f8f4318).
- Outliner: Correct outliner width computation (a63ac42).
Week 36: June 03 - 07
- API Docs: Fixed some examples (3a7af37).
- Particles: Remove unused particle settings from UI (87fde57).
- Python Templates: fix operator_mesh_uv template (54021da).
- Dopesheet: drag to box select in dopesheet (b79976a).
- Fix T65492: Make material slots popover wider.
- NLA Editor: Drag in empty region to invoke box-select (8b1ca3e).
- NLA Editor: Box-select was selecting wrong elements (7484ed9).
- Fix T65303: Fix and improve autorun-scripts popup.
- Graph Editor: Drag to box-select keyframes (04bac38).
- Fix T65328: Offset when outliner gains focus.
- Markers: Click-drag in empty area to box-select markers (ab5219a).
- Improve macros for functions that lazy-initialize data. The data is now freed before Blender's leak detection runs, avoiding false positives.
- Started working on the new particle system. For now it is just be a modifier, that will hopefully change in the future.
Week 37: June 10 - 14
This week I almost exclusively worked on updating the Blender manual for 2.8. I worked on the following sections:
- User Interface
- Image Editor, UV Editor, Text Editor, Python console, Info Editor
- Parts of Scene Layout
- Compositor: fix linear feather falloff in dilate/erode node (abd2403).
Week 38: June 17 - 21
In the manual I updated the Forces section. Additionally, I updated all the screenshots in various sections, most notably for the compositor nodes. For that I developed a small script that automatically creates screenshots of all the nodes (Github Gist).
Most of the time this week was spent on a new particle system. The current state can be found in the functions branch. Note, that there is not really an UI yet. Instead there are just a few settings in the modifier that I use for testing. Some things I worked on this week:
- Emitters: emit from point, curve and mesh surface.
- Events: Initial generic event system for particles. So far there are two event types: Age Reached and Mesh Collision.
- Multithreading: I already added initial multithreading support, because it is quite simple in the current design. Having it enabled will help make sure that nothing will break threadability.