Faster billboard technique?

I’m trying to create a dense forest. For gameplay reasons, each tree has to be a game object rather than a terrain tree, so currently each one is a quad with a tree texture, with a script that uses transform.LookAt() to point them at the player. The problem I’m running into is this: transform.LookAt() takes a huge toll on the framerate. If I disable the script, the game runs at around 1000 FPS with several thousand trees at once. With the script enabled, it drops to around 50 FPS.

So my question is this: how do I go about creating thousands of billboard sprites that won’t tank my framerate? Surly there has to be some way of doing this?

EDIT: I tried changing it so that the trees only rotate to face the player every half second, and while this does improve the framerate, it also looks really awful. I suppose I could make them update only when the camera is turned, but then the game is going to lag every time you look around, which isn’t ideal either.

I know this is possible, since Unity’s own tree system can handle thousands of billboard trees without any problem. So how do I do the same thing?

EDIT 2: I forgot to mention that ideally, the billboards should be vertically locked, so they don’t “bend” towards the player when they get close.

Billboard them in a vertex shader. Much, much faster…

Either the above ( the best idea) or make sure you are only rotating trees the camera can actually see.

do the billboards use Mip Maps? Maybe that would speed things up.

I have a shader I can share that is a little special because it assumes you are going to be having all of your trees static batched. It uses UV2 data of a special mesh to make it all work.