Enemy Territory: Quake Wars Performance
This winter we’ll see the debut of a deluge of first-person shooters all competing for your attention. From Epic, there’s (supposedly) Unreal Tournament 3, while EA just released Medal of Honor: Airborne. Valve is putting the finishing touches on their Orange Box, which will include Half-Life 2: Episode Two, Team Fortress Two, and Portal, and Infinity Ward is wrapping up their work on Call of Duty 4. Gears of War and Blacksite: Area 51 are also primed for November debuts on the PC, but these games are more known on the Xbox 360 console and aren’t established franchises like the aforementioned titles. (Although I’m certainly looking forward to the debut of Gears on the PC, I’ve already played it on my 360 and I don’t think I’ll have time to play through it again on the PC – there are just too many games to choose from!
And of course, there’s the game everyone has been waiting for. Crysis. We all know by now that Crysis will look beautiful, but the million dollar question is how will it play, and will the storyline be as good as it has been hyped up to be?
However, before those games ever see the light of day, we’ll see the debut of the latest chapter in the Enemy Territory franchise from Splash Damage and id: Enemy Territory: Quake Wars.
If you recall, the Enemy Territory franchise was launched unceremoniously over four years ago. Based on the Quake III Team Area engine, Enemy Territory was adored by the gaming press and end users alike. The game featured an innovative objective-based system where opposing teams didn’t compete to capture each other’s flag or simply hold a certain piece of land for a set amount of time; instead teams had objectives, like the Axis team collecting and loading shells so a huge gun could be fired at the Allied forces in the rail gun map. The game also had a skills system that rewarded players for things like soldiering, engineering (building bridges and other installations), or best medic. Enemy Territory was about more than just shooting, it had an additional layer of depth that made it a rewarding experience for traditional FPS gamers used to Quake and Unreal Tournament, as well as teamplay-oriented shooters like Tribes and Battlefield 1942. To simply call it a Battlefield clone was really doing it a disservice. On top of that, Enemy Territory was 100% free! It really was a sweet game the likes of which we’ll probably never see again unfortunately.
Now id and Splash Damage are back, with Enemy Territory: Quake Wars. As its name implies, the game is set in the Quake universe, with humans (known as the Global Defense Force, or GDF for short) taking on the Strogg. The game essentially takes all the key elements from Enemy Territory (classes, skills system, objectives, etc) and molds them from the WW2 theme of Enemy Territory to the sci-fi future of the Quake universe. The game continues to focus on multiplayer gameplay rather than single-player, and adds controllable vehicles and aircraft, features which weren’t found in the original Enemy Territory.
Enemy Territory: Quake Wars is based on id’s venerable Doom 3 game engine, with the addition of id’s MegaTexture technology. To make a long story short, id’s MegaTexture technology is designed to provide very large maps without having to reuse the same textures over and over again. Traditionally these textures would have to be loaded from memory (either onboard the GPU or system RAM) or even worse, off the hard drive. Instead with MegaTexture a single, extremely large 32K x 32K texture is used to handle the basic terrain, with texture management handled by a pixel shader program Carmack has developed. You can find a much more detailed discussion of id’s MegaTexture technology here on Gamer Within
Keep in mind that tech like MegaTexture isn't unique to id or ET:QW. It is however important because this is the first id title to feature the technology. Crytek claims to use something similar for Crysis.)
ET: QW Performance
As any die hard gamer who is familiar with John Carmack’s game engines will tell you, id has developed a reputation for building engines that look awesome indoors, but don’t scale well from a performance perspective outdoors. Now whether or not this criticism is fair or not is something that we won’t delve into, but it is something that has followed id throughout the years, and try as they might to dissuade it with games like Team Arena it has followed them doggedly all the way up to today’s Doom 3 engine.
Because of the vast size of the maps in Enemy Territory: Quake Wars (the game is played almost entirely outdoors), critics of id have probably been flexing their fingers in anticipation as soon as the game was announced, but fortunately we can report that the game scales much better outdoors than previous id titles. Sure, you’ll obviously see a higher frame rate on indoors areas compared to outdoors, but this is the case for any game. What’s important is that the game doesn’t take a completely unplayable nosedive when you go outdoors.
With that being said, there are a couple of console commands you’ll want to keep in mind if you crave performance. In this thread on the official forums for ET:QW one of the game’s programmers goes over the three settings you’ll want to tweak for maximum performance:
“com_unlockfps” this is the master cvar. If you do not set this to '1' then it will never attempt to exceed 30fps. Default setting is 1.
“com_unlock_timingMethod” this setting determines which timing method is used for interpolated frames. There are 3 possible settings:
0: This will try rendering another frame whenever it estimates it has enough time left for rendering before the next game frame is done. This will give you the highest possible framerate, however it can lead to frame "bunching". To many (including myself) this feels really jerky - 200fps in the best case is no good if its regularly dropping to 60fps.
1: This is similar to method 0, but instead of squeezing in rendering whenever it can it tries to space them at even multiples of 30fps. This is a slight improvement over method zero in terms of smoothness, but sacrifices some FPS.
2: This is the same as method 1, but instead of estimating if it can fit another rendering frame using only the render time estimate it estimates using the total time of game + renderer. Hypothetical explanation: Lets say the time between two game frames was meant to be 10ms. Game + render time takes 5ms, leaving 5ms left. Rendering only took 2.5ms. Method zero would then render two more graphical frames before the next game frame - in effect feeling like the game should be running at 400fps but dropping a frame every 10ms, giving it a jerky feel. With this method it would only draw a single extra frame so it wouldn't feel sporadic. You'd only get 200ms however.
Default setting is 2
“com_unlock_maxfps” this setting locks the maximum frame rate to a certain fps (default is 60), set it to zero to remove this limit. This setting only does anything if com_unlock_timingMethod is set to 1 or 2 and rounds to the next lowest multiple of 30, so if you set it to 59 it will treat the maximum as 30
Like other id games, id and Splash Damage continue to provide a timedemo mode for benchmarking. In order to play back replays in timedemo mode, at the console type:
timeNetDemo demoname (where demoname is the name of a demo you've made).