* Wrote a new API for wrangling temporary customdata layers across pbvh types:
- SCULPT_temp_customlayer_ensure: makes sure a (named) customdata
layer exists. Works for multires; since these are temporary
layers we can safely allocate them in a temporary CustomData
structure (in ss->temp_vdata).
- SCULPT_temp_customlayer_get: initializes a special structure,
SculptCustomLayer, that is used to get per elem customdata.
- SCULPT_temp_cdata_get: Uses a SculptCustomLayer ref along with
a SculptVertexRef to look up the data.
* Sculpt code seems to be memory bandwidth bound.
* Some key topology loops will have to be written manually
instead of using BM_ITER.
I wrote a function to re-allocate a bmesh with elements ordered by
PBVH leaf nodes, SCULPT_reorder_bmesh. It's currently disabled.
This is going to take more profiling, but my original proxy refactor
idea might be worth revisiting. Might be more cache efficient.
The good news is that the worst case is the smooth code, which I can speed
up significantly by keeping a bit of state around.
* Sculpt expand now works with dyntopo in more cases
* Fixed various dyntopo face set bugs
Stuff from several commits ago:
* There is now an API to get face sets using SculptFaceRef's.
+ SCULPT_face_set_get
+ SCULPT_face_set_set
* Prototyped a faster geodesic propagation function, but it currently
doesn't work.
* Dyntopo triangulation now preserves face flags (took some work as BM_triangulate_face explicitly prevents selection flags from being preserved).
* Also face smooth flags are no longer being overriden.
* Most of the faceset create operators work (I'm not sure I've tested
all of them though).
* SCULPT_face_set.c now has helper functions that checks if a pbvh
is *not* PBVH_BMESH, in which case it builds a temporary bmesh,
otherwise ss->bm is used (sculpt_faceset_bm_begin and sculpt_faceset_bm_end).
+ Note that some functions were able to use SCULPT_face_set_XXX
instead and avoid bmesh entirely.
reference counted. This fixes various undo bugs caused by dyntopo
needing to execute an undo push but not being able too (e.g. during
file load, and I think it also happens sometimes with global undo).
A much better way of fixing this would be to add unique IDs to mesh
verts and faces, perhaps as a customdata layer.
The root problem is that BMLog assigns unique IDs to mesh elements,
which it does via a series of GHash's. I imagine this is a fairly
serious violation of the undo system's design rules, since it means
BMLogs are tied to specific instances of the bmesh in SculptSession->bm.
There were some hacks to try and get around this, but they were buggy
and needed to push the unstack stack to work, which wasn't possible in
all cases (e.g. if G_MAIN->wm.first->undo_stack is NULL, as it is during
file loading and apparently global undo).
Anyway, long story short each chain of SculptUndoNodes needs some way
to reconstruct their ID GHash's when exiting/entering the chain. The
only way I could think to do this was to make BMLog reference counted,
with BMLogEntry the users.
Like I said, having a proper system to assign unique IDs to mesh
elements would be *much* better.
Add translation/rotation/scale parameters for custom bones shapes. The
new scale is a 3D vector `custom_shape_scale_xyz`, and replaces the
`custom_shape_scale` float.
Reviewed By: #animation_rigging, sybren, zeddb
Differential Revision: https://developer.blender.org/D10974
Previously we had a lot merge conflicts since we always put the most
recently added node at the bottom. By sorting the list we will have
one fewer merge conflict when a node is added in most cases.
The id-property iterator referenced a PyObject pointer without
increasing it's user count - allowing for errors if the value
goes out of scope during iteration.
Similar to how `GVArray_For_VArray` implements `materialize_impl` to
forward the work to its non-generic virtual array, we can do the same
thing for the mutable version, `GVMutableArray_For_VMutableArray`.
This commit should have no visible changes, since as far as I can tell
the only user of this class does not implement special materialize
methods anyway.
This enables the overlay for instanced geometry.
After this change, objects that are an instance of the current active
object (which are also being modified in the current active mode) won't
fade, which is different from the previous behavior.
Reviewed By: fclem
Maniphest Tasks: T82155
Differential Revision: https://developer.blender.org/D9362
When checking if the mesh has only one Face Set only the current active
component for expand needs to be checked. Otherwhise other components
that won't be modified by Expand that contain other IDs will be taken
into account, making the Face Set deletion go into an infinite loop.
Reviewed By: JacquesLucke
Maniphest Tasks: T88060
Differential Revision: https://developer.blender.org/D11169
Update the "current value" of the Shape Key blend amount when value is
not within the min/max range. New function `rna_ShapeKey_update_minmax`
used to update and clamp the current value.
Reviewed By: mano-wii, lichtwerk, #animation_rigging, sybren
Maniphest Tasks: T54339
Differential Revision: https://developer.blender.org/D11071
When a scene uses cryptomatte the viewport rendering would lead to a
memory leak. The reason was that all image renders (viewport+final)
activated cryptomatte. But is only used for final rendering.
This patch only activates cryptomatte when doing final rendering.
Was giving a warning:
```
BKE_spline.hh:293:35: warning: 'interpolate_to_evaluated_points' overrides a
member function but is not marked 'override' [-Winconsistent-missing-override]
```
Mistake in {rBe48c4d73d378}.
Was using the vertex index as a lookup for the loop color (instead of
the loop index).
(Issue was not present in original D1429 btw).
Maniphest Tasks: T88145
Differential Revision: https://developer.blender.org/D11212
These variables and methods should make it easier to loop through buffers elements/pixels. They take into account single element buffers.
Single element buffers can be used for set operations to reduce memory usage.
Usage example: P2078
Reviewed By: #compositing, jbakker
Differential Revision: https://developer.blender.org/D11015
This allows extra options (in-front and stroke order) to be shown when adding line art kind of grease pencil object.
Reviewed by: Antonio Vazquez (antoniov)
Diff: https://developer.blender.org/D11130
The last point of the output was at the same location as the
first point of a cyclic spline. The fix is simple, just account for
the cyclic when choosing the sample edge length, and don't
hard code the last sample.