Fix T94476: Threading/performance issue with curve to points node
For every spline, *all* of the normals and tangents in the output were normalized. The node is multithreaded, so sometimes a thread overwrote the normalized result from another thread. Fixing this problem also made the node orders of magnitude faster when there are many splines.
This commit is contained in:
parent
afdc35b636
commit
03b57d3973
Notes:
blender-bot
2023-02-13 16:39:01 +01:00
Referenced by issue #95489, Write to Vertex Groups from Geometry Nodes is not working anymore Referenced by issue #94963, The viewport may update at 0 FPS while navigating, until the mouse is released. Referenced by issue #94476, Geometry Nodes: Nested realized instances have broken rotation.
|
@ -282,18 +282,20 @@ static void copy_uniform_sample_point_attributes(const Span<SplinePtr> splines,
|
|||
}
|
||||
|
||||
if (!data.tangents.is_empty()) {
|
||||
spline.sample_with_index_factors<float3>(
|
||||
spline.evaluated_tangents(), uniform_samples, data.tangents.slice(offset, size));
|
||||
for (float3 &tangent : data.tangents) {
|
||||
tangent = math::normalize(tangent);
|
||||
Span<float3> src_tangents = spline.evaluated_tangents();
|
||||
MutableSpan<float3> sampled_tangents = data.tangents.slice(offset, size);
|
||||
spline.sample_with_index_factors<float3>(src_tangents, uniform_samples, sampled_tangents);
|
||||
for (float3 &vector : sampled_tangents) {
|
||||
vector = math::normalize(vector);
|
||||
}
|
||||
}
|
||||
|
||||
if (!data.normals.is_empty()) {
|
||||
spline.sample_with_index_factors<float3>(
|
||||
spline.evaluated_normals(), uniform_samples, data.normals.slice(offset, size));
|
||||
for (float3 &normals : data.normals) {
|
||||
normals = math::normalize(normals);
|
||||
Span<float3> src_normals = spline.evaluated_normals();
|
||||
MutableSpan<float3> sampled_normals = data.normals.slice(offset, size);
|
||||
spline.sample_with_index_factors<float3>(src_normals, uniform_samples, sampled_normals);
|
||||
for (float3 &vector : sampled_normals) {
|
||||
vector = math::normalize(vector);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue