Tree Animation/Wind?

Hello.

I’m interested in what methods for creating tree animations or wind are the most practical or the most used in games.
The two main ways I can think of are: rigging the tree using just a couple sockets/bones and creating an animation by hand. The issue here is that the animation would be static, meaning the direction the tree bends in the animation will change along with the tree’s rotation in the world, not matching the wind direction/other trees.
On top of that it would take quite a few bones if you wanted to give each branch its own strength of bending, as the trunk itself would be stiffer and the branches/cards would be waving about a lot.

The second would be morph targets, but as I know these are really expensive and impractical outside of characters. Though it would give you more control on how the tree appears with wind it would probably need a crazy amount of morph targets for anything.

I imagine also vertex colours could be used to give certain parts of a tree a different amount of strength, but I don’t know what kind of system would make use of that to create the wind.
I imagine if the tree was a skeletal mesh it could be forced to use ragdoll influence above a certain point, but again I don’t know how practical it is when you need hundreds of trees in a scene, (maybe with only 40-50 trees being animated).
Maybe a system similar to the simple grass wind material where it fakes wind using just the material. But what about when it comes to the tree collisions, or different strengths of wind (for trunk, branches, maybe as simple as material instances?).

I’ve seen speedtree capable of really great wind animations, but I think they’re not static animations like for something like a character? Otherwise the tree rotation issue I talked about above would make every tree sway in the wrong direction.

Finally there’s also cryengine which has some procedural ways of deciding which parts of a tree have what kind of stiffness. I don’t remember the tree requiring any work/set up for it to sway, and sway ■■■■ well they do. What I do remember is that some vegetation could be given bones, you’d place a few bones across a single branch and then it would handle every other branch with the same name. This includes grass, bushes and all sorts, so could possibly every single one of these be a rigged object?

So let me know what ideas everyone has, what methods speedtree or cryengine make use of, or what is used already in the industry. Primarily I’m interested in what could be achieved in a standard 3D application (like 3ds max) and Unreal.