Geometry Nodes: Parallelize deleting vertex group
Since 78f28b55d3
, allocating on multiple threads is much
faster, making it a nice improvement to parallelize vertex group
operations. This patch adds multi-threading when removing a
vertex group from the "Remove Named Attribute" node.
On a Ryzen 3700x:
Before: `(Average: 15.6 ms, Min: 15.0 ms)`
After: `(Average: 8.1 ms, Min: 7.6 ms)`
Differential Revision: https://developer.blender.org/D16916
This commit is contained in:
parent
2540a52f91
commit
58f1e62871
|
@ -1117,15 +1117,18 @@ class VertexGroupsAttributeProvider final : public DynamicAttributesProvider {
|
|||
return true;
|
||||
}
|
||||
|
||||
for (MDeformVert &dvert : mesh->deform_verts_for_write()) {
|
||||
MDeformWeight *weight = BKE_defvert_find_index(&dvert, index);
|
||||
BKE_defvert_remove_group(&dvert, weight);
|
||||
for (MDeformWeight &weight : MutableSpan(dvert.dw, dvert.totweight)) {
|
||||
if (weight.def_nr > index) {
|
||||
weight.def_nr--;
|
||||
MutableSpan<MDeformVert> dverts = mesh->deform_verts_for_write();
|
||||
threading::parallel_for(dverts.index_range(), 1024, [&](IndexRange range) {
|
||||
for (MDeformVert &dvert : dverts.slice(range)) {
|
||||
MDeformWeight *weight = BKE_defvert_find_index(&dvert, index);
|
||||
BKE_defvert_remove_group(&dvert, weight);
|
||||
for (MDeformWeight &weight : MutableSpan(dvert.dw, dvert.totweight)) {
|
||||
if (weight.def_nr > index) {
|
||||
weight.def_nr--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue