Joel · Environment Artist, PU teamThere will be a lot of LODs in the grand scheme of things. Generally, we have about five LODs per asset. If you calculated all the LODs, five LODs per building, it gets big, but at the same time, with the procedural tech and the planet tech, we just have to load this building once and then it's loaded there and it's loaded there, and we get a lot of reuse out of that one building. But it's definitely a good portion of the time doing these LODs and optimizing it. Obviously, if it's an interior space that you don't really see from far away, we don't have to do five LODs, because even on low spec you probably never see LOD 5 or LOD 4. But definitely the buildings, we went right up to the cusp so we could get the most draw range out of them.
Luan Vetoreti · Environment Artist, PU teamAnd that goes back to the previous question as well, about how we changed the art style, and it's a bit of both. We just wanted to make it look like this, and a bit of performance. The way that our LOD system works, it's all about getting these very small polygons and averaging them out. And these buildings are pretty large. So one thing that we could take into consideration is, okay, LOD 0, which is the most detailed that you see, would still have polygons that are large enough so that you see LOD 0 for actually quite some time, like maybe a kilometer, I don't know, like 500 meters. Whereas if we had lots of little details, lots of antennas, little polygons, little things, little cables, that thing within two meters would just go pop.
Nic Etheridge · Lead Environment Artist, PU teamFor example, on the rooftops, so we've got the buildings and we've got these rooftops on them and you can walk around them. So there are higher density polys and draw calls than the side of the building, because you can fly past the side of the building, but you can't walk on it. So it had to be high detail, but we've got to make sure, because we've literally got thousands of rooftops in one city or a collection of cities, for example around Area 18. So basically with each LOD, you need to reduce the amount of polys and draw calls. So with the lowest LOD, LOD 5, you're looking for it to be the most simple object, like a box with one material, so one draw call. But even that, it still costs: if you've got thousands of these, it's still a thousand draw calls. So in addition to LODing, we made sure things that were small and couldn't be seen from a distance, not only were they LODed, but they just disappeared when you didn't need to see them. So the rooftop has tons of railings going around, and I calculated, just for one railing type, there was about 60,000 on ArcCorp or something like that.
Luan Vetoreti · Environment Artist, PU teamIf you look at the planet and you see what the stats are saying, you're looking at millions of objects sometimes.
Nic Etheridge · Lead Environment Artist, PU teamIt's insane. I think when we added ArcCorp in, we added over 100,000 entities into the PU, which was fun for the engineers. But with the railings and small things, the railings are very thin objects, and from a distance they get to like a pixel thin, and then you don't need to see them. So we set the view distances on those kind of objects very low. So if you're on one rooftop and you're looking over to another one, you're not going to see the railings anyway because they're really thin. So we don't draw them. We just turn them off. So it's those kind of tips and techniques that will help even further. Good LODs is one thing, but making sure we've got a system in place that doesn't even draw them is even better.
Nic Etheridge · Lead Environment Artist, PU teamJust one more thing to add is something that we want to look more into is hierarchical LODs. Basically we will merge LODs together. So if you've got five buildings on a tile or a hundred buildings in a city or whatever, when you're up close to it, you're seeing the building at LOD 0, and the further you get away, each building LODs down, and then we will merge those buildings together as one mesh, which will then save more draw calls. So it's something that we want to get into more in the future.