I’ve been experimenting with animation on H21, and while the tool has quite matured since the last version of Houdini, I’m having trouble with my workflow involving animating cycles. Most of the tools currently available in the scene animation are either buggy or unfriendly for that kind of workflow.
I tried to report some of these bugs, but they haven’t been addressed in a while, as I have been told that the problem is how the feature I’m trying to use works and why they aren’t just bugs. So I’d like to discuss my problem here in the hope that these will be addressed in a future Houdini update.
My workflow involves doing a lot of small cycle animations, often very simple; each cycle usually lasts between 1 to 5 seconds, and often involves using a limited number of keys that form a sinusoidal shape, relying on the tangent handles to tweak it.
To demonstrate, here is a little gif showing the idea:
and the curve (for demonstration purposes, I’ll limit to showing the X axis only; notice that this is an extreme case demonstration, where every key has a very specific tangent defined, including the first and last key):
If I want to mirror that motion to the mirror controller, I can use the mirror with plane tool and the bake feature. That’s where the problem starts:
To mirror this animation, I have to use the ‘bake’ tool, which forces me to: resample keys, break the tangents of the first and last frame, and worse: break the tangents of the first and last key of ALL my controllers.
Target Motion Curve:
Original Controller Curve (and any other controller that had a specific tangent defined):
The information of the animation is entirely lost.
Using the Mirror tool to bake the motion of one controller to another will break EVERY tangent information from the first and last key of all my controllers; that’s a very destructive process.
I understand that I can avoid this “every controller gets rebaked” by baking information into a new layer, but that’s not something I want to do. I wish to mirror my animation into the opposite side controller and keep working on both without the hassle of a layer.
When I mirror a controller, I want to keep all my keys as they are. My source controller has 4 keys with manually defined tangents; I would like my target controller to also end with 4 keys and their manually defined tangents, as I’d still wish to tweak the motion once mirrored. I do not want to resample my keys.
It would also be very convenient if, when the channel extrapolation is set to “Cycle”, the auto-tangent would automatically guess the slope based on the extrapolation information, as it’s currently something I have to manually set every time I tweak a key.
I’ve been trying to explore alternatives, for example by constraining each controller to a custom-made constraint where the motion is defined in terms of placing controls in key positions, as such:
.
However, there seem to be several limitations in what is possible with constraint currently :
- None of the SplineResample/Interpolate nodes in Apex feature ‘closed loop’ mode. Or lets you output the interpolated rotation information from the input matrix ( I want my constraint's controller rotation to describe the rotation of the driven controller, rather than follow the curve's own tangent)
- There is no way to sample an attribute using primuv (aside from using a vexsnippet in Apex, which is eww), so I can’t get the rotation information I actually want from the curve.
- There’s no way to output a visualizer shape in a custom constraint, making it difficult to accurately edit the motion curve during animation.
This is my two cents about a niche workflow. It’s more of a ‘video game’ focused workflow, but when it’s 80% of what you do, these few points would mean a lot if they could be addressed in the futur!
Thanks for reading
