This adds a new `Interpolate Curves` node. It allows generating new curves between a set of existing guide curves. This is essential for procedural hair. Usage: - One has to provide a set of guide curves and a set of root positions for the generated curves. New curves are created starting from these root positions. The N closest guide curves are used for the interpolation. - An additional up vector can be provided for every guide curve and root position. This is typically a surface normal or nothing. This allows generating child curves that are properly oriented based on the surface orientation. - Sometimes a point should only be interpolated using a subset of the guides. This can be achieved using the `Guide Group ID` and `Point Group ID` inputs. The curve generated at a specific point will only take the guides with the same id into account. This allows e.g. for hair parting. - The `Max Neighbors` input limits how many guide curves are taken into account for every interpolated curve. Differential Revision: https://developer.blender.org/D16642
20 lines
526 B
C++
20 lines
526 B
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#include "BLI_offset_indices.hh"
|
|
|
|
namespace blender::offset_indices {
|
|
|
|
void accumulate_counts_to_offsets(MutableSpan<int> counts_to_offsets, const int start_offset)
|
|
{
|
|
int offset = start_offset;
|
|
for (const int i : counts_to_offsets.index_range().drop_back(1)) {
|
|
const int count = counts_to_offsets[i];
|
|
BLI_assert(count >= 0);
|
|
counts_to_offsets[i] = offset;
|
|
offset += count;
|
|
}
|
|
counts_to_offsets.last() = offset;
|
|
}
|
|
|
|
} // namespace blender::offset_indices
|