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-05Mesh: Remove redundant custom data pointersHans Goudey
For copy-on-write, we want to share attribute arrays between meshes where possible. Mutable pointers like `Mesh.mvert` make that difficult by making ownership vague. They also make code more complex by adding redundancy. The simplest solution is just removing them and retrieving layers from `CustomData` as needed. Similar changes have already been applied to curves and point clouds (e9f82d3dc7ee, 410a6efb747f). Removing use of the pointers generally makes code more obvious and more reusable. Mesh data is now accessed with a C++ API (`Mesh::edges()` or `Mesh::edges_for_write()`), and a C API (`BKE_mesh_edges(mesh)`). The CoW changes this commit makes possible are described in T95845 and T95842, and started in D14139 and D14140. The change also simplifies the ongoing mesh struct-of-array refactors from T95965. **RNA/Python Access Performance** Theoretically, accessing mesh elements with the RNA API may become slower, since the layer needs to be found on every random access. However, overhead is already high enough that this doesn't make a noticible differenc, and performance is actually improved in some cases. Random access can be up to 10% faster, but other situations might be a bit slower. Generally using `foreach_get/set` are the best way to improve performance. See the differential revision for more discussion about Python performance. Cycles has been updated to use raw pointers and the internal Blender mesh types, mostly because there is no sense in having this overhead when it's already compiled with Blender. In my tests this roughly halves the Cycles mesh creation time (0.19s to 0.10s for a 1 million face grid). Differential Revision: https://developer.blender.org/D15488
2022-08-30Attributes: Improve custom data initialization optionsHans Goudey
When allocating new `CustomData` layers, often we do redundant initialization of arrays. For example, it's common that values are allocated, set to their default value, and then set to some other value. This is wasteful, and it negates the benefits of optimizations to the allocator like D15082. There are two reasons for this. The first is array-of-structs storage that makes it annoying to initialize values manually, and the second is confusing options in the Custom Data API. This patch addresses the latter. The `CustomData` "alloc type" options are rearranged. Now, besides the options that use existing layers, there are two remaining: * `CD_SET_DEFAULT` sets the default value. * Usually zeroes, but for colors this is white (how it was before). * Should be used when you add the layer but don't set all values. * `CD_CONSTRUCT` refers to the "default construct" C++ term. * Only necessary or defined for non-trivial types like vertex groups. * Doesn't do anything for trivial types like `int` or `float3`. * Should be used every other time, when all values will be set. The attribute API's `AttributeInit` types are updated as well. To update code, replace `CD_CALLOC` with `CD_SET_DEFAULT` and `CD_DEFAULT` with `CD_CONSTRUCT`. This doesn't cause any functional changes yet. Follow-up commits will change to avoid initializing new layers where the correctness is clear. Differential Revision: https://developer.blender.org/D15617
2022-08-30Cleanup: Use const for custom data layersHans Goudey
2022-07-30Sculpt: Opaque vertex type for sculptJoseph Eagar
This is a port of sculpt-dev's `SculptVertRef` refactor (note that `SculptVertRef was renamed to PBVHVertRef`) to master. `PBVHVertRef` is a structure that abstracts the concept of a vertex in the sculpt code; it's simply an `intptr_t` wrapped in a struct. For `PBVH_FACES` and `PBVH_GRIDS` this struct stores a vertex index, but for `BMesh` it stores a direct pointer to a BMVert. The intptr_t is wrapped in a struct to prevent the accidental usage of it as an index. There are many reasons to do this: * Right now `BMesh` verts are not logical sculpt verts; to use the sculpt API they must first be converted to indices. This requires a lot of indirect lookups into tables, leading to performance loss. It has also led to greater code complexity and duplication. * Having an abstract vertex type makes it feasible to have one unified temporary attribute API for all three PBVH modes, which in turn made it rather trivial to port sculpt brushes to DynTopo in sculpt-dev (e.g. the layer brush, draw sharp, the smooth brushes, the paint brushes, etc). This attribute API will be in a future patch. * We need to do this anyway for the eventual move to C++. Differential Revision: https://developer.blender.org/D14272 Reviewed By: Brecht Van Lommel Ref D14272
2022-07-25Fix T99036: hex color in "Add Color Attribute"Ramil Roosileht
Proposed solution by @scurest The color attribute in the RNA was tagged as COLOR_GAMMA. This change will change it to a regular COLOR. {F13217692} Reviewed By: joeedh, jbakker Maniphest Tasks: T99036 Differential Revision: https://developer.blender.org/D15272
2022-07-08Geometry Nodes: new geometry attribute APIJacques Lucke
Currently, there are two attribute API. The first, defined in `BKE_attribute.h` is accessible from RNA and C code. The second is implemented with `GeometryComponent` and is only accessible in C++ code. The second is widely used, but only being accessible through the `GeometrySet` API makes it awkward to use, and even impossible for types that don't correspond directly to a geometry component like `CurvesGeometry`. This patch adds a new attribute API, designed to replace the `GeometryComponent` attribute API now, and to eventually replace or be the basis of the other one. The basic idea is that there is an `AttributeAccessor` class that allows code to interact with a set of attributes owned by some geometry. The accessor itself has no ownership. `AttributeAccessor` is a simple type that can be passed around by value. That makes it easy to return it from functions and to store it in containers. For const-correctness, there is also a `MutableAttributeAccessor` that allows changing individual and can add or remove attributes. Currently, `AttributeAccessor` is composed of two pointers. The first is a pointer to the owner of the attribute data. The second is a pointer to a struct with function pointers, that is similar to a virtual function table. The functions know how to access attributes on the owner. The actual attribute access for geometries is still implemented with the `AttributeProvider` pattern, which makes it easy to support different sources of attributes on a geometry and simplifies dealing with built-in attributes. There are different ways to get an attribute accessor for a geometry: * `GeometryComponent.attributes()` * `CurvesGeometry.attributes()` * `bke::mesh_attributes(const Mesh &)` * `bke::pointcloud_attributes(const PointCloud &)` All of these also have a `_for_write` variant that returns a `MutabelAttributeAccessor`. Differential Revision: https://developer.blender.org/D15280
2022-06-14Cleanup: Snake case for variable nameHans Goudey
2022-06-14Attributes: Add null check in color attribute duplicate operatorHans Goudey
It's potentially possible that the attribute duplication could fail, for whetever reason. There is no great reason not to be safe in this high-level code.
2022-06-14Attributes: Adjustments to duplicate attribute API functionHans Goudey
Use a name argument, for the same reasons as 6eea5f70e3b79e3c668. Also reuse the layer and unique name creation in `BKE_id_attribute_new` instead of reimplementing it. Also include a few miscellaneous cleanups like using const variables and `std::string`.
2022-06-14Fix: Don't allow duplicate color attribute operator in edit modeHans Goudey
The internal function relies on `CustomData_copy_data_layer` currently, which doesn't work for BMesh. Support could be added as a special case for BMesh, but in the meantime avoid bugs by just changing the poll.
2022-06-08D14823: Adds operator to duplicate the active color attribute layerDennis Ranish
Fixes T97706 Adds operator to duplicate the active color attribute layer. Adds `"Color Attribute Specials"` menu to color attribute ui to access the `"geometry.color_attribute_duplicate"` operator. Internally adds a function that duplicates a referenced CustomDataLayer - `BKE_id_attribute_duplicate` mostly copies the existing `BKE_id_attribute_new` - but gets the type and domain from the referenced layer - and copies the data from the old layer into the new layer Reviewed By: Joseph Eagar & Hans Goudey & Julien Kaspar Differential Revision: https://developer.blender.org/D14823 Ref D14823
2022-06-08Attributes: Use names instead of layers for some functionsHans Goudey
This mirrors the C++ attribute API better, separates the implementation of attributes from CustomData slightly, and makes functions simpler, clearer, and safer. Also fix an issue with removing an attribute caused by 97712b018df71c meant the first attribute with the given type was removed instead of the attribute with the given name.
2022-06-08Fix: Improve poll for convert attribute operatorHans Goudey
Converting an attribute does not work from edit mode because there is no attribute API implemented for BMesh, so disable the operation in that mode and add a poll message.
2022-06-07Cleanup: Use const pointers in attribute APIHans Goudey
2022-06-01Cleanup: use 'e' prefix for enum typesCampbell Barton
- CustomDataType -> eCustomDataType - CustomDataMask -> eCustomDataMask - AttributeDomain -> eAttrDomain - NamedAttributeUsage -> eNamedAttrUsage
2022-06-01Merge branch 'blender-v3.2-release'Joseph Eagar
2022-06-01Fix T97408: Temporary fix for attribute convert undoJoseph Eagar
Sculpt undo now detects if an attribute layer has changed type/domain and unconverts it back. This is a temporary workaround to a more fundamental bug in the undo system. Memfile undo assumes it can always rebuild the application state from the prior undo step, which isn't true with incremental undo systems. The correct fix is to push an extra undo step prior to running an operator if an incremental undo system is active and the operator is using memfile undo.
2022-05-30Cleanup: Clang tidyHans Goudey
Mostly duplicate includes, also use nullptr, and using default member initializers.
2022-05-03Cleanup: Move color attribute enums to be reusableHans Goudey
These enum property arrays are used by a few patches in review. Moving them here means they don't have to be duplicated.
2022-05-02Color Attributes: Add initial fill color optionEthan-Hall
This patch adds allows the user to select the initial fill color when adding a new color attribute layer. --- {F13035372} Reviewed By: JulienKaspar, joeedh Differential Revision: https://developer.blender.org/D14743
2022-04-28UI: Fix consistency issues with attribute tooltips and iconsEthan-Hall
This patch modifies tooltips of attributes and UV maps to resolve inconsistencies. It also restores the vertex color icon that went missing from the UI lists when color attributes replaced vertex colors. Fixes T97614 Differential Revision: https://developer.blender.org/D14768
2022-04-28Cleanup: Fix compiler warningsHans Goudey
2022-04-28UI: Improvements to "Add Color Attribute" menuEthan-Hall
Allow the session to save the choice for domain and data type since it is highly likely that the user intends to use the same settings for subsequent color attributes. Use expanded button selectors for domain and data type since there are only two options for each. Differential Revision: https://developer.blender.org/D14785
2022-04-21Geometry Nodes: better support for byte color attributesJacques Lucke
Since {rBeae36be372a6b16ee3e76eff0485a47da4f3c230} the distinction between float and byte colors is more explicit in the ui. So far, geometry nodes couldn't really deal with byte colors in general. This patch fixes that. There is still only one color socket, which contains float colors. Conversion to and from byte colors is done when read from or writing to attributes. * Support writing to byte color attributes in Store Named Attribute node. * Support converting to/from byte color in attribute conversion operator. * Support propagating byte color attributes. * Add all the implicit conversions from byte colors to the other types. * Display byte colors as integers in spreadsheet. Differential Revision: https://developer.blender.org/D14705
2022-04-20Cleanup: Rename CD_MLOOPCOL to CD_PROP_BYTE_COLORHans Goudey
The "PROP" in the name reflects its generic status, and removing "LOOP" makes sense because it is no longer associated with just mesh face corners. In general the goal is to remove extra semantic meaning from the custom data types.
2022-04-13Rename Color Attributes domain from "Point" to "Vertex"Joseph Eagar
Addresses T97257, to make it consistent with regular attributes tab Review by: Julian Kaspar Differential Revision: https://developer.blender.org/D14631 Ref D14631
2022-04-05Refactor: Unify vertex and sculpt colors into newJoseph Eagar
color attribute system. This commit removes sculpt colors from experimental status and unifies it with vertex colors. It introduces the concept of "color attributes", which are any attributes that represents colors. Color attributes can be represented with byte or floating-point numbers and can be stored in either vertices or face corners. Color attributes share a common namespace (so you can no longer have a floating-point sculpt color attribute and a byte vertex color attribute with the same name). Note: this commit does not include vertex paint mode, which is a separate patch, see: https://developer.blender.org/D14179 Differential Revision: https://developer.blender.org/D12587 Ref D12587
2022-03-29LibOverride: Massive edits to 'editable' IDs checks in editors code.Bastien Montagne
Add new `BKE_id_is_editable` helper in `BKE_lib_id.h`, that supercedes previous check (simple `ID_IS_LINKED()` macro) for many editing cases. This allows to also take into account 'system override' (aka non-editable override) case. Ref: {T95707}.
2022-03-19BLI: move generic data structures to blenlibJacques Lucke
This is a follow up to rB2252bc6a5527cd7360d1ccfe7a2d1bc640a8dfa6.
2022-03-18BLI: move CPPType to blenlibJacques Lucke
For more detail about `CPPType`, see `BLI_cpp_type.hh` and D14367. Differential Revision: https://developer.blender.org/D14367
2022-02-11File headers: SPDX License migrationCampbell Barton
Use a shorter/simpler license convention, stops the header taking so much space. Follow the SPDX license specification: https://spdx.org/licenses - C/C++/objc/objc++ - Python - Shell Scripts - CMake, GNUmakefile While most of the source tree has been included - `./extern/` was left out. - `./intern/cycles` & `./intern/atomic` are also excluded because they use different header conventions. doc/license/SPDX-license-identifiers.txt has been added to list SPDX all used identifiers. See P2788 for the script that automated these edits. Reviewed By: brecht, mont29, sergey Ref D14069
2022-01-28UI: Use property split in new operator popupHans Goudey
This attribute conversion operator was just added. The UI looks more consistent with property split.
2022-01-21Attributes: add operator to convert generic attributes to other typesJacques Lucke
Editing of generic attributes on the original objects in edit modes is still very limited. However, when applying a geometry nodes modifier that generates new attributes. These attributes will show up in the Attributes panel. Currently, our exporters are not capable of exporting generic attributes. Therefore, for the time being, a work around is to apply geometry nodes and then convert a generic attribute to a task specific attribute like a uv map, vertex group or vertex color layer. Once more parts of Blender support generic attributes, this will become less important. Currently, only meshes are supported by the operator. However, it would be relatively easy to extend it to other geometry types. Differential Revision: https://developer.blender.org/D13838
2022-01-14Cleanup: move attribute operators to c++Jacques Lucke
2021-07-22Make polls for removing mesh data layers consistentPhilipp Oeser
This was reported in T90026 for attributes, but was also true for: - UVMaps - Vertex Colors - Sculpt Vertex Colors - Face Maps For Vertex groups and Shapekeys this was already done (in that their remove poll would check if there is a vertex group or shapekey to begin with), now make this consistent across all mentioned types. Thx @vvv for the initial patch (where this was done for attributes only) ref T90026 Reviewed By: HooglyBoogly Maniphest Tasks: T90026 Differential Revision: https://developer.blender.org/D11990
2021-06-28Geometry Nodes: initial attribute list for meshesJacques Lucke
This adds a new Attributes panel in the mesh properties editor. It shows a list of all the generic attributes on the mesh. In the future, we want to show built-in and other attributes in the list as well. Related technical design tasks: T88460, T89054. There is also a new simple name collision check that warns the user when there are multiple attributes with the same name. This can be problematic when the attribute is supposed to be used in geometry nodes or during rendering. Differential Revision: https://developer.blender.org/D11276
2021-05-26Fix T88251: "Operator Cheat Sheet" CrashPhilipp Oeser
Caused by {rB919558854d62}. Same fix as in {rBdc8a43c8755a} -- let RNA enum item callbacks check for NULL context. The NULL context is used to extract items for document generation. Maniphest Tasks: T88251 Differential Revision: https://developer.blender.org/D11391
2021-03-25Fix T86921: Executing "Operator Cheat Sheet" Crashes BlenderPhilipp Oeser
This was only happening without an active object. The "Operator Cheat Sheet" operator collects info about all operators, and as part of that executes the callbacks to create dynamic enums. The callback to enumerate the geometry operators (introduced in rB370d6e50252b) attribute domains depends on a context object. If this isn't available, we just have to return `DummyRNA_NULL_items`. Maniphest Tasks: T86921 Differential Revision: https://developer.blender.org/D10814
2021-02-10Cleanup: remove redundant headers in source/blender/editors/Campbell Barton
Remove redundant headers using `./source/tools/utils_maintenance/code_clean.py` Reviewed By: jmonteath Ref D10364
2021-01-04Cleanup: use 'pragma once'Campbell Barton
Add explanations for cases the header-guard defines are still used.
2020-09-09Geometry: add Attributes panel for PointCloud and HairBrecht Van Lommel
There is a list of attributes, along with operators to add and remove attributes. For adding, there are a few standard attributes that can be added quickly, as well as a popup to create a custom attribute. Ref T76659 Differential Revision: https://developer.blender.org/D8636