Hey everyone, with your help we figured it out. (A very big thank you to everyone who responded!) We made a mistake on the settings for how we group together foliage for rendering. In effect, you were always rendering all the foliage. This is obviously terrible. It is fixed internally now, but I'm not quite sure when you guys will see the fix. I'm not in charge of when patches get applied.
Cpt_Kill_Jack, on December 05 2013 - 09:21 AM, said:
I would like to note one thing in terms of what makes a video card ale. One of the hardest things for video cards to deal with even those like the 780Ti is shadows. But we dont deal with these that much. Now in particular with Last Eco in its normal mode the issue that drops frames and makes it intense on gpus when its one of the lighter maps as far as resources go. Foliage is the big issue. Foliage especially when it moves is really bad for GPUs. But not as bad as the issue for Winter Eco. Winter Eco has and issue with particles. Particles is the second most intense piece of visual glory after shadows that gpus have an issue with. This is because there is multiple little pieces of graphic that it has to render and move around. Where as shadows is dealing with transparencies and opacity of the dark spot that is also moving around.
The reason we have a hit on performance on Last Eco and Winter Eco has nothing to do with how resource intensive the map is. Its an issue of you made a map and then altered the map both containing at least one element that is specifically hard on GPUs.
I do appreciate your help, but what you are saying isn't quite accurate. You are correct in saying that shadows are expensive, but the main shadows you see all along the ground floor are faked. They aren't shadows at all, but rather a simple material affect applied to the dominant dynamic light. This effect is incredibly cheap (~13 instructions), and turning it off wouldn't be detectable by the human eye as it is actually cheaper than the amount of noise your gpu encounters. Also shadows are only turned on for high and ultra.
Foliage can be a big deal yes (it was the problem after all), but again not like you describe. The main cost of foliage is draw calls, not vertex shaders like you imply. Unreal uses hardware instancing to severely reduce the cost of foliage actors. (Side Note: foliage actors don't have to be actual foliage. They can be rocks like they are on Sahara.) Foliage "that moves" isn't nearly the issue you think it is. Foliage tends to have a very low vert count, which makes the expensive part (vertex shaders) not all that expensive at all. With that said, I do play on optimizing the foliage vertex shader as there is some waste there.
In an effort to clear up how particles work in Unreal, let me explain. Particle spawns and their location are actually tracked by the cpu, not the gpu. (PhysX is the exception). The gpu just has to draw them like any other translucent object. The shader cost on the vast majority of our particles (now) is really low. All particles with the same Material coming from the same particle system are drawn as one draw call, which all but eliminates the draw call cost for particle systems. The vast majority of the cost of particles in our game is screen space. The number of pixels they occupy directly relates to performance. Large explosions we have that have overlapping smoke (the term used is "overdraw") are much more expensive than the falling snow effect we have in Last Eco Winter despite the fact that the explosions have significantly less particles. The amount of screen space that the falling snow takes up is just so small, it doesn't really matter. In fact the snow effect is so cheap, it cost less than a frame. Turning it off has no discernible affect.
Again the problem was a single value that we didn't change from the (inefficient) default. The problem wasn't at all how we placed assets in the map, but rather the problem was simply a matter of forgetting to change a simple "100" into a "3". Also, the number one thing holding back performance on all of our maps wasn't even mentioned in your post. Our biggest performance bottleneck is actually draw calls, which is partially a result of our art style (won't change), and partially a result of how we created our assets before I got here (still trying to fix all those old assets).