May 6, 2021, 09:25 (GMT) |
Geometry Nodes: Initial basic curve data support This patch adds initial curve support to geometry nodes. Currently there is only one node available, the "Curve to Mesh" node, T87428. However, the aim of the changes here is larger than just supporting curve data in nodes-- it also uses the opportunity to add better spline data structures, intended to replace the existing curve evaluation code. The curve code in Blender is quite old, and it's generally regarded as some of the messiest, hardest-to-understand code as well. The classes in `BKE_spline.hh` aim to be faster, more extensible, and much more easily understandable. Further explanation can be found in comments in that file. Initial builtin spline attributes are supported-- reading and writing from the `cyclic` and `resolution` attributes works with any of the attribute nodes. Also, only Z-up normal calculation is implemented at the moment, and tilts do not apply yet. **Limitations** - For now, you must bring curves into the node tree with an "Object Info" node. Changes to the curve modifier stack will come later. - Converting to a mesh is necessary to visualize the curve data. Further progress can be tracked in: T87245 Higher level design document: https://wiki.blender.org/wiki/Modules/Physics_Nodes/Projects/EverythingNodes/CurveNodes Differential Revision: https://developer.blender.org/D11091 |
May 6, 2021, 09:25 (GMT) |
Fix wrong tracking curves after changing clip offset The issue was caused by frame start/offset change triggering clip reload, which was happening with a hardcoded scene frame index of 1, which could be outside of the actual clip frames. Solved by removing source change tag from the frame start/offset update. The source doesn't really change: the resolution will stay the same, as well as media type, its duration. So the tag was not needed. |
May 6, 2021, 09:25 (GMT) |
Fix (unreported): 'CoInitializeEx' being called without 'CoUninitialize' Problem introduced in {rB1f223b9a}. This was possibly causing random crashes in Blender file browser when compiled with ASAN. Microsoft documents indicate that any call to `CoInitializeEx` must be balanced by a corresponding call to `CoUninitialize`. https://docs.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-coinitializeex#remarks |
May 6, 2021, 09:25 (GMT) |
UI: Object Thumbnails Orientation Change Object orientation for thumbnail creation changed to be slightly oblique (tilted to one side and from above) to better show shape, especially when axis-aligned. Camera lens changed to 85 to avoid distortion of close objects like human heads. see D9940 for details and examples. Differential Revision: https://developer.blender.org/D9940 Reviewed by Julian Eisel |
May 6, 2021, 09:25 (GMT) |
Cleanup: format |
May 6, 2021, 09:25 (GMT) |
Cycles: add reference counting to Nodes This adds a reference count to Nodes which is incremented or decremented whenever they are added to or removed from a socket, which will help us track used Nodes throughout the scene graph generically without having to add an explicit count or flag on specific Node types. This is especially useful to track Nodes defined through Procedurals out of Cycles' control. This also modifies the order in which nodes are deleted to ensure that upon deletion, a Node does not attempt to decrement the reference count of another Node which was already freed or deleted. This is not currently used, but will be in the next commit. Reviewed By: brecht Differential Revision: https://developer.blender.org/D10965 |
May 6, 2021, 09:25 (GMT) |
LibOverride: temporarily fix the material driver workaround with a hack. Currently overriding properties within material node trees is not supported. However there is a workaround that allows feeding values through drivers via an intermediate custom property, as described in T82404. The workaround relies on the behavior of the ID copying code that always patches datablock self-references even without any overrides. Unfortunately, this broke during development of 2.93. This happened because a call RNA_struct_override_matches added in rB2281db72b0157 detects that no override exists, and 'restores' the self-reference to point to the original datablock. To avoid this, mark the Material.node_tree property with the PROPOVERRIDE_IGNORE flag to stop RNA_struct_override_matches from recursing into the currently unsupported node tree sub-block. This flag should be removed when this is properly supported. This was confirmed to fix the workaround and discussed with @mont29. |
May 6, 2021, 09:25 (GMT) |
Fix T86450: Random dark UI elements when redrawing Resolves occasional glitch/flicker drawing dark buttons in the UI. Regression in 405a5d3bd7ada5dd5af605b59ba07c7144f144a2 which removed shader unbinding when the batch is drawn. GPU_shader_bind could run with the sRGB uniform in an unexpected state. Reviewed By: fclem Ref D11124 |
May 6, 2021, 09:25 (GMT) |
Alembic Procedural: refactor data reading This splits the data reading logic from the AlembicObject class and moves it to separate files to better enforce a separation of concern. The goal was to simplify and improve the logic to read data from an Alembic archive. Since the procedural loads data for the entire animation, this requires looping over the frame range and looking up data for each frame. Previously those loops would be duplicated over the entire code causing divergences in how we might skip or deduplicate data across frames (if only some data change over time and not other on the same object, e.g. vertices and triangles might not have the same animation times), and therefore, bugs. Now, we only use a single function with callback to loop over the geometry data for each requested frame, and another one to loop over attributes. Given how attributes are accessed it is a bit tricky to simplify further and only use a ingle function, however, this is left as a further improvement as it is not impossible. To read the data, we now use a set of structures to hold which data to read. Those structures might seem redundant with the Alembic schemas as they are somewhat a copy of the schemas' structures, however they will allow us in the long run to treat the data of one object type as the data of another object type (e.g. to ignore subdivision, or only loading the vertices as point clouds). For attributes, this new system allows us to read arbitrary attributes, although with some limitations still: * only subdivision and polygon meshes are supported due to lack of examples for curve data; * some data types might be missing: we support float, float2, float3, booleans, normals, uvs, rgb, and rbga at the moment, other types can be trivially added * some attribute scopes (or domains) are not handled, again, due to lack of example files * color types are always interpreted as vertex colors |
May 6, 2021, 09:25 (GMT) |
Docs: PyAPI: Fix css selector failing on some pages |
May 6, 2021, 09:25 (GMT) |
Cleanup: clang-tidy |
May 6, 2021, 09:25 (GMT) |
Fix compilation error after recent compositor fix Apparently, there is no emplace semantic available in the Vector in the stable branch. |
May 6, 2021, 09:25 (GMT) |
May 6, 2021, 09:25 (GMT) |
Fix T87969: crash accesing FaceMaps / PaintMask data in editmode Workaround for crash when accessing FaceMaps / PaintMask data in editmode, just disallow access in editmode as is done with UVs. Same fix as in {rB3e2619b3e72a}. Maniphest Tasks: T87969 Differential Revision: https://developer.blender.org/D11146 |
May 6, 2021, 09:25 (GMT) |
Fix T87554 Exact Boolean performance bug. There was a quadratic algorithm extracting triangles from a coplanar cluster. This is now linear. Also found and fixed a bug in the same area related to the triangulator added recently: it didn't get the right correspondence between new edges and original edges. |
May 6, 2021, 09:25 (GMT) |
GPencil: Auto lock layers, tooltip grammar fix Reviewed By: #grease_pencil, antoniov Differential Revision: https://developer.blender.org/D11136 |
May 6, 2021, 09:25 (GMT) |
Geometry Nodes: Parallelize attribute nodes This commit significantly speeds up many of the attribute nodes when multiple threads are available in linear situations when parallelism cannot be achieved elsewhere. See the differential for a table of timing comparisons tested on a Ryzen 3700x. For an attribute with 4 million elements, the nodes were about 3 to 9 times faster. The changes are not exhaustive, other nodes could still be parallelized in the future. Also, it would be possible to further optimize the grain size in `parallel_for`, but I'd rather make sure it isn't too small. I tested some different values, but also relied on intuition-- increasing grain size for less complex operations and vice versa. Differential Revision: https://developer.blender.org/D11139 |
May 6, 2021, 09:25 (GMT) |
Fix T87905: GPencil modifiers not applied if saved with multiframe When saving a file in Edit mode with Multiframe enabled, the render did not include the modifiers. Now the multiframe is not enabled if it's doing a render. |
May 6, 2021, 09:25 (GMT) |
Minor updates to i18n spellcheck tool. |
May 6, 2021, 09:25 (GMT) |
Fix T87989: Crash using OpenCL in compositor Initial report was mentioning the Classroom demo scene, but this is probably because the scene was pre-configured to be used with OpenCL. Would expect any OpenCL compositing to be failing prior to this fix. The reason why crash was happening is due to OpenCL queue being released from OpenCLDevice destructor. Is not that obvious, but when Vector (including std::vector) is holding elements by value a destructor will be called on "old" memory when vector capacitance changes. Solved by making forbidding copy semantic for compositor devices and forcing move semantic to be used. Also use emplace semantic in the devices vector initialization. |
|