Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-09-15Cleanup: Rename attribute required functionsHans Goudey
Avoid "customdata" in the name, since that's an implementation detail in this context.
2022-09-15Fix: Merging mesh and non-empty BMesh creates "flag" attributesHans Goudey
We need to use the custom data copy function that skips mesh-only attributes like the hide status attributes, the generic material index attribute, etc. Otherwise the BMesh has those attributes which conflict with their builtin counterparts.
2022-09-15PointCloud: add BKE_pointcloud_nomain_to_pointcloudKévin Dietrich
This adds a utility function to copy the data from a PointCloud outside of the main database to one that is in the database. This is similar to `BKE_mesh_nomain_to_mesh`. Ref D11592
2022-09-14Cleanup: Remove unused argument from modifier data mask callbackHans Goudey
This isn't likely to be helpful in the future with the move to generic attributes
2022-09-14Sculpt: Separate hide status from face sets, use generic attributeHans Goudey
Whether faces are hidden and face sets are orthogonal concepts, but currently sculpt mode stores them together in the face set array. This means that if anything is hidden, there must be face sets, and if there are face sets, we have to keep track of what is hidden. In other words, it adds a bunch of redundant work and state tracking. On the user level it's nice that face sets and hiding are consistent, but we don't need to store them together to accomplish that. This commit uses the `".hide_poly"` attribute from rB2480b55f216c to read and change hiding in sculpt mode. Face sets don't need to be negative anymore, and a bunch of "face set <-> hide status" conversion can be removed. Plus some other benefits: - We don't need to allocate either array quite as much. - The hide status can be read from 1/4 the memory as face sets. - Updates when entering or exiting sculpt mode can be removed. - More opportunities for early-outs when nothing is hidden. - Separating concerns makes sculpt code more obvious. - It will be easier to convert face sets into a generic int attribute. Differential Revision: https://developer.blender.org/D15950
2022-09-14ViewLayer: Lazy sync of scene data.Monique Dewanchand
When a change happens which invalidates view layers the syncing will be postponed until the first usage. This will improve importing or adding many objects in a single operation/script. `BKE_view_layer_need_resync_tag` is used to tag the view layer to be out of sync. Before accessing `BKE_view_layer_active_base_get`, `BKE_view_layer_active_object_get`, `BKE_view_layer_active_collection` or `BKE_view_layer_object_bases` the caller should call `BKE_view_layer_synced_ensure`. Having two functions ensures that partial syncing could be added as smaller patches in the future. Tagging a view layer out of sync could be replaced with a partial sync. Eventually the number of full resyncs could be reduced. After all tagging has been replaced with partial syncs the ensure_sync could be phased out. This patch has been added to discuss the details and consequences of the current approach. For clarity the call to BKE_view_layer_ensure_sync is placed close to the getters. In the future this could be placed in more strategical places to reduce the number of calls or improve performance. Finding those strategical places isn't that clear. When multiple operations are grouped in a single script you might want to always check for resync. Some areas found that can be improved. This list isn't complete. These areas aren't addressed by this patch as these changes would be hard to detect to the reviewer. The idea is to add changes to these areas as a separate patch. It might be that the initial commit would reduce performance compared to master, but will be fixed by the additional patches. **Object duplication** During object duplication the syncing is temporarily disabled. With this patch this isn't useful as when disabled the view_layer is accessed to locate bases. This can be improved by first locating the source bases, then duplicate and sync and locate the new bases. Will be solved in a separate patch for clarity reasons ({D15886}). **Object add** `BKE_object_add` not only adds a new object, but also selects and activates the new base. This requires the view_layer to be resynced. Some callers reverse the selection and activation (See `get_new_constraint_target`). We should make the selection and activation optional. This would make it possible to add multiple objects without having to resync per object. **Postpone Activate Base** Setting the basact is done in many locations. They follow a rule as after an action find the base and set the basact. Finding the base could require a resync. The idea is to store in the view_layer the object which base will be set in the basact during the next sync, reducing the times resyncing needs to happen. Reviewed By: mont29 Maniphest Tasks: T73411 Differential Revision: https://developer.blender.org/D15885
2022-09-14Adding `const Scene*` parameter in many areas.Monique Dewanchand
Related to {D15885} that requires scene parameter to be added in many places. To speed up the review process the adding of the scene parameter was added in a separate patch. Reviewed By: mont29 Maniphest Tasks: T73411 Differential Revision: https://developer.blender.org/D15930
2022-09-14Fix: Mesh SoA format conversion skips versioningHans Goudey
Converting to the SoA format (T95965) immediately when reading meshes means that none of the changes from versioning would be applied first. This means important fixes like f14995aba70a aren't properly applied, so modifications could be done to invalid CustomData. To fix this, move the SoA changes into versioning code, in a new versioning_400.cc file. Differential Revision: https://developer.blender.org/D15919
2022-09-14Cleanup: use proper `bool` variables in Main, instead of `char`.Bastien Montagne
2022-09-14Optimization: Exit early when resizing material slots.Erik Abrahamsson
When assigning a huge number of materials, like when importing thousands of objects, the function `BKE_objects_materials_test_all` uses quite a lot of resources because of the way it loops through all objects to resize the mat-array. By counting the amount of processed objects and comparing to the number of users of the obdata ID, we can exit early and avoid looping through all objects every time. Reviewed By: mont29 Differential Revision: https://developer.blender.org/D15740
2022-09-14Fix reports printing twice when called from Python in background-modeCampbell Barton
Calling operators in background-mode always printed with the assumption that output should never be hidden. However operators called from `bpy.ops` were also printing reports to the `stdout` (needed for the Python console and generally useful). Resolve by adding a flag to signal that the owner of the ReportList is responsible for printing to the `stdout`.
2022-09-13Fix: Resolve deprecation warning when copying polygon structHans Goudey
`MPoly` is used and copied in many places. To avoid the need to use a special function for copying MPoly, or the need to add a copy constructor, just rename the `mat_nr` field to include "legacy" in the name. This keeps the original purpose of notifying developers that the field shouldn't be used without any further complexity. Apply the same fix to `bweight`. Differential Revision: https://developer.blender.org/D15841
2022-09-13Geometry Nodes: Port the trim curve node to the new data-blockMattias Fredriksson
The trim functionality is implemented in the geometry module, and generalized a bit to be potentially useful for bisecting in the future. The implementation is based on a helper type called `IndexRangeCyclic` which allows iteration over all control points between two points on a curve. Catmull Rom curves are now supported-- trimmed without resampling first. However, maintaining the exact shape is not possible. NURBS splines are still converted to polylines using the evaluated curve concept. Performance is equivalent or faster then a 3.1 build with regards to node timings. Compared to 3.3 and 3.2, it's easy to observe test cases where the node is at least 3 or 4 times faster. Differential Revision: https://developer.blender.org/D14481
2022-09-13Fix T101027: Sculpt tools don't respect visibility after recent commitHans Goudey
Caused by b5f7af31d6d4, which exposed the fact that the PBVH wasn't retrieving the updated hide status attributes if they were allocated in sculpt mode. Previously the attributes were always allocated when entering sculpt mode.
2022-09-13EEVEE-Next: Cryptomatte render passes.Jeroen Bakker
This change adds cryptomatte render passes to EEVEE-Next. Due to the upcoming viewport compositor we also improved cryptomatte so it will be real-time. This also allows viewing the cryptomatte passes in the viewport directly. {F13482749} A surface shader would store any active cryptomatte layer to a texture. Object hash is stored as R, Asset hash as G and Material hash as B. Hashes are only calculated when the cryptomatte layer is active to reduce any unneeded work. During film accumulation the hashes are separated and stored in a texture array that matches the cryptomatte standard. For the real-time use case sorting is skipped. For final rendering the samples are sorted and normalized. NOTE: Eventually we should also do sample normalization in the viewport in order to extract the correct mask when using the viewport compositor. Reviewed By: fclem Maniphest Tasks: T99390 Differential Revision: https://developer.blender.org/D15753
2022-09-13Geometry Nodes: new evaluation systemJacques Lucke
This refactors the geometry nodes evaluation system. No changes for the user are expected. At a high level the goals are: * Support using geometry nodes outside of the geometry nodes modifier. * Support using the evaluator infrastructure for other purposes like field evaluation. * Support more nodes, especially when many of them are disabled behind switch nodes. * Support doing preprocessing on node groups. For more details see T98492. There are fairly detailed comments in the code, but here is a high level overview for how it works now: * There is a new "lazy-function" system. It is similar in spirit to the multi-function system but with different goals. Instead of optimizing throughput for highly parallelizable work, this system is designed to compute only the data that is actually necessary. What data is necessary can be determined dynamically during evaluation. Many lazy-functions can be composed in a graph to form a new lazy-function, which can again be used in a graph etc. * Each geometry node group is converted into a lazy-function graph prior to evaluation. To evaluate geometry nodes, one then just has to evaluate that graph. Node groups are no longer inlined into their parents. Next steps for the evaluation system is to reduce the use of threads in some situations to avoid overhead. Many small node groups don't benefit from multi-threading at all. This is much easier to do now because not everything has to be inlined in one huge node tree anymore. Differential Revision: https://developer.blender.org/D15914
2022-09-13Cleanup: remove unused functionCampbell Barton
2022-09-13Cleanup: Use attribute API for curves functionsHans Goudey
2022-09-13Cleanup: missing declaration warningCampbell Barton
2022-09-13Fix T101013: Reordering materials broken with only one assignedHans Goudey
When there was only a single material assigned to the mesh, the material index attribute didn't necessarily exist. Changing the oder of the slots wouldn't change the first material index as necessary.
2022-09-12Cleanup: Comment formattingHans Goudey
Also include a small cleanup to the previous commit missed from review.
2022-09-12When these features aren't used, there is no sense in storing theHans Goudey
corresponding data layers and using their values for computations. Avoiding that should increase performance in many operations that would otherwise have to read, write, or propagate these values. It also means decreased memory usage-- not just for sculpt mode but for any mesh that was in sculpt mode. Previously the mask, face set, and hide status layers were *always* allocated by sculpt mode. Here are a few basic tests when masking and face sets are not used: | Test | Before | After | | Subsurf Modifier | 148 ms | 126 ms | | Sculpt Overlay Extraction | 24 ms every redraw | 0 ms | | Memory usage | 252 MB | 236 MB | I wouldn't expect any difference when they are used though. The code changes are mostly just making sculpt features safe for when the layers aren't stored, and some changes to the conversion to and from the hide layers. Use of the ".hide_poly" attribute replaces testing whether face sets are negative in many places. Differential Revision: https://developer.blender.org/D15937
2022-09-12Sculpt: Fix T101008: Missing CD_MDISPS layerJoseph Eagar
sculpt_update_object now auto-creates a CD_MDISPS layer if missing. Note that it is possible for the depsgraph to provide a multires ccg context without a CD_MDISPS. This causes a PBVH_GRIDS pbvh to be built instead of falling back to PBVH_FACES, which is why this bug happens (of course falling back to PBVH_FACES would still be a bug).
2022-09-12Geometry: Avoid unnecessary initialization when resizing data arraysHans Goudey
When resizing mesh and curves attribute storage, avoid initializing the new memory for basic types. Also, avoid skipping "no free" layers; all layers should be reallocated to the new size since they may be accessed. The semantics introduced in 25237d2625078c6d1 are essential for this change, because otherwise we don't have a way to construct non-trivial types in the new memory. In a basic test of the extrude node, I observed a performance improvement of about 30%, from 55ms to 42ms. Differential Revision: https://developer.blender.org/D15818
2022-09-12Attributes: Add function to retrieve span without adding attributeHans Goudey
Previously, the only versions of attribute access that gave a span would also add the attribute when it doesn't exist, which isn't always wanted.
2022-09-12Merge remote-tracking branch 'origin/blender-v3.3-release'Sybren A. Stüvel
2022-09-12Fix T100918: change min value for NLAStrip startThibault de Villèle
The bug was contained in BKE/intern/nla.c, where the wrong macro was used as the minimum frame value. Instead of `MINAFRAMEF`, `MINFRAMEF` was used (the former is around -10k, the latter is 0, both fp32). Differential Revision: https://developer.blender.org/D15940
2022-09-12Cleanup: Remove unused DerivedMesh functionsHans Goudey
2022-09-12Cleanup: replace BLI_snprintf with BLI_path_joinCampbell Barton
Also use a larger buffer to account for the unlikely case of the buffer not being big enough for the appended directories.
2022-09-11Fix T100974: Remesh operators reset mesh propertiesHans Goudey
Caused by 21f2bacad977d3fd8 which copies a few more values to the original meshes from the "nomain" meshes. The "nomain" meshes created from the originals need to copy some values as well.
2022-09-10Cleanup: early return when directories can't be foundCampbell Barton
Also reduce variable scope and assert when an invalid argument is passed to BKE_appdir_folder_id_create.
2022-09-10Mesh: Avoid saving redundant generic material index attributeHans Goudey
This attribute is still read and written in the legacy format which puts it inside of `MPoly`. Missed in f1c0249f34c4171ec.
2022-09-09Mesh: Move bevel weight out of MVert and MEdgeHans Goudey
As described in T95966, the goal is to move to a "struct of arrays" approach rather than gathering an arbitrary set of data in hard-coded structs. This has performance benefits, but also code complexity benefits (this patch removes plenty of code, though the boilerplate for the new operators outweighs that here). To mirror the internal change, the options for storing mesh bevel weights are converted into operators that add or remove the layer, like for some other layers. The most complex change is to the solidify modifier, where bevel weights had special handling. Other than that, most changes are removing clearing of the weights, boilerplate for the add/remove operators, and removing the manual transfer of bevel weights in bmesh - mesh conversion. Eventually bevel weights can become a fully generic attribute, but for now this patch aims to avoid most functional changes. Bevel weights are still written and read from the mesh in the old way, so neither forward nor backward compatibility are affected. As described in T95965, writing in the old format will be done until 4.0. Differential Revision: https://developer.blender.org/D14077
2022-09-09Cleanup: Simplify BKE_mesh_nomain_to_meshHans Goudey
- Remove "take ownership" argument which was confusing and always true - The argument made ownership very confusing - Better to avoid boolean arguments that switch a function's purpose - Remove "mask" argument which was basically wrong and not used properly - "EVERYTHING" was used because developers are wary of removing data - Instead use `CD_MASK_MESH` for its purpose of original mesh data - Remove use of shallow copied temporary mesh, which is unnecessary now - Split shape key processing into separate functions and use C++ types - Copy fields explicitly rather than using memcpy for the whole struct - Use higher level functions and avoid redundant code - The whole idea is pretty simple and can be built from standard logic - Adjust `CustomData` logic to be consistent with "assign" expectations - Clear the layer data from the source, and moves the anonymous ID Differential Revision: https://developer.blender.org/D15857
2022-09-09Subdiv: Avoid quadratic runtime for loose edgesHans Goudey
Currently, when subdividing every single vertex on every loose edge, Blender iterates over all other edges to find neighbors. This has quadratic runtime and can be very slow. Instead, first create a map of edges connected to each vertex. With about 10000 edges, the performance goes from very slow to very smooth in my tests. Because of the nature of quadratic runtime, the improvement will depend massively on the number of elements. The only downside to this is that the map will still be built when there are only a couple loose edges, but that case is probably not so common. Differential Revision: https://developer.blender.org/D15923
2022-09-09Correct error building on WIN32Campbell Barton
Mistake in f7a4ede79f9512f39db8632ff112e08a93f3a9d4.
2022-09-09Nodes: fix memory leakJacques Lucke
2022-09-09Cleanup: move return arguments last, use `r_` prefixCampbell Barton
Also use '_num' suffix instead of '_tot'.
2022-09-09Edit mode normalize fails to respect locked groupsCampbell Barton
Add BKE_object_defgroup_flip_map_unlocked which excludes locked groups from the flip-map. Reviewed By: zanqdo, campbellbarton Maniphest Tasks: T96787 Ref D15317
2022-09-09Fix T96787: Edit mode normalize fails to respect locked groupsNate Rupsis
Add BKE_object_defgroup_flip_map_unlocked which excludes locked groups from the flip-map. Reviewed By: zanqdo, campbellbarton Ref D15317
2022-09-09Cleanup: spelling in commentsCampbell Barton
2022-09-09Python: change bpy.app.binary_path behavior WITH_PYTHON_MODULECampbell Barton
The following changes have been made to this attribute with WITH_PYTHON_MODULE is defined: - Defaults to an empty string (instead of pointing to __init__.so). - It's writable, so script authors can point to a valid Blender binary. `where_am_i(..)` is no longer used by BKE_appdir_program_path_init, there is now a separate code-path for setting the initial program directory, calls after this can be used to set the binary path.
2022-09-09Cleanup: check for Python module in BKE_appdir_program_path_initCampbell Barton
Replace the argument with an in ifdef in BKE_appdir_program_path_init. At the time `blenkernel` didn't define WITH_PYTHON_MODULE, since it does now there is no need for an argument. With the minor benefit of fewer preprocessor checks in the main() function.
2022-09-09Python: install "bpy" as a package WITH_PYTHON_MODULECampbell Barton
Building WITH_PYTHON_MODULE was creating a "bpy" module that required Blenders data-files to be located in the module search path too. This mean that a typical installation on Linux would create: - `/usr/lib/python3.10/site-packages/bpy.so` - `/usr/lib/python3.10/site-packages/3.4` (containing `scripts` & `datafiles`). The new behavior creates: - `/usr/lib/python3.10/site-packages/bpy/__init__.so` - `/usr/lib/python3.10/site-packages/bpy/3.4` With the advantage that the "bpy" directory is the self contained Python module. No changes are needed for the module loading logic as the mechanism to swap in blend internal Python "bpy" module (defined in `release/scripts/modules/bpy/__init__.py`) works the same in both instances. Thanks to Brecht for macOS support. Reviewed by brecht Ref D15911
2022-09-08Silence warnings/assert about invalid embedded IDs for older blendfiles.Bastien Montagne
there is no point in warning about files that are not supposed to be 'correct' in that regard.
2022-09-08IDManagement: change `IDTypeInfo.owner_get` to instead return address of the ↵Bastien Montagne
owner_id pointer. Also rename the callback. That way, we can keep moving toward a more generic handling of those embedded IDs (think e.g. about copy code).
2022-09-08IDManagement: Add new `BKE_id_owner_get` accessor.Bastien Montagne
Essentially calls `IDTypeInfo->owner_get` for now, will make more sense once the callback is changed to return the address of the pointer instead.
2022-09-08Cleanup: make meaning of base visibility flags more clearBrecht Van Lommel
Rename, add comments, and use flag in the depsgraph to ensure the logic matches. Differential Revision: https://developer.blender.org/D15883
2022-09-08Nodes: fix handling cyclic node treesJacques Lucke
2022-09-08Fix Blender as a Python module for WIN32Campbell Barton
BKE_appdir_program_path_init would override the module path extracted from the Python module, replacing it with the Python executable. This caused the data files not to be found and the module not to load.