Move the loop over all affected nodes to each brush implementation, making use of lambdas to avoid a bunch of boilerplate code. This makes it clearer what logic actually depends on the vertices in each node, and decreases future overhead if we decide to make PBVH nodes smaller.