Thursday, July 27, 2006

The Guilty Parties (e.g. why 850 is slow for now)

In the past two blogs I described the difference between efficiency and overall speed and the effects of VRAM, textures and objects on scenery. So now we can finally answer the question: why is X-Plane 850 beta 4 slower than X-Plane 840? (And can we fix this?)

The answer is: the biggest single thing slowing down 850 is the orbital rendering of the planet! It turns out that the planet is pretty expensive to draw, and even more so in 8.50. Why is the planet more expensive and why are we drawing it? It turns out that we needed to for the new water reflection textures.

In X-Plane 8.40 you can only see the ground about 25 miles away. This is because we don't have enough scenery loaded to draw any farther out - and if we did it'd be a real drag on framerate. But the sunset goes out to the horizon, which can be a lot more than 25 miles away, even at low altitudes. To address this, we decided to (1) make sure the whole-planet view had the new water as well and (2) draw that planet behind the main scenery to extend the sunsets out to the horizon.

So...X-Plane 850 is drawing the planet all the time (and drawing it with sun-textured water) and that's dragging down the framerate. For the next beta we'll make the planet code smarter so it draws as little planet as possible. This should get back almost all of the framerate 840 had, depending on weather and altitude.

The new water does cost a few fps - the framerate hit is very minor - but you may be able to get some more speed back by turning off "reflections and shadows" in the rendering settings. This
will make the water look like 840 and should bring back a few fps. Like 840, turning off the high-res planet textures rendering setting will also improve framerate a little bit.

So hopefully framerate should be pretty close to full speed in the next beta. There may be other parts of the sim that are slower, but the planet was the big one. But of course be aware of things in the sim now that weren't in the sim before:
  • Cars on the roads.
  • Flocks of birds.
  • Reflective water.
Even if X-Plane 8.50 is as fast as 8.40 (efficiency-wise) these new features do work that didn't need to be done before, slowing down frame-rate. You'll have to decide if you'd rather have the improved graphics or the framerate.

Wednesday, July 26, 2006

X-Plane Framerate and VRAM

When it comes to discussing graphics cards, VRAM always comes up. How much do you need? Is more really better? And why does X-Plane say it is using 300 MB of VRAM at current settings when you only have 64 MB of VRAM on your graphics card? How is this possible?

Well, the short answer is that X-Plane's measure of VRAM is actually mislabeled. But there's more to it than that. (See the bottom for tips for managing VRAM and framerate.)

X-Plane creates two kinds of graphics data for your graphics card: geometry data (the shape of mountains and valleys, buildings, runways and airplanes) and texture data (the raw images that are "painted" onto that geometry, such as grass, water, and airplane liveries).

The amount of texture data X-Plane loads is a function of your texture resolution settings - lower resolution means less texture data. Turning on texure compression also lowers this amount, and adding custom scenery may raise it.

The amount of geometry data X-Plane loads is a function of the number of cars and objects, add-on scenery, and which base meshes you use (new DSFs have more than old ENVs). Turning down the 3-d detail can reduce the amount of geometry data X-Plane has to load.

There are three two places that geometry and texture data can be stored: system memory (the RAM in your computer, on the motherboard) and video memory (VRAM, the memory on your graphics card). VRAM is usually faster than system memory, especially when the graphics card uses it, but there is usually less of it. For example, my Mac has 2048 MB of RAM but only 256 MB of VRAM.

We need one more concept to understand how VRAM and frame-rate relate to each other: the "working set". X-Plane loads a lot of textures when it starts up. But when it draws a frame, it may not need them all. For example, we may load the grass runways texture, but we may not need it if there are no grass runways nearby. The "working set" is all of the geometry and texture data that X-Plane needs to draw the current frame. And since you cannot look at the whole world at once, the working set is usually a lot less than the total data loaded. (For example, as soon as you stop looking at that aircraft carrier because you're flying away from it, the geometry and texture data for the aircraft data are no longer in the working set.)

So putting it all together we can realize that:
  • In the rendering settings dialog box X-Plane is reporting the total texture data.
  • The rendering settings number is possibly low because it doesn't account for geometry data.
  • The rendering settings number is possibly high because not all loaded data is in the working set.
  • X-Plane has two sources of memory to work from (VRAM and system RAM), so even if the memory reported by X-Plane was right and bigger than VRAM, system memory would allow us to still run.
So in summary the display in the rendering settings dialog box is not very informative - you cannot look at that number and your card's VRAM and use that data alone to predict frame-rate troubles.

So...how much VRAM do you need? Well, X-Plane uses VRAM and system RAM. Anything that is stored in system RAM has to be transfered over your graphics bus (this is your AGP slot or PCIe slot, faster is better, meaning AGP 8x is better than AGP 4x).

This is about to get geeky...skip down a few paragraphs for the practical part.

Basically you need enough VRAM and bus bandwidth (capacity to shovel data from system memory to your graphics card) to handle the entire working set (the stuff X-Plane needs) once per frame.

If I haven't already lost everyone, you could say:

max framerate = bus bandwidth / (working set - VRAM )

So faster bus = faster framerate, and more VRAM = faster framerate. (Math sticklers might ask - if VRAM = working set, is framerate infinite? No...but this equation tells us that if the entire working set fits in VRAM and thus you are not limited by the card fetching data. Other limits on the card will limit your framerate. But this doesn't happen so often as X-Plane's working set on a high-end card with nice settings can be hundreds of MB.)

So you either need more VRAM or a faster bus. In practice, both are good! If you're looking at a new computer, do not settle for anything less than a PCIe16x slot - that's the fastest bus you can get now...less will limit the usefulness of your computer when you try to upgrade.

Generally when you've got more data than VRAM your framerate will be slow - but if you have extra unused VRAM, your framerate will not increase. So what I recommend is: turn down texture resolution (and restart) and check framerate. Once you do this and the framerate does not improve, go back up one notch. This is the highest texture resolution you can run without losing framerate. If you want to go higher, go for it...but you'll pay for it in framerate a bit. Also, turn off FSAA for this test, as it can slow down framerates and make the role of VRAM hard to detect.

(A historical note: in the old days graphics busses were a lot slower than they are now. Remember that everything the card needs that doesn't fit in VRAM has to go over the graphics bus. So...on the old cards if you ran out of VRAM, the sim's framerate really tanked - it could fall down to 2 or 3 fps. But modern machines have much faster graphics busses, so as you run out of VRAM, the framerate get slower but is not totally unusable, becaues the graphics bus can keep up.)

Tips for best framerate:
  • Always use texture compression.
  • Turn down tex res until framerate doesn't increase, then go up one notch.
  • Be sure to buy a card with PCIe 16X!
  • If the VRAM listed in the rendering settings is larger then your card's VRAM - don't panic!

Monday, July 24, 2006

X-Plane 850 framerate and efficiency

Austin and Randy and the gang are out at Oshkosh right now - with Austin out of town there won't be a new beta for at least five days. In the meantime I've had some time to look at X-Plane 850's performance and tune the code a bit. (The next beta should be faster than beta 4.) I'll cover performance in a few blog posts because there are a lot of issues.

For today I'll stick to my usual rant: the difference between frame rate and sim efficiency. Simply put:
frame rate = (sim effiency * hardware power) / (visibility * scenery complexity)
Basically the sim gets faster with a bigger computer or more efficient code, and it gets slower as visibility goes up or you load more art into it. (By art I mean more complex 3-d models, bigger textures, more complex DSF meshes, more roads, or any other content that looks better but makes the sim do more work.)

Sim efficiency is only one of several factors in the equation, but, as a programmer, it is the one I care about most. For every release of X-Plane, I try to measure and confirm that the sim can process scenery at least as efficiently as it used to. If our efficiency goes down, your framerate goes down with nothing in return.

So in looking at the puzzle of low framerate in X-Plane 850, there are two questions we have to answer:
  • Is the sim less efficient than 840? (The answer, BTW, is yes, 850 beta 4 is less efficient, and I am working to fix that now!)
  • Does the set of artwork we've included in X-Plane 850 weigh down the sim more than the artwork in 840 when the same rendering settings are used? (The answer is: apparently not or at least not by any significant amount, but more research is needed.)
The point I'd like to make here is: nothing is free. We want to be as efficient or better than 840 (and when we're not, we work to fix it!) We want to make sure that if you don't use the new features, the old features don't cost any more than they used to. But we do not
try to keep the framerate the same if you turn on new things that you didn't have before!

We cannot give you something from nothing. If the sim ran at 30 fps with no cars before, it's probably not going to run at 30 fps with cars - cars take time to draw. Some examples of what's new in 850:
  • 3-d structures on all of the runway lights (this can be shut off by disabling textured lights).
  • Cars on the roads (controlled in rendering settings).
  • Birds flying around (controlled in rendering settings).
We've also redone the models for the ships and hot-air balloons. The new ones are more complex than the old ones and probably slow the sim down a little. Why didn't we provide a fallback to use the old fast artwork? Well, at some point if we try to provide everyone with every rendering setting we're asked for, the rendering settings dialog box will look like the cockpit of a 747-100. So in some cases we try to set something up that is reasonably fast and useful but not too complex, so ordinary users can understand the settings. In a later post I'll cover some of the tuning tricks you can use to maximize performance.

Coming up next: the relationship between VRAM usage and framerate.

Wednesday, July 19, 2006

Cars on the wrong side of the road

In the next few betas the cars will drive on the left side of the road for the UK and other countries that do that kind of thing. There are actually two sim changes to make this happen:
  • The road.net format allows us to specify where on theh road the cars drive, as a ratio from 0 to 1 (0 = all the way to the left, 1 = all the way to the right). So in the US, all car positions are mor than 0.5 but in the UK less than 0.5.
  • The library system now allows you to specify that a given file only be used in certain DSFs by painting a bitmap. So Sergio made a black and white PNG file with the right-side countries in black and left-side countries in white. I made a special road.net with the lanes on the left, and the PNG file controls which road.net gets used (the normal one or special left-side one).
I will try to post the spec for using PNG files to control library export in the next few days. This is a very powerful feature because it lets you paint the regions over which objects may be used. This technique will work for roads, objects, facades, or any other type of file used by X-Plane.

Monday, July 17, 2006

Random Thoughts on 850 beta 1

X-Plane 850 is now beta - see item 7 of Klingon Software Development. A few random thoughts:

We aim to make each new patch of X-Plane "performance positive", meaning for the same settings as the previous version, the new version will run faster. X-Plane 850 is definitely not performance positive right now, but this is mainly because it is an early beta. Expect lower framerates until we have time to do some tuning work and analysis.

X-Plane 850 supports a new apt.dat revision with curved taxiways, lines, etc. However you will not see this in the betas. The reason: the sim supports the data, but we have not yet shipped any new layouts using these features. Until custom scenery authors and layout creators adopt the new features you won't see them in the sim, even though the capability is there. Because we have not yet released editing tools for these new features, it'll be a bit before people can take advantage of them. (You can make curved taxiways now by reading Robin's spec and then using a text editor, but this is a very slow and painful way to make a layout. This is how I have to make taxiways to test the code right now.)

Finally perhaps most important: Austin and I do not have time to follow all of the various on-line forums and communities, so if you post a bug to a forum but don't file a bug report with us, the bug probably won't get fixed! Please use our bug report web page to file bugs with the new beta.

(The bug report web page is for bug reports only. In particular, if you bought X-Plane and are having trouble with it, please email info at x-plane dot com to receive tech support. Filing bugs will probably not get you timely tech support, but emailing our tech support people will.)

Friday, July 07, 2006

Transparent Runways

X-Plane 8.50 does all sorts of new things - the picture on the left illustrates "transparent" runways. A transparent runway draws no pavement and does not affect the physics model. But it does have all of the runway lights, signs, and shoulders (if desired).

The purpose of transparent runways is to allow custom scenery to use X-Plane's built-in approach and runway lights while providing your own runway, perhaps via an object with a hard surface.

Technically you could build your own approach and runway lights by hand-placing light objects (from the 850 light library package) onto your runway, but using a transparent runway is a lot easier and probably more reliable in the long-term.