371011c9c4456259a045d9d009edc70cb39a8372
Part of #118145. At a high level, the process for a boundary brush works as follows: * On the first step of a symmetry pass, initialize data in the `StrokeCache` * Initializes propagation steps and relative brush factors on each element of the mesh * Initializes specialized per-vertex data for certain brushes * Grab original position data * Apply mask & automask values to precalculated vertex-sized factor array * Filter verts that are "uninitialized" by the initial pass * Filter verts outside of the symmetry area * Calculate the deformation-specific transform * Apply this transform either to the mesh directly or to the cloth simulation Of the deformation types, *Expand*, *Inflate*, *Grab*, and *Smooth* behave similarly to one another (applying a displacement), and *Bend* and *Twist* behave similarly (applying an angular displacement). Unfortunately, as is, this PR introduces a lot of extra, duplicated code. Most of the brushes are similar in their behavior, but differ slightly enough to make abstractions difficult. One potential path forward could be to create custom classes to hold or specify necessary data and use virtual functions on a per-node level to avoid doing this in a hot loop. Pull Request: https://projects.blender.org/blender/blender/pulls/125845
…
Blender
Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.
Project Pages
Development
License
Blender as a whole is licensed under the GNU General Public License, Version 3. Individual files may have a different, but compatible license.
See blender.org/about/license for details.
Description
Languages
C++
78%
Python
14.9%
C
2.9%
GLSL
1.9%
CMake
1.2%
Other
0.9%
