Hi, I'm Shannon and this in my first blog post about The Witness. I'm currently the only 3D artist working on the game and this post is about game trees... both the ones I'm making and game trees in general.
I've worked on trees for games over the years, and I've come to a conclusion: There's no good way to make them currently. Trees reject the idea of low poly versions of themselves by their very nature, and what you're left with is many unsatisfactory ways of making them. It's up to the artist to pick which one of these techniques to use and to do their best to make it work. That choice depends on a lot of things. Does it have to be real-time, or can it be pre-rendered? Where will the player be when he sees the tree? Up close, far away, underneath, from above, or (in the worst case) all of these? Will there be a few trees or a forest of them? Then there's the engine constraints. Overdraw, poly counts, texture space, LOD systems, lighting and light maps; all these affect how the trees need to be created. And none of that is even scratching the surface on the style you want the trees to have.
Still, I like a challenge as much as the next person.
Here's an early visual mockup of the game that contains some trees. I didn't actually make this, but it did give me some direction is where to go. As you can see, the trees are very colorful and full of volume. I wasn't sure how close I could get to this, but I was going to give it a try. The problem with most low-poly game trees is that they are made with large sheets of polygons with branch and bough textures on them...and while this is certainly a way of making game trees, they usually can't be considered volumetric.
The current trees I have right now started from a lucky accident. Early on the engine couldn't handle alpha maps, so I want to make a bough structure that would look vaguely leafy without being too many polys and without using opacity maps. That's how I came up with this.
It's basically a ton of triangles sitting in a bowl. The bowl is there to simplify the bottom and hide the triangle nature of the triangles. It worked fine for the time I needed it. Recently I started adding a bunch of trees to the world and I wanted something fairly lightweight for even the large trees (the one I had done just before that was 40,000 polys, which was way too big). So I went to the old non-opacity tree, added some opacity maps and tried it out. And, surprisingly, it worked really well. It was giving me a volume I didn't expect, and it looked really good at a distance.
Not only that, I took a look at them with only the lightmaps on and the structure looked really nice...especially the branches underneath.
They were still too heavy though, being 12 thousand polys. Worse, they looked really bad up close and you could see that, what read as a nice, thick foliage from a distance, was really a mess of triangles.
So the past few days I've been trying to make the trees look better from a close distance and be lower poly without losing what I liked about the previous ones. After a bit of struggle, I got something that seems to do the trick. Ignacio helped a lot, making a shader that made polys disappear when they became too edge on to the camera, which eliminated many ugly artifacts. The foliage is half the polys of the other trees, plus it looks a lot better close up. Here's a close shot of it, plus a comparison shot with an older tree.
I still have a bunch of other ideas I want to add to these to make them look better, but I think we're on the right track to getting trees that really do have a nice amount of volume and harken back to the early mockups.