Right now I'm using the Crytek vegetation bending technique, vertex colors control how much force is applied to the branches, leafs and trunks. I have it working and it looks nice but I'm just using random wind so it's all over the place.
Here is the code I use for the wind on the CPU, this gets passed of the vertex shader where the bending happens:
// Change wind every second, and smoothly interpolate to the new strength/direction.
Dim timeEllapsed As Single = CType(gametime.ElapsedGameTime.TotalSeconds, Single)
_Time += timeEllapsed
timeSinceLastThing -= timeEllapsed
If timeSinceLastThing < 0F Then
lastWindSpeed = newWindSpeed
Dim x As Single = CType(random.NextDouble(), Single)
x = CType(Math.Pow(x, 3), Single)
Dim y As Single = CType(random.NextDouble(), Single)
y = CType(Math.Pow(y, 3), Single)
newWindSpeed = New Vector2(x * 2.0F - 1.0F, y * 2.0F - 1.0F)
newWindSpeed *= 0.9F
timeSinceLastThing += 1.0F
End If
currentWindSpeed = Vector2.SmoothStep(newWindSpeed, lastWindSpeed, timeSinceLastThing)
It's nice and flowy so that's not an issue, it just doesn't really gust and stuff the same way wind does. I'm just wondering if anyone knows of a better way of making nice swaying wind? Or will I just have to tweak it till I find what I'm after?