Performs correctly in this scenario: https://vimeo.com/234564499
Remaining considerations:
- This is a first approximation to an appropriate "definition of UP." Currently an axis of the object is constrained to a projection of its initial direction, the projection is orthogonal to the target normal. There may be a more intuitive definition in a later version. This implementation, translated from linear algebra, should be easily adaptable to a future version of UP.
- Disappointingly, there was not an easy way to access the target normal for the shrink type of 'nearest vertex'. So as to not disrupt existing code, I have left the align-to-normal transformation disabled in that case.
- Surface normal interpolation (smoothing) has not yet been implemented.
Fixes T47440