Microsoft Halo PC technical and performance FAQ
October 6th 2003, v1.0
© Microsoft Corporation, 2001-2003. All rights reserved.
Originally posted at Bungie.net in .rtf format
Welcome to the Halo technical and performance FAQ!
This file contains answers to the most frequently asked technical and performance-related questions about the PC version of Halo (sometimes referred to as Halo PC). Its goal is to give you in-depth technical information about Halo PC and inform you of some of the rendering features and settings that are available in the game.
When writing this, we assume a certain familiarity with video cards, rendering terms and computers in general. This FAQ is undoubtedly more interesting for advanced users. Still, even if you don’t understand all the technicalities, you will find a few specific things you can tweak to get better performance out of Halo for your system.
1. Rendering features
2. General tips to improve performance
4. Fine tuning performance for online play
1.1 Rendering modes
1.1.1 What are the different rendering code paths supported by Halo PC?
Halo supports 4 different rendering code paths:
Pixel shaders 2.0 (DirectX 9.0)
In this code path, you are making absolutely no compromises on the visual quality of the game. You are seeing everything as best as possible, as engineered by our team. All the effects are in their most demanding form (as complex of a calculation as necessary to generate the best visual result possible).
Having said this, for many simple effects, even if you are running PS2.0, the game will automatically use a 1.4 or 1.1 shader because the visual result is exactly the same.
Pixel shaders 1.4 (DirectX 8.0)
When running in PS1.4, you are compromising only a subset of effects. Specifically:
- No bumped mirrored surfaces
- Some video effects are two-pass
Pixel shaders 1.1 (DirectX 8.0)
PS1.1 is probably the most widespread pixel shader version currently. When running in the PS1.1 rendering code path, the visual compromises are (in addition to the PS1.4 compromises):
- No model self-illumination (excluding some specific environmental models)
- No animated lightmaps
- Fog calculations are triangle based, not pixel based
- No specular lights
Cards that support Hardware T&L (fixed function - DirectX 7.0)
This is the most basic rendering code path for Halo. When running in that mode, you have to accept many visual compromises but are still getting a compelling Halo visual experience. The compromises are:
- No shadows
- Simple active camouflage effect
- No glows or flares
- Very basic fog, water and lighting
Note that you can always scale down your video card but you can’t scale up. Check your video card’s documentation to determine witch version of DirectX / pixel shaders it supports. If, for example, your card supports PS2.0, you can choose to compromise many of Halo’s effects by forcing it to run PS1.1. However, if your card supports PS1.1, you can’t force it to PS2.0 - this is actually happening in hardware, not in software.
1.1.2 How do I force the game to use a different rendering code path?
You force Halo to use a difference rendering code path by adding an argument to its command line. The arguments are -use20, -use14, -use11 and -useff. For example, to force Halo to run in PS1.4 mode, you would launch Halo by typing: “halo.exe -use14”. If you are using the shortcut installed on your desktop, follow these steps to add an argument to your shortcut:
- Right-click on the shortcut and choose Properties.
- In the target field, you will see “C:\Program Files\Microsoft Games\Halo\halo.exe” (assuming you’ve installed in the default directory). Add -use14 at the end of it.
1.1.3 The explanation is cool and everything but what’s the bottom line on rendering code paths?
Bottom line is, experiment. Figure out what works for you and your system for single player campaign play and for online multiplayer.
For example, in single player, I would rather compromise resolution, sound variety, effect details and a few frames-per-second than forcing PS1.4. However, others on the team will gladly force PS1.4 to run on a higher resolution. For multiplayer, I’m absolutely forcing PS1.1, compromising shadows, decals and sound variety to get a consistent high framerate at a higher resolution. This is a matter of personal preference.
1.2 Framerate modes
1.2.1 What are the different framerate modes supported by Halo PC?
Halo supports 3 different framerate modes:
When running in this mode, Halo will render at a consistent framerate of 30 frames-per-second (assuming your system is capable of sustaining a constant 30 FPS framerate).
In this mode, Halo will render as fast as possible but never faster than your currently set monitor refresh rate.
The final mode will allow Halo to render as fast as possible. This means Halo may refresh its image faster than your monitor’s currently set refresh rate, resulting in horizontal tearing (visual anomalies).
Cinematic cut-scenes are always played back at 30 FPS, however you set your framerate mode. These were all originally authored to look best when played back at 30 FPS.
1.2.2 How do I change my framerate mode?
To change your framerate mode, follow these steps:
- From Halo’s Main Menu, click Settings.
- From the Settings menu, click Video Setup.
- Change the Framerate option (it’s the third one) to whichever one you want to try.
- Click Ok.
The change will only take effect once you’ve clicked Ok. Note that as for every video setting, the framerate mode is a per-profile option so if you use a different profile to play online, you should double-check the settings to make sure it is set to your liking.
1.2.3 Why the hell did you guys leave 30 FPS in there? For the love of God, this is a PC game...
We know it’s a PC game... We actually had long discussions about this and many of us felt that consistent framerates were a much more pleasant experience than variable framerates so we left an option to force it to a consistent rendering speed. If you just want to run consistently as fast as your computer can, simply set this option to NO VSYNC and you’re all set.
1.3 Hardware specific options
1.3.1 Is hardware anti-aliasing supported?
No. Halo renders everything to multiple off-screen surfaces instead of directly to the D3D back buffer and hardware anti-aliasing is applied on the back buffer only. For Halo, we have to do this because some of the effects (such as the active camouflage or the zoom scope) require the back buffer as source data.
1.3.2 So whatever I set in my video card’s control panel makes no difference, right?
Actually, it does make a different - it will slow you down. When playing Halo, you should disable full screen anti-aliasing in your video card’s control panel.
1.3.3 What about some of the other popular video card options?
As documented in our readme file, we recommend leaving the Mipmap Detail Level to High Quality for ATI Radeon 9800 PRO 128 cards. We also recommended disabling hardware anti-aliasing for both nVidia and ATI cards.
Many of these video cards hardware specific options (available through the video card’s control panel) will cause graphics anomalies with Halo and we strongly suggest leaving them disabled.
1.4 Video Setup screen
1.4.1 Do I really care about all these options for performance? Shadows, decals, all that stuff...
Yes and no. Here’s the breakdown:
Resolution and refresh rate
You are used to these ones, every PC game will give you control over resolution and refresh rate. You know that the higher the resolution gets, the more demanding it gets on your system. So this has a direct impact on performance.
This one was explained above. The setting doesn’t impact performance at all. However, if you leave it set to 30 FPS and your system could render faster, it obviously won’t.
It’s beyond the scope of this FAQ to explain what specular lighting is. The performance impact of enabling or disabling specular lighting is about 1-3%, depending on your system.
Shadows are pretty much self-explanatory. Their impact on performance is about 4-7%, depending on your system and your game resolution.
Decals are, for example, bullet marks left on walls when firing on them or blood left on the ground after a fight.
Enabling decals means whenever you fire your weapon, for every bullet that hits a surface, two triangles are created (to form a quad), their projection on the surface is calculated (the surface is usually not flat) and they are rendered (textured with the appropriate bitmap and blended with the surface, of course).
Obviously, all of this comes at a cost, which is minimal for 1 decal but grows linearly with the number of decals on screen. These decals are created in a circular buffer so at one point, to create a new decal, one will have to be removed. They will also disappear with time. All of this is very standard across games.
So, disabling decals means all of this is skipped and results in and average of 1-2% performance improvement, independent on the resolution you are running at.
Particles impact the visual density of effects such as grenade explosions and the muzzle flash resulting from firing your weapons. The choices are Off, Low or High. Much like for decals, rendering particles involves rendering more triangles for every frame. The performance variation is about 3-5%, independent on the resolution you are running at.
Textures in Halo have different “level of details” (mip-maps), making them visually more compelling depending on the distance from which they are viewed (an enemy close to you will use a higher-resolution mip-map compared to a rock in the distance). Every game has a similar system to manage texture memory efficiently. When this is set to medium or low, the higher mip-maps level is adjusted accordingly. The impact on performance can be anywhere between 1-5% depending on your system and your game resolution.
The gamma setting has absolutely no impact on performance. It allows you to brighten or darken your screen image in game.
1.4.2 What about the “Defaults” button? How does it pick its defaults?
Yeah, good question. The defaults are pre-programmed, depending on the following properties Halo detects from your computer: your CPU speed, how much system memory (RAM) is available and how much video memory is available. Specular and decals also require certain hardware specific functionality and may be disabled if your video card doesn’t support them.
When running in “safe mode”, specular, shadows and decals are turned off, texture quality is lowered and the game runs in 640 * 480.
1.5 Is there a real-time framerate graph in-game?
Yes. Hit CTRL+F12 and a nice real-time framerate graph will overlay the game. Note that it’s a very basic one. It won’t keep track of low / high / average numbers.
2.1 Audio setup
2.1.1 Do audio settings have any impact on the game’s performance?
Well, let’s break them down as we did for video settings.
Master / Effects / Music volume
No impact on performance whatsoever.
First, your sound card must support this, not all sound cards do. If your sound card does support it, this will allow it to mix the sound buffers on the sound card, freeing the CPU from having to do this. If hardware acceleration is not supported or enabled, the environmental sound option (explained below) will be grayed out since it is not available in software mode.
The difference between Low / Medium / High is the number of voices made available to Halo as well as the quality of the final output mix sent to the sound card. On most cards with hardware enabled, the impact on performance is negligible; however, sound cards mixing in software will likely see a difference in performance with each setting.
Once again, this is dependant on your hardware and is specifically for sound cards which support EAX such as Creative, Turtle Beach, and Hercules since our environmental sound is EAX based. There is minimal impact on performance when enabling this (assuming your sound card is capable of doing it).
Believe it or not, our audio designers are so cool that they’ve recorded about 15 different sounds for firing the Assault Riffle (and every other weapon). When a weapon is continually fired, it randomly selects one of the sound files and plays it. By keeping the sound variety on low or medium, you reduce the “pool” of random sounds the game picks from, forcing re-usage of already cached sounds. This not only saves CPU cycles since every sound in Halo is compressed, but this also helps to reduce memory usage. The amount of performance gained depends on your system. Mid to high level machines may notice a slight gain, whereas lower end machines will most likely see a larger gain.
2.1.2 Anything to note about these defaults?
No. These will provide the best balance between audio quality and performance for most users.
2.2 Non-graphical hardware specific questions
2.2.1 Are there any specific hardware devices for which there are known performance issues with Halo?
Assuming all your devices are running using their latest available drivers, no, there is no specific hardware devices for which we know of performance issues with Halo.
However, the key is to get your latest drivers! I’ve heard of some pretty drastic performance improvements under certain Via 4-in-1 motherboards when their drivers were updated.
2.3 Operating systems specific questions
2.3.1 Anything I should know if I’m using Windows 98 SE or Windows 98 ME?
Enable Direct Memory Access (DMA) for your IDE controller. To enable DMA, follow these steps:
- Close all programs that are running on your computer.
- Click Start, point to Settings, and then click Control Panel.
- Double-click System.
- Click the Device Manager tab.
- Click the PLUS SIGN (+) next to Disk Drives.
- Click IDE/Disk (hard drive), and then click Properties.
- On the Settings tab, select DMA.
- Click OK, and then click OK again.
- Restart the computer.
Note: when you enable DMA, you increase the access speed to the CD-ROM drive and the hard disk. Some drivers do not support DMA access. If the DMA check box remains selected after you restart your computer, DMA access is supported.
If your system has 256 MB RAM or more, run in server mode rather than workstation mode. To run in server mode, follow these steps:
- Right-click on My Computer and select Properties.
- Click the Performance tab.
- Click File System.
- Select Network Server as the typical role of the PC.
2.3.2 What operating system do you recommend?
Halo runs best under Windows XP. While we’ve tested for compatibility with more versions of Windows (and in more languages) than you can think of, performance has always been optimal on Windows XP.
This is unsurprising: all the latest hardware is being optimized for feature only found under Windows XP and drivers are been written to take advantage of the stability and reliability of Windows XP.
2.3.3 Any other general advice?
3.1 What is the timedemo feature?
Make sure you have the very latest video drivers installed.
You may want to try going directly to the manufacturer of your video card for the most recent version of the video driver. We have worked closely with the graphics companies to make sure their most recent drivers are optimized for playing Halo.
Make sure you have the very latest audio drivers installed.
You may want to try going directly to the manufacturer of your audio card for the most recent version of the sound driver.
Make sure you have the latest motherboard drivers installed.
Most motherboards have firmware updates available that can be obtained from your computer manufacturer or the maker of your motherboard chipset directly. These updates are critical to make sure your AGP bus is running as efficiently as possible and the amount of sound, disk and network data sent across the PCI bus do not interfere or cause problems.
Motherboards with VIA AGP chipsets, particularly with AMD CPUs require the latest '4-in-1’ drivers available from for best performance and system stability.
Make sure you have the latest BIOS updates for your motherboard.
The BIOS is critical at reading and initializing the defaults for all your hardware and the very latest versions of the BIOS are often required to get the best performance out of some of the latest 4x and 8x AGP video cards. Once again, you should go directly to your motherboard’s manufacturer to get the latest BIOS and read carefully the instruction included with the updated driver.
Timedemo is a feature we implemented during the development of the game to help us make repeatable and reliable performance comparisons across a wide variety of system. On a daily basis, we would run timedemo on 5-8 different popular configurations with different settings at least 5 times, knowing immediately if a recent change was improving or decreasing performance.
3.2 What does timedemo do, specifically?
Timedemo will launch the game and load 4 cinematic sequences from the game, specifically these four:
- Intro sequence to the second level, “Halo”.
- Intro sequence to the fourth level, “The Silent Cartographer”
- Intro sequence to the sixth level, “343 Guilty Spark”
- Intro sequence to the ninth level, “Keyes”
These 4 cinematic sequences total 4700 frames.
Timedemo will get a begin time, start loading everything, render everything and get an end time for the whole sequence. When dividing 4700 by this total time, you get an average number of frames rendered every second.
3.3 Sounds like a bizarre idea to call this a representation of the game’s framerate, doesn’t it?
Yes, it does because everyone’s interpretation of these results varies.
Specifically in our case, with the original Halo executable, for every frame rendered in the timedemo sequence, we look at how much memory we are using (to get the maximum memory consumption and the average memory consumption numbers reported by timedemo). This is very expensive and slows the whole sequence by anywhere between 30-60%. Of course, the game itself doesn’t do that for every frame it renders...
Now keep in mind that the definition of a benchmark is to run two things one next to the other and reliably say: “hey, this one is running much better than this one”. Timedemo successfully accomplishes that. For any two machines, if you run timedemo side by side over and over again, you will know for a fact which machine gives you the best performance for loading these 4 cinematic sequences, rendering every frame, playing every sound, loading all the assets, checking on memory...
3.4 So with the upcoming 1.02 patch, are you doing anything to timedemo’s functionality?
Yes, we are doing two things:
- For every frame we render, we will not look at the memory footprint anymore.
- We are reformatting the output to display which graphical / audio settings are enabled / disabled. (so timedemo.txt will tell you if shadows were on or not, for example).
These are the only two changes. Any changes in the average frames-per-second numbers you use to see with halo.exe version 1.00 or 1.01 is only the result of not looking at the memory consumption anymore.
We had a debate about whether we should factor in loading times or not in the timedemo results and we have decided to keep loading times in the results. Actually, we don’t really have a choice. For any given frame, we have no trivial way of separating loading time from actual rendering time. This means that a given Windows 98 system running with DMA enabled on the IDE hard drive will render the whole sequence faster than the exact same machine running with DMA disabled. Similarly, two high-end Windows XP systems running with different performing hard disks (5400 rpm VS 7200 rpm, for example) will produce different results.
We think that it is fair for a benchmark to factor these in. After all, benchmarking is not exclusively about raw rendering power - the performance of the other components in your system should also be taken into account.
3.5 How do I use the timedemo?
Simply run “halo.exe -timedemo”. If you are using the shortcut that was installed on your desktop to run Halo, follow these steps to run timedemo:
- Right-click on the shortcut and choose Properties.
- In the target field, you will see “C:\Program Files\Microsoft Games\Halo\halo.exe” (assuming you’ve installed in the default directory). Add -timedemo at the end of it.
3.6 How does timedemo report its results?
Timedemo will create a file named timedemo.txt in your install folder.
3.7 Will timedemo take any other arguments into account?
Yes. If you run “halo.exe -nosound -use11 -timedemo”, timedemo will run without sound and will use the pixel shader 1.1 rendering code path.
4.1 Give me some tips to improve the framerate performance of my multiplayer game, now!
Force the renderer to use a different rendering pipeline by using the -use14 or -use11 command.
As we’ve seen above, a few key effects in the single player campaign look significantly better when they’re using the 2.0 version of the pixel shaders. However, none of these effects are used in the multiplayer game. If you’re loading up Halo to fight online, force the renderer down to 1.4 or 1.1.
Turn off decals and shadows under Video Setup.
These are super-cool for the single player campaign and really add to the visual experience of playing Halo. However, for online mayhem, I would compromise them to get better performance. Still, I wouldn’t turn down particles or effects - they are helpful to keep a visual representation of the radius of different explosions.
Under the Audio Setup, keep the sound variety on low or medium.
4.2 I’m all fine on framerate performance. What’s the deal with bandwidth?
All right, this could be a lengthy discussion but we’ll keep it short. From one multiplayer game to another, many different things will affect the size and the number of packets transmitted from the server to the clients. These things vary from the game type to the number of vehicles, from the weapon set to the number of players and with what is actually happening in a specific game. On average, a client will send 8 Kbps and receive 35 Kbps, meaning a 56Kbps modem player can join any kind of game. That is, obviously, assuming the server has a wide enough pipe to send up all that data to each client.
4.3 Blah, blah, blah... Just tell me how to avoid lag as well as humanly possible...
Go to network settings and don’t lie about your connection speed!
Halo servers are smart - they will throttle how much packets they send your way depending on the connection speed you are reporting. Not only that, should the server choose to send you less data, it will be smart about the tradeoffs it has to make and optimize your experience. For example, let’s say it needs to reduce the amount of information it is sending you. It will choose to send you less about a weapon on the ground being accelerated by an explosion rather than compromising how much information it’s sending you about the player you are fighting against (its position, its actions, ... all that critical information).
However, if you are on a 56Kbps modem and you report being on T1 / LAN, the server may send you more information than you can handle and you will start experiencing stuttering and lag.
Play on dedicated servers.
We’ve paid big bucks to get these up and running for you guys. Play on them! If you want to play a game type that’s not on there, send us an e-mail, we’ll get it in rotation. Better yet, set up your own! These have plenty of upstream bandwidth and they are your best bet to the highest possible quality of experience online.
5.1 Where can I find information about command line arguments?
Check out the readme.rtf file included in the game or type “halo.exe -help” to get the list of console commands. Whatever I would write here would be a copy-paste of that information.