=============================================================================
This online version of the Tileproxy Manual has been posted with the permission of TP author
Christian Buchner and is maintained and updated by "TileProxy Tutorial" author Ed Truthan.
Every effort has been made to insure that the material herein contained has been transferred to
HTML format from the original text document as accurately as possible. Any errors or omissions
may be reported to edtruthan@gmail.com Comments or suggestions concerning the content herein
contained should be addressed to TP/Manual author Christian Buchner at Christian.Buchner@gmail.com
=============================================================================

*** The TileProxy Project ***

*** EIGTH BETA RELEASE - 30cm Version (October 28 2008) ***

Pack the real world into your GPU.

An interface between online map tile servers and FSX / FS9

This is a the Beta 8 release of Tileproxy and the fastest Tileproxy release by far. The
technology used in the kernel driver has been improved significantly to bring you a crisp and
razor sharp flying experience for most general aviation purposes. In FSX, the outermost
scenery ring is now loaded from a BGL file and not through Tileproxy which reduces the number
of individual tiles that make up the scenery by at least one half. Even jets and turboprops
will work nicely if you fly at cruising altitude.

Note that compatibility with Google Inc.'s map servers had to be removed at the explicit
request of Mike Hearn who is with Google Earth and Maps engineering department.
This is unfortunate, but complying to this request was probably the wisest choice to make.

Please check this manual to understand what this software does and how it has to be
configured to run. This program is not fully configured "out of the box" to keeping the
project out of legal troubles. Configuration of this program may require some basic
understanding of the web (how to use search engines, how to form URLs) - or try get some
help from friends and forum members.

Quick Link Index

01. Flight Simulator Compatibility Chart
02. CPU Performance Chart With Tileproxy
03. Changes Compared To Sixth Beta Release
04. A Warning Regarding The Beta Status:
05. Introduction
06. Technical Features And Limitations
07. Supported Online Map Services
08. The Legal Aspects
09. Installation Choices
10. How To (And How Not To) Use This Software
11. The Moving Map
12. Using The Graphical Service Cache Browser
13. About The Author
14. Motivation And Development History
15. License And Support
16. Technology Used In This Software
17. Acknowledgements
18. Recommended System Specifications
19. Installation Guidelines And Notes
20. Changes To Your FSX.Cfg
21. Changes To Your FS9.Cfg
22. Configuration Guidelines
23. Parameters In The [Tileproxy] Section
24. Parameters In The Services Sections ( [Acme Globe Service] In Our Example)
25. More About String Substitutions In The Urls:
26. How To Configure Tileproxy To Use A Http Proxy Server:
27. Improving Visual Quality Of Specific Map Services
28. Understanding The Level Of Detail (Lod Rings) And Pre-Loading
29. Interpreting The Program’s Statistics Output
30. How does the static LOD8 photo scenery work?
31. Some Frequent Problems And Solutions
32. Troubleshooting And Maintenance
33. Improving Terrain Loading Performance In FSX
34. Performance Issues With Flight Simulator X Service Pack (Sp1, Sp2, Acceleration)
35. Sp1 Deinstallation Instructions:
36. Performance Considerations With Microsoft Flight Simulator 9
37. Image Quality In FSX
38. Uninstalling TileProxy
39. Future Work Items
40. Commercializing This Project?
41. Working For Microsoft?
42. Recommended Third Party Add-Ons:
43. Scouting The Area Before Choosing A Flying Location
44. Good Locations To Fly At
45. Known Problems In This Relase Version:

Flight Simulator Compatibility Chart


Simulator Version

Compatibility

Detail Description of issues:

FSX SP1, SP2 and Acceleration
in DirectX 9 mode

Best

Everything should work

FSX SP2 and Acceleration
in DirectX 10 mode

Good

No moving map supported currently.

FSX RTM version
(the DVD version)

Poor

Lots of black / water squares may appear close to the aircraft. Working on that.

FS 2004 (Century of Flight)

Medium

A few isolated black squares may appear.
No moving map supported currently.
Only hard land/water boundaries.
Only 4.75m /pixel tiles.

FS 2002 (Std. and Professional)

Poor

Graphics rendering is interrupted for tile I/O, leading to lots of stutters.
Like FS 2004 otherwise.

back to top / index

CPU Performance Chart with Tileproxy      

For a truly satisfying experience you want something like 500 tiles per second in flight with
FSX. This is just a rough estimate based on my limited testing experience - your numbers
may vary. In FS 2004 the tiles per second typically matches your frame rate - so get your
framerate up (50-100 FPS) and your performance should be OK.

CPU Type

Performance Rating

Peak Tiles per second to expect in mid Flight

Pentium IV, Pentium D, Intel Celeron and Celeron D, Athlon XP or MP

Poor

Below 200

Athlon 64 and Athlon 64 X2

Average

Between 200 and 400

Core Duo, Core 2 Duo

Good

Between 300 and 600

Intel Core 2 Extreme
Intel Core Quad Q6600 or faster, AMD Phenom

Perfect

Between 600 and 1000

Dual Intel Xeon (8 cores)

Crazy

Honestly I don’t know

back to top / index

Changes compared to Seventh Beta Release

Overall this release should give you a better experience than any previous Tileproxy version.

Added a FSX compatible LOD8 scenery layer to Tileproxy that contains NASA's "Blue Marble"
image at 500 meters per pixel source resolution. If this layer is placed at higher priority
in the scenery library than Tileproxy's other scenery layers, it will cause FSX to load the
outermost detail scenery ring from the BGL which is much faster. Tileproxy can then focus on
loading the high resolution data. The speedup should be significant.

Blocked compatibility/interoperability with Google Inc.'s map servers. This change was made
after an explicit request of Mike Hearn who works at Google's Earth/Maps engineering department.
I guess had not much choice other than to comply. Google is not evil, but they have more lawyers.
And I get a free T shirt in return.

back to top / index

A warning regarding the Beta status:

The BETA status means this project may not yet run perfectly or properly under all possible
circumstances and environments and it has yet to be tested on many different hardware and
software installations. Please do not run this program if you are not quite computer savvy and
if you haven't backed up your work and documents recently. This program installs itself quite
deeply into the system (requiring a kernel mode driver) to perform its magic. At the current
state of development, stability can not be fully guaranteed.

back to top / index

Introduction

Welcome to a new beta release of The Tile Proxy Project, as first mentioned and discussed
on the avsim.com forums in some of the most viewed threads. Most of software is released
under GNU General Public License version 2 with one notable exception (see the License
section for details).

This may be the most important software release for VFR enthusiasts for FSX and FS2004
this year. Some people call it their favorite FSX add-on. This program is a real-time interface
between Flight Simulator X and the Internet. It will download photo-terrain textures from online
map services by acting as a proxy server and file format converter. This tool turns your
Flight Simulator into an interactive 3D map browser unlike anything you have experienced
before. It may be somewhat similar to the Google Flight Simulator which has recently been
added as a kind of "Easter Egg" to the Google Earth client application.

The leading online map services use JavaScript based browser APIs to display the terrain
in your browser in a top-down view. Some even offer a 3D browser either as ActiveX control or
as a standalone application. They may even offer a "flight mode", but without offering any
realism or flight dynamics. TileProxy goes a step - a significant step - further and accesses
the online terrain data from with Flight Simulator X as you fly. Your VFR flying experience will
never get any better than this. Flight realism coupled with superb terrain graphics, what more
would you ask for?

This tool is therefore aimed at "bush flyers" and VFR enthusiasts who like to explore and
enjoy scenic areas from the air. You might be shocked by the amount of detail that you will
get.  Enjoy this software!

back to top / index

Technical Features and Limitations

Dynamically loaded terrain textures are supported with up to 1 foot (30cm) / pixel which is
equivalent to 4096x4096 pixels textures on squares of about one kilometer side length. This
looks very realistic and crisp flying as low as 2000 feet (650m). See the System
Recommendations section to see if this is supported by your graphics card. A fast Internet
connection is required. Flight Simulator 2004 is limited to 4.75 meters/pixel by design.

Seasons are not currently supported as most map services preferably acquire their imagery
mostly randomly during either spring, summer or autumn. Some areas may even have been
captured during winter time. There is no choice as of the season provided in a given area and
there may be hard boundaries between different areas (respectively seasons).

Similarly, night textures are not supported. FSX simply fades the daylight textures into dark
and there will be no city lights yet (such would have to be defined through light maps).

The online service may use a patchwork of different satellite passes and sometimes even
entirely different technology (aerial photography vs. satellite images). So there may be clearly
discernible colour, contrast and quality differences between different ground areas, particularly
when viewed from a high altitude.

Ground shadows will remain fixed in position (as photographed during a specific time and date
of the satellite pass) and may conflict with the position of the sun in the Flight Simulator.
Shadows in different areas may point into different directions depending on the time at which
the area has been photographed.

Sometimes there may be clouds sitting on the ground, with a huge shadow sitting next to it.
This is an artefact of the cloud removal algorithm (if they have actually used one). Sometimes
they will simply try to find shots with as little clouds as possible and just stitch them together -
sometimes leaving a few lone clouds in the photos.

Built-in runways of FSX may not always overlay exactly with those on the satellite terrain. In
some cases the shape, orientation or position may be off by quite a bit. Often the concrete
taxiways and airport areas will overlay large areas of the beautiful photo scenery - too bad!

Autogen and landmarks do not always blend in well with Photoscenery. The 3D buildings of
FSX may be next to the real thing, but you can always reduce your Autogen and scenery
complexity setting to a minimum to get rid of the problem.

Sometimes terrain loading cannot keep up with faster aircraft. Putting FSX into PAUSE mode
for a minute will help. Also circling over a particular spot for a while will help until the terrain is
fully loaded.

back to top / index

Supported Online Map Services

This tool is agnostic and universal regarding the source of phototerrain tiles. Any online map
service should work which provides HTTP access to 256x256 pixel JPEG orthophoto terrain
tiles in a mercator projection with a quadtree based coordinate system. And the resolution
layers should zoom in magnification steps that are exact powers of two.

Did you not understand what that meant or are you missing any familiar brand names here?
Well, be assured that some well known online map services are supported. However I am not
pre-configuring my program to access any particular service because of...

As of this release, Google Maps servers are no longer supported at the request of Google Inc.

back to top / index

The Legal Aspects

Please note that it is up to the user (YOU) to review the terms of service of the web service
you are trying to access and to see if your usage of this software is prohibited under the ToS
of your preferred satellite mapping service. Please obey the Terms of Service and don't blame
me if YOU should get heat for violating specific clauses of the ToS.

Note that YOU are using the software and YOU are responsible for your actions (i.e.
accessing a third party service by means of this software). YOU have to make sure that you
are not causing any service degradation or interruption or any other harm to the service you
are trying to access (skilled persons may inspect the source code for verification thereof
and/or inspection).

FSX by itself already contains web browsing capabilities (e.g. the kneeboard and the opening
screens welcome page all display HTML pages and can access the Internet). The TileProxy
project extends this capability to dynamically load and display scenery content during flight -
the content is projected onto a 3D surface with a moving view point!

Some online map services prohibit the use of "robots" in their terms of service to access their
content. The TileProxy project is NOT A ROBOT. In conjunction with FSX, the project
becomes an interactive 3D map browser using an aircraft as cursor. It requires user
interaction to access content and the user's position in the 3D world determines which content
gets loaded. Therefore it is not a robot and this particular Terms of Service clause does not
apply.

TileProxy keeps a temporary cache of data in RAM and on disk but so do most web browsers.
Therefore the use of this program with FSX should not constitute a copyright infringement.
Browser caches should be covered by the fair use doctrine. However do not access the files
inside the cache folder for any other purpose and with any other software.

The TileProxy project does NOT SHIP PRE-CONFIGURED to access any commercial map
service in particular as to stay clear of any liability issues and possible infringements of trade
marks.

When you make and post screenshots online, please remember that the ToS may require you
to properly attribute the copyrights of the source data to the respective online map service.
Your screenshot is a derivative work of some other copyrighted work - so please keep in mind
to post a correct attribution according to the ToS.

back to top / index

Installation Choices

The default location for Tileproxy to install itself is inside the Microsoft Flight Simulator X
folder. The default location for Tileproxy scenery is one level above that, in the Microsoft
Games folder. The reason is that the Tileproxy scenery can grow so excessive that Flight
Simulator's startup times get very long if the data is kept inside its the FSX folder. If the data is
kept elsewhere no such effect is observed.

I do recommend that you place your "World Folder" and the Service caches on a separate
drive or partition. The reason is that within a short period of time tens of thousands of files
will be created on the partition and they continuously grow in size (starting out small initially
and growing). This is causing lots of fragmentation - and fragmentation has an adverse affect
on the performance of the partition. So after continued use Tileproxy may have fragmented
your partition so much that other applications suffer a performance penalty. By keeping all
Tileproxy data separate, fragmentation will not affect any other applications or your system
in general. And besides the data is easier to clean up when kept separately.

You can elect to update a previous Tileproxy installation, the previous INI file will be kept
mostly untouched. However please review the proxyUser.NEW.INI file in the Tileproxy folder
for any additional options (e.g. water masking) which you want to manually enable in your
existing INI file.

You can also tell the Installer to modify the scenery.cfg file of an existing FS2004 installation.
When a FS2004 installation is detected, this option is enabled by default.

You may elect to optimize terrain loading for high airspeeds, which makes some unusual
configuration settings. These bring down the frame rates but increase the number of tiles
accessed per second. It's a trade-off that some may want to try.

If you install the Beta 8 over a previous Tileproxy release, please verify that that in
the FSX scenery library the entry for the "WORLD_LOD8" scenery is situated just
below the other Tileproxy folders (higher Priority). Only then you will experience the
accelerating effect that this static photoscenery exerts on Tileproxy.

That is all there is to say about the installer.

back to top / index

How to (and how not to) use this software

IMPORTANT: You may have to your virus scanner before running this software! Some
virus scanners have a known incompatibility with TileProxy. In the best case, loading is only
slowed down, in the worst case loading totally stalls while using a virus scanner.

You should not install TileProxy and its scenery folders on a FAT32 partition. The
restrictions that FAT32 imposes on maximum number of files per directory do not allow
Tileproxy to work as intended. At one point it may simply stop writing new tiles to disk!

You should never rename the "Tileproxy Photoreal World" folder. The location of that
folder can be anywhere, but it has to keep that name. The driver is recognizing only that name.
wo people I know tried to rename the folder. Well, Tileproxy did not work for them afterwards.

This program cannot be used without having been properly configured first. See the
Configuration section of this manual and get some assistance.

The Acme Globe Service is a fictional example and not expected to work. There is no
web site called acmeglobe.com. Configure Tileproxy if you see it accessing this site.

Note that UAC (User Account Control) on Windows Vista should be disabled. You must
have administrative privileges to run this software.

On Vista 64 bit you must enable loading of unsigned drivers in the Boot Menu (hit F8
early during boot to do that).

Run the start menu item under "TileProxy"' in your start menu named "Start Tileproxy". A shell
terminal will pop up and output some debug information.

After you start Flight Simulator (shortly before the simulator's menu dialog appears), TileProxy
should state that it has successfully connected to the simulator (either FSX or FS 2004).
When you load a flight, Tileproxy will continuously show how many tiles have been accessed
so far. In case of an error accessing the tiles through the HTTP protocol, the libcurl result
code and the HTTP status response may be printed. E.g. a 404 error means "file not found"
on the server. It is advised to first attempt the first loading of scenery in Windowed Mode of
the Flight Simulator to verify that the URLs the TileProxy is trying to load can be accessed
successfully.

When you see a message "Press any key to continue" something with TileProxy has gone
wrong and the program has exited. This message prevents the shell terminal from closing
immediately and it gives you a chance to review the last words from the program. It is also
possible (but not very frequently) that you get a dialog box that either FSX.exe or
proxyUser.exe have terminated unexpectedly. After all, this software is still a beta version.

This program works best with slow flying aircraft such as helicopters, non-motorized and
motorized gliders and slow flying fixed wing aircraft. Do not exceed much a speed 100 knots
for best flying (loading) experience. Try to stay in those areas that are known to have decent
satellite terrain coverage on your preferred map service. Loading times can be 5 minutes in
areas that you have not yet flown in before (assuming a 2 MBit/s DSL line). This depends on
your ISP's connectivity and other factors.

If you face excessive loading times, please check if the TileProxy is able to access the terrain
tiles properly. Have a look at the shell terminal and inspect the program's output. During
normal operation it will print a list of URLs and quickly start counting down a number (e.g. 25
and finally print (0) - Done.  Rinse and repeat. Thousands of tiles will initially be accessed in
that way before the flight commences.

The second time you start from the same location no internet access will occur as they are
already cached. Once you start moving your aircraft, new tiles may be loaded depending on
where you go and whether you have previously been to that location.

You might want to compare the quality that you get from the different map services - either
online in your web browser before flight - or from within FSX (save your flight, exit TileProxy,
switch the service in the INI file, cleanup the "TileProxy Photoreal World" folder with
the corresponding "Cleanup World Folder" menu item, restart TileProxy and reload the flight).
Sometimes one service is better than the other, depending on location. Consider installing the
high resolution terrain meshes from simviation.com or commercial high resolution meshes for
best effect.

You can manually terminate Tileproxy by pressing CTRL-C in the terminal or by closing the
terminal (pressing the 'X' close button also works)

back to top / index

The Moving Map

The moving map is probably of little use to anyone else but the developer, so I made it
optional. It is a circular semi-transparent overlay showing the boundaries of the Level of Detail
Rings and a top-down map view. In the default configuration, the circle spans about 120km (or
80 miles). The map rotates with the plane's orentation. You can observe the loading and pre-
loading of Tileproxy on this map.

If the map is not round on your screen, you have an aspect ratio problem. Try adjusting
the movingmap_width and movingmap_height arguments in the INI file to match the inverse
of your screen's  aspect ratio. Say you have a 16:10 monitor, you want something like
movingmap_width = 50 and movingmap_height = 80.

The long term intention is to turn this map into something more useful in the future, e.g. by
making the LOD rings display optional and possibly showing airport names overlaid on it.
Also we could show a compass rose around it (N - E - S - W).

Future versions may also show certain status messages, in particular network related error
messages overlaid on screen, taking the place of the DOS console which will go away in
future releases.

If you don't like it you can just turn it off in the INI file (enable_movingmap = No).

back to top / index

Using the graphical service cache browser

With beta 6, a new tool has been added to the distribution. The service cache browser can be
started by selecting "Manage Service Caches" from the Tileproxy start menu. For this
application to function the .NET Framework 2.0 must be installed. This is a separate download
that you can obtain free of charge from Microsoft. Chances are good that this is already on
your system, however.

This tool allows you to browse (on a world map) where you have been flying before. Areas that
have cached terrain data for the selected service will be shown in shades of grey. The brighter
the color, the higher the downloaded terrain resolution is at that location.

After switching the service to display, please allow for some seconds (maybe minutes) to scan
your entire cache folder. This folder may have grown huge and contain tens of thousands of
files.

You may select rectangular regions of the map and zoom into that region to get a more
detailed view. When you select a rectangle, the number of contained tiles and their size is
shown.

You can selectively mark geographic regions and you can limit the selection to tiles that have
a specific resolution level or a specific age range in days.

By clicking on "Erase Tiles" the selected tiles are wiped from your cache. You can do this to
selectively get rid of data that you do not want to keep.

back to top / index

About the Author

The author is Christian Buchner, a 34 year old software engineer from Germany.
Christian's professional focus is protocol and simulation development for 3G and 4G mobile
radio emulation prototypes. He holds a degree in Electrical Engineering from Technical
University of Munich (TUM).

He also likes to speak in third person about himself. Contact him under this E-Mail address

Christian.Buchner@gmail.com

All work on this project was done in spare time, sometimes burning the midnight oil.

back to top / index

Motivation and Development History

This project was developed based on a "can do" spirit, recognizing that it did not seem an
exceptionally difficult task to bring together exciting technologies - the Internet and Flight
Simulation.

It all started out as an experiment with the Samba project in October 2006 - notably modifying
Samba such that it would provide terrain tiles on a network share. A month later I had my first
stunning views of Oahu, Hawaii - months before the first commercial Microsoft Flight
Simulator X add-on provided the same level of quality.

Disappointed by the limited performance that the Samba based approach provided, I moved
on to develop a native Windows based solution which about tripled loading speeds. Some
research into file formats, Windows kernel mode programming and Flight Simulator
development was required - but obviously when the expected outcome justifies the expense,
anything appears doable (except maybe achieving full Vista compatibility - a real bummer!).

Six months later this project saw its first release as open source with one notable exception:
The kernel mode filesystem filter driver remains closed source. This driver can be shipped
with derivative work (if published under GPL license) but it remains the "secret sauce" of this
program and keeping it closed will prevent commercial vendors from simply copying and
commercializing the entire approach (unless they develop their own similar filter driver on their
own).

It is expected that the program will gain more features beyond the basic functionality and
improve in its friendlyness. However it might be advisable to keep this project "under the
radar" of the big players as long as possible and particularly keep any brand and server
names out of the source code and binary distributions in the foreseeable future.

My main motivation for an early release (despite the program right now is in an unpolished
state) is that I want flightsimmers to experience what I have seen. In recent months I have
witnessed the most insane graphics on my PC at a level of detail that I would not have
anticipated a few years ago. With this release I want to share the pleasure with avid flight
simulator enthusiasts worldwide.

back to top / index

License and Support

proxyUser and the network access module libnettile are released under the terms of the GNU
Public License V2 (full text of license included in the distribution and in the installer).

The kernel mode driver tileproxy.sys remains closed source. Permission to redistribute is
granted as part of the original TileProxy project and for derivative works under the GPL
license. Reverse engineering and commercial use of tileproxy.sys is prohibited unless this
software is also distributed under the terms of the GPL license.

libcurl is a library under LGPL license. Source code has been slightly modified to support non
standard calling conventions and has been included in the distribution.

This software is released free of charge. Any support services are strictly voluntary. Support
may not be provided at all times. Reasonably detailed bug reports are always welcome, as are
as kindly worded requests for specific features. Please try to use online forums and other
sources for troubleshooting and all discussions about proper configuration.

A dedicated English Language support forum has been established on www.avsim.com in the
noncommercial support area.

back to top / index

Technology used in this Software

This program uses advanced technology similar to virus scanners. It monitors the file
accesses done by the Flight Simulator. It intercepts file system calls to terrain tiles and
provides this data from the Internet. This is achieved by installing a kernel mode file system
filter driver "tileproxy.sys" which monitors access on the partition on which Flight Simulator
is installed and provides a RAM disk-like functionality for several thousands of BMP files.

The program therefore requires administrative access to install and load properly and it is
therefore required to disable the User Account Control (UAC) in Windows Vista.

The program automatically crops, scales and concatenates the JPG terrain tiles obtained from
the Internet and performs a format conversion to compressed bitmap files of up to 4096x4096
pixels which Flight Simulator X will load. Global water masks are loaded from a highly
compressed storage format (JBIG files) and applied to the tiles as blended and dithered 4 bit
DXT3 alpha masks or as single bit DXT1 alpha mask. Further image processing can be used
to soften the edges of the low resolution NASA SRTM water masks and to match them to the
photo terrain.

The program loads tiles based on their distance (longitude, latitude and altitude over ground
from the aircraft. This keeps network usage as low as needed and also keeps load times
acceptable. For getting the aircraft position, the program makes use of SimConnect which
automatically gets installed as part of FSX. Generally a doubling of the distance from the
aircraft leads to half the tile size downloaded (and thus a quarter of the pixel count).

With a particularly advanced image processing algorithm, the software can optionally post
colorize the black & white USGS aerial survey data that is used by some major map service in
rural parts of the United States. For example the Grand Canyon would otherwise appear in
black&white. The TileProxy can use a lower resolution colour version (zoomed out version) to
artificially colorize the high resolution B&W photographs. It corrects for small positional
differences of colour and luminance layers with an autocorrelation algorithm so the colour of
an object does not appear next to the object. This still may not look entirely natural but it's
definitely preferable over a dull gray "lunar" landscape. The program also adjusts the
brightness level of the black and white tiles to match those of the coloured low resolution tiles.
If you want to check out what this algorithm does, fly Aspen, Colorado with and without the
"color_hack" option on the online service which uses USGS terrain tiles. Unfortunately there
may be some side effects where this algorithm also alters coloured tiles (see the
Troubleshooting section)

As an additional feature, NASA-provided water masks can be overlaid on the photo layer to
provide transitions to flight simulator's reflective water. This also allows you to use float planes
again where previous Tileproxy versions would turn water surfaces into solid terrain.
In the transition zone between land and water, a blending algorithm can be used to make the
water appear to be transparent. This can look very good in clear, shallow water for example
around tropical islands.

The kernel mode driver has become a RAM-disk which will be fed entire LOD tiles by the
proxyUser application. (A single LOD 10 tile, for example consists of up to 1024 individual
BMP files). The ProxyUser program now tries to intelligently manage the level of detail rings
around your aircraft and keep these populated with up-to-date graphics data. Overall, this
consumes around 100–200MB of kernel memory, but it is well worth the performance benefits.

Tileproxy will also try to pre-load terrain that your aircraft will soon by flying over. This means
that FSX will no longer have to wait for terrain to become available when your aircraft gets
there. Overall this results in terrain to stay crisper at higher air speeds. “The blurries” should
now be a thing of the past in most situations. Currently for this speed-up technology to work
you should have installed the SP1 or SP2 version of FSX.

back to top / index

Acknowledgements

This software is based in part on the work of the Independent JPEG Group.

I hereby like to thank id software for putting a fast DXT1 texture compression subroutine into
the Public Domain.

Thanks go to Microsoft for contacting me about this, although unfortunately there was no
follow-up for a possible presentation of my work at ACES yet.

Thanks go to user JPMiami from the avsim forums for inviting me to the annual FSS-Show in
Italy in May 2007

Some more thanks go to all the supporters on the forums. The release of this software is for
you, folks.

A lot of thanks go to the producers of quality freeware and commercial add-ons for FSX.
Without your excellent work, simming would only be half the excitement that it is.

back to top / index

Recommended System Specifications

To use this software with good performance, your system should meet or exceed these
recommended system requirements.

Microsoft Flight Simulator 2004 or Flight Simulator X (perferrably SP1 or later)

A 2 Mbit/s Internet connection or faster.

A modern PC, ideally with Hyperthreading (P4) or Dual Core CPU (Core Duo, Core 2
Duo, Athlon 64 X2 or any dual processor machine).

Windows Vista (with UAC disabled) or Windows XP. 64 bit mode on Vista is now
supported (but very experimental) and this requires unsigned driver support (press F8
on boot, select appropriate option in the menu)

A 128 MB (or better) graphics card with T&L support.

5 Gigabytes of extra hard disk space on the FSX or FS 2004 partition

1 GB of RAM installed.

Your system swap file should hold 1 GB or more because the project caches a lot of
data in RAM which may require some swap space on disk.

A large (e.g. 24 inch) display running in HD resolution greatly enhances your flying
experience but it is not a requirement (well for me personally it is!)

back to top / index

Installation Guidelines and Notes

I would recommend to have Flight Simulator X or FS 9 installed separately an extra partition
which is often defragmented (O&O defrag does a good job).

The partition should have at least 5GB of extra space and be checked periodically for enough
remaining space. It should be an NTFS format partition, and definitely NOT FAT32.

The TileProxy should be installed in the Flight Simulator X program folder (which is the default
folder proposed by the TileProxy installer). If Flight Simulator X is not found, the installer
suggests the hardcoded location C:\Program Files\Microsoft Games\Flight Simulator 9
instead. It is assumed you want to install the software for Flight Simulator 9 if you do not have
FSX installed. You may need to adjust the installation path to the ACTUAL location where your
Flight Simulator 2004 is installed.

Using Tileproxy with both FSX and FS9 is possible, granted that both are on the same
partition (e.g C:\Program Files\Microsoft Games). Both simulators will then be accessing the
same Tileproxy Photoreal World folder. It is enough to have TileProxy installed in one location
only. Just make sure that the scenery.cfg for both simulator contain the World entries created
by TileProxy.

The installation path must not contain non-ISO characters that cannot be encoded with 8
bits (typically Windows Codepage 1252). If your Program Files or Microsoft Flight Simulator
folder contains unicode characters (like Kanji or Chinese characters), please install the
TileProxy project in a folder consisting of only ASCII characters.

The following two directories will be created during a TileProxy installation on an English
locale (Windows Vista always uses English locale for system folders)

C:\Program Files\Microsoft Games\TileProxy Photoreal World

C:\Program Files\Microsoft Games\Microsoft Flight Simulator X\TileProxy
or
C:\Program Files\Microsoft Games\Flight Simulator 9\TileProxy

The "TileProxy Photoreal World" folder contains the global photoscenery definition whereas
TileProxy contains the program itself and its configuration file. The downloaded terrain tiles
will be stored in the "TileProxy Photoreal World" folder whereas the caches of the network
access module reside inside the TileProxy folder.

back to top / index

Changes to your FSX.cfg

For a good flying experience and graphics quality "out of the box", the program's installer
manipulates the following parameters in your FSX.cfg. You can easily change some of these
with the FSX user interface, others have to be manually edited in the configuration file if you
are not satisfied with these settings.

If you do not want these changes to be made, uncheck the corresponding checkbox in the
installer that says "Modify Simulator config for performance".

[Display]
TEXTURE_BANDWIDTH_MULT is set to 400

[Main]
Maximized is set to 0
DisablePreload is set to 1
FIBER_FRAME_TIME_FRACTION is set to 0.33 or 1.33   (depending on user choice)

[GRAPHICS]
TEXTURE_MAX_LOAD is set to 1024, 2048 or 4096         (depending on user choice)
TEXTURE_QUALITY is set to 3
IMAGE_QUALITY is set to 0

[TERRAIN]
LOD_RADIUS is set to 2.5, 3.5 or 4.5                              (depending on user choice)
MESH_COMPLEXITY is set to 85
MESH_RESOLUTION is set to 22
TEXTURE_RESOLUTION is set to 25, 26 or 27                 (depending on user choice)
DETAIL_TEXTURE is set to 1

[BufferPools]
PoolSize is set to 5000000

[Display.Device.Your Graphics Card Name.0]
MipBias is set to 6
Anisotropic is set to 1

Note that the MipBias setting may lead to shimmering in the distance, which you can counter
by selecting "Negative LOD Bias = Clamp" in the nVidia Control Panel in the advanced
section. I am not sure if this also affects ATI users.

back to top / index

Changes to your FS9.cfg

The following changes to FS9.cfg are made to provide optimal stacking of the Level of Detail
rings around your aircraft. This is when you have the checkbox set to also install for FS 2004
and the "Modify Simulator config for performance" checkbox is also set

[GRAPHICS]
TERRAIN_TEXTURE_SIZE_EXP is set to 8
TERRAIN_EXTENDED_TEXTURES is set to 1 (enable)
TERRAIN_EXTENDED_RADIUS is set to 4.0
TERRAIN_DEFAULT_RADIUS is set to 3.5

[TERRAIN]
TEXTURE_MAX_LOAD is set to 1024
TEXTURE_QUALITY is set to 3

[DISPLAY]
TEXTURE_BANDWIDTH_MULT is set to 100
TextureMaxLoad is set to 10

back to top / index

Configuration Guidelines
 
The TileProxy folder contains ProxyUser.ini which is the main configuration file for the
TileProxy project. By editing this configuration file you can enable support for different online
map services and switch between your configured services.

I cannot recommend any particular satellite service here and I cannot give you instructions on
how to enable a particular service. Be advised that some have better coverage in certain
areas than other services. So you want to choose the service that covers your preferred flying
area best.

Let me walk you through configuration of a hypothetical service which we call Acme Globe
Service.

Using a search engine you have determined that the service uses a particular URL format like
the following for providing terrain tiles:

http://server0.acmeglobe.com/terraintile?pos=ADCAADACBCA&v=10

You have verified that the service provides 256x256 tiles in JPEG format and uses a quadtree
based coordinate system. There are plenty of web pages and articles online which detail the
layout of the URLs of various services.

A Quadtree means that at the lowest zoom level there are four sectors which cover the entire
world map.

 ---------------------
|          |          |
|          |          |
|    A     |    B     |
|          |          |
|          |          |
-----------------------
|          |          |
|          |          |
|    C     |    D     |
|          |          |
|          |          |
-----------------------

Now pick one quadrant (e.g. A which would cover North America) and subdivide that into four
more quadrants, also labelled ABCD. The quadrant names get appended one by one, forming
a string which becomes part of the HTTP request URL. The coordinate gets longer the further
you want to zoom in. The number of digits or letters in the string indicates the zoom level.

Some services may use different letters (not ABCD) but that is not a problem as these are
configurable! You might have found out also that the service applies load balancing according
to a simple scheme where the quadrant at the highest zoom level (last digit in the URL)
determines the server to connect to. And that quadrant may get mapped to a number between
0 and 3 or any other letters. So for example the 4 sub-quadrants of the top left quadrant of the
world map could be downloaded in a load-balanced way using these four URLs:

http://server0.acmeglobe.com/terraintile?pos=AA&v=10
http://server1.acmeglobe.com/terraintile?pos=AB&v=10
http://server2.acmeglobe.com/terraintile?pos=AC&v=10
http://server3.acmeglobe.com/terraintile?pos=AD&v=10

By the way, the &v=10 argument in the URL is some versioning scheme which keeps track of
the version number of the map. With a lower version number you can access previous
versions of the map. So in our sample we would be asking for version 10. You may want to
find out which particular version is used by the current version of the online map service.
There are tools to monitor the URLs being accessed by the browsers, in the simplest case the
status bar of your browser may show these URLs. Or you install a local web proxy server and
inspect the log files afterwards, etc...

So this information is all we need to define the service. The relevant sections of the
configuration ProxyUser.INI will look for example like this:

[TileProxy]
source=Acme Globe Service

[Acme Globe Service]
cache_folder=cache.acme
network_module=libnettile
module_config="conn=20|rate=2.0|server=http://server*.acmeglobe.com|path=/terraintile?pos=%s&v=%v|quad=ABCD|balance=0123|agent=Mozilla/4.0 (compatible; The TileProxy Project)"
min_level=9
max_level=17
map_version=1
level_mapping=9,10,11,12,13,14,15,16,17
color_hack=No
color_level=0
bulk_extend=25

back to top / index

Parameters in the [Tileproxy] section

"master_enable" is a switch to disable the photrealistic scenery. By setting this to off, Tileproxy
will not let FSX know that the world is made up of photographic scenery. However during flight,
you can enable or disable Tileproxy from the Add-Ons menu (given that the user has
started it before). It may take a while for FSX to pick up the change however because FSX
must re-read the scenery BGLs to pick up the change.

"source" in the [TileProxy] section determines which service will be used. You can give it any
name, its configuration will be searched for in a separate section with the specified name in
square brackets.

"max_lod" is the highest LOD level for tiles that will be loaded generated. 17 means 30cm/pixel.
16 means 60cm/pixel. 15 means 1.1m resolution per pixel with FSX. 14 means 2.3m resolution.
13 means 4.75m resolution per pixel. This parameter has recently been moved into the
[TileProxy] section and adjusted to match the LOD definition that you typically find for terrain
meshes and elsewhere in documentation. If you use Flight Simulator 9, max_lod will automatically
drop to 13, meaning only 256x256 pixel tiles will be generated.

"preload_min_lod" and "preload_max_lod" specify the minimum and maximum LOD rings that
Tileproxy should preload before the flight simulator actually requests the tiles. This is done to
have the tiles available without delay, as soon as the simulator needs them. The valid range is
between 8 and 17. If the max is set smaller than the min, preloading will actually be turned off.

"water_mask" is the main switch to turn on the new water masking feature of Tileproxy. When
left to "off", Tileproxy will show even water areas as photorealistic, causing the water to appear
much like land. It is solid. You could land on it with a Boeing 747 and not sink. When
turned "on", Tileproxy will use the NASA SRTM generated water masks to determine where to
show Flight Simulator's built-in reflective water and where to display phototerrain.

"water_blending" is a mode in which soft land/water transitions are created and blended with
a smooth alpha channel. This hides the low resolution of the NASA SRTM data and it creates
an interesting effect near shorelines where the water may appear transparent such that you
can notice under-water terrain features in clear water. When turned off, no soft blending is
performed, but rather a hard transition between land and water occurs. Note that "off" is the
required setting for Flight Simulator 2004 (FS9).

"blend_distance" is the distance in meters that water blending should operate on. 500 meters
is the default. For best effects near atolls and coral reefs, you can choose much larger values.

"water_smoothing" is a mode in which additional image processing is performed to detect
the land/water transitions in the image content. Then the very low resolution NASA water mask
is adjusted to better fit the image content. As a result the water should have a snug fit to the
shore lines. This works best with "water_blending" turned "Off".

"water_threshold" is the decision threshold for detecting land or water that is used only when
smoothing is enabled. Allowed values are between 0 (all land) and 1 (all water). Reasonable
settings are within 0.10 and 0.50. Anything much higher can lead to extreme flooding.

"cache_bytes_limit" is the number of bytes that can be allocated by cached BMP texture tiles
in memory. Keep this value low enough to prevent swapping to hard drive. If you have a lot of
RAM (e.g. 2 or 4 GB) you can choose very high values. Reasonable values are between 64MB
(64000000) and 1GB (1024000000).

"cache_tiles_limit" is the maximum number of BMP tiles that Tileproxy is supposed to keep
cached in RAM. The scenery in the visible area around your aircraft consists of approximately
20000 - 50000 tiles depending on the selected terrain radius in your FSX display settings.
Reasonable values for tile limits are between 50000 and 250000 tiles.

back to top / index

Parameters in the services sections ( [Acme Globe Service] in our example )

"cache_folder" specifies a directory in which the data will be cached temporarily. This is
obviously service specific so different services should have separate cache folders. Absolute
path names can be used here as well.

"network_module" should always name libnettile which is the only network access module that
currently ships with TileProxy. You can write your own compatible module if you are good at
programming.

"module_config" contains several configuration arguments separated by the Unix Pipe
character | - It is a bit messy to view and edit - but from a programming perspective it was
convenient to have it all in a single string.

After splicing the "module_config" string apart at the separators you will note the following
definitions:

conn=20
rate=2.0
verbose=1
server=http://server*.acmeglobe.com
path=/terraintile?pos=%s&v=10
quad=ABCD
balance=0123
agent=Mozilla/4.0 (compatible; The TileProxy Project)

"conn" gives the maximum number of simultaneous HTTP requests that are processed by the
server. The remainder of connections goes into a "waiting queue" where one request is taken
out as soon as another has finished. This option allows for high bulk_extend values without
running into a server-side connection limit or lockout.

"rate" specifies your connection bandwidth in MBit/s. All initial tests of the software were made
with a 2.0 MBit DSL line. Therefore the ratio of 2.0 to the given value determines the scaling
factors for the timeout value. So for example if you specify a 1.0 here, all timeout values will
be doubled. If you specify a 4.0, all timeouts will have half their original duration.

“verbose” specifies whether the network module should print the URLs that it is going to
access. A setting of 1 prints all URLs, a setting of 0 does not print the URLs (except in case of
transmission errors).

"server" details the protocol and server name. The * (star) gets replaced by the character used
for load balancing. The "path" gets appended to that string to form the URL. The character
sequence %s gets replaced with the quadtree based location string. The "quad" definition
gives the four characters used for the quadtree based location string (here: A,B,C,D). The
"balance" string gives the four characters which are used for load balancing (here: 0,1,2,3)

"agent" is the user-agent string under which the TileProxy will identify itself on the server. If
you want to not disclose your use of TileProxy, you can make your PC for example appear as
using Internet Explorer 7 on Windows Vista (or you can choose a Firefox user-agent string if
you are more an open source person).

agent=Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 1.1.4322)

Don't forget to separate the arguments by Unix Pipe characters and to surround the entire
string with double quotes to form the final "module_config" argument. Watch out that you
do not use word wrapping in your text editors. Line breaks must NOT split the module_config
apart, or Tileproxy will not function.

"min_level" and "max_level" restrict the range of zoom levels in the map service that shall be
accessed. 9 to 19 is required for flying at 30cm/pixel. Usually 9 and 17 is a good range for flying
at 1.1m resolution. 9 to 15 should work  for flying at 4.75m resolution terrain.

"level_mapping" is a new feature that allows you to remap any zoom level of the map tile
service to another level. You can entirely skip certain zoom levels or you can substitute
specific zoom levels for others. This parameter expects a comma separated list of numbers.
The total number of values you have to specify must be equal the total number of allowed
zoom levels (within min_level and max_level). In the following example, level 9 to 11 display
normally, whereas level 12 and 13 are substituted for zoom level 14. Levels 15 to 17 again
display normally:

"map_version" specifies the service's map revision that Tileproxy is going to access. This
is typically a number, sometimes even in version.revision form (e.g. 1.7) which determines
the revision of the map tile to download. Typically the providers bump up their map version
whenever they add new material to the maps.

min_level=9
max_level=17
# this list specifies the substitutions for zoom levels 9 to 17 (9 levels in total)
level_mapping=9,10,11,14,14,14,15,16,17

To understand why zoom level remapping can increase terrain quality around the aircraft
please refer to the following chapter. The feature can also be quite useful if your specific map
service uses a different definition of zoom level. You can use the remapping technique to shift
the level range accordingly (e.g. level_mapping=7,8,9,10,11,12,13,14,15).

"color_hack" enables a post-colorization of black & white terrain tiles with color information
obtained from a lower resolution zoom level. If you know that your preferred map services
uses e.g. USGS aerial survey orthophotos in rural areas of the United States, try setting
"color_hack" to Yes and color_level to 13.

"bulk_extend" is a parameter that tries to extend small (geographic) rectangles of terrain tiles
to larger areas to be downloaded simultaneously. The number specifies the maximum number
of URLs that are to be requested simultaneously. The idea is that it is faster to request many
tiles at once than requesting the tiles individually. A "bulk_extend" value of 100 is a very high
setting resulting in up to 100 simultaneous HTTP requests. 25 for example is a reasonable
value. High "bulk_extend" values will pummel the server with too many simultaneous HTTP
requests, and cause a headache for the server admins, so please keep this value low.

"map_version" is the current map revision that Tileproxy is supposed to download. The %v
argument in the path component of module_config gets replaced by this version specifier.
Usually higher numbers mean newer map revisions with more recent data. Some providers
will return HTTP 404 (NOT FOUND) when asked for a too old or a too high version.

Some services will lock you out or redirect (HTTP 302 REDIRECT) you to some error page if
you access these too often in a short period of time as they suspect abuse of their service. So
if you see 302 errors, reset your DSL modem (get a new IP address) and experiment with
lower "bulk_extend" and "conn" values.

 back to top / index

More about string substitutions in the URLs:

* in the server component gets replaced with the character used for load
balancing, being a character from the "balance" string.

%s in the path component gets replaced with the Quadtree based coordinate
composed of characters in the "quad" string.

%l in the path component gets replaced with the zoom level (typically 1-17)

%z in the path component gets replaced with 18 - zoom level

%x in the path component gets replaced with the longitudinal coordinate where
the numerical range is between 0 and 2^zoom level, covering -180 degrees
to +180 degrees of longitude.

%y in the path component gets replaced with the latitude coordinate where the
numerical range is between -(2^zoom level)/2 and +(2^zoom level)/2 covering the
latitudes -90 degrees to +90 degrees.

%v in the path component gets replaced with the string specified in "map_version".

back to top / index

How to configure Tileproxy to use a HTTP proxy server:

This section only applies to people who have no choice but to use a HTTP proxy server to get
outside web access (for example those in a corporate environment or people on a University
campus).

Edit the start script load.bat from the TileProxy folder inside your Microsoft Flight Simulator X
program folder to include the line

set http_proxy=http://proxyservername:proxyport

right before it loads proxyuser.exe. Of course proxyservername and proxyport have to be
replaced with appropriate values. This is a feature of libcurl which uses an environment
variable to determine a proxy server (if any).

back to top / index

Improving visual quality of specific map services

Some satellite services use different satellite data at different zoom levels. Some select
services may for example offer a high quality data source at zoom levels 14 and above,
whereas zoom level 13 and below may be of a grainy quality with unrealistic coloring.

This may lead to a relatively small area around the plane displaying high quality terrain
followed by a sudden and clearly visible boundary about a mile from the aircraft where
the lower quality images begin. If you want to extend the visible range of high quality terrain
beyond that line there are several options:

1) For FSX SP1: Increase the Level of Detail Radius in the FSX graphics settings to Medium
    or High. This makes FSX increase its radius for specific mipmap levels. This feature only
    works with FSX SP1 because the mipmap level accessed by the flight simulator directly
    determines the zoom level loaded by TileProxy.

2) Use a new feature called "zoom level remapping". You can instruct TileProxy to
    substitute the zoom level 13 for 14. This leads to higher quality images being used
    where previously the low quality level 13 was displayed. However this comes at the
    price of increased data transfers. If you want to have even larger high quality areas, you
    can even remap level 12 to 14.

Just remember that each zoom level carries 4 times the amount if information per ground area
than the previous zoom level. That means that loading higher zoom levels further out lead to
an increased data transfer from the servers. You have to find the right balance between visual
quality and transfer volume in order to allow for sufficient terrain loading and updating speed.

back to top / index

Understanding the Level of Detail (LOD rings) and pre-loading

Frequently Tileproxy will show you some statistics followed by a representation of the Level of
Detail rings that Flight Simulator uses.

First, let’s quickly summarize in a table how tiles at individual Level of Detail resolutions
translate to number of BMP files, their size and numbers of downloaded JPEG tiles. FSX
internally thinks in LOD tiles, whereas Tileproxy used to be mostly concerned with individual
BMP tiles - because that was what actually got loaded from disk. But this is about to change
with Release 7.


LOD tile

BMPs needed for assembly and their resolution in pixels

Tile length
(approx.)

Downloads needed
per BMP tile

Resolution

LOD 17

1/256 BMP tile @ 4096x4096

0.07 km

384 JPEG tiles

30cm/pixel

LOD 16

1/64 BMP tile @ 2048x2048

0.13 km

96 JPEG tiles

60cm/pixel

LOD 15

1/16 BMP tile @ 1024x1024

0.27 km

24 JPEG tiles

1.2m/pixel

LOD 14

¼ BMP tile @ 512x512

0.55 km

6 JPEG tiles

2.4m/pixel

LOD 13

1 BMP tile @ 256x256

1.1 km

1.5 JPEG tiles

4.7m/pixel

LOD 12

4 BMP tiles @ 128x128

2.2 km

0.375 JPEG tiles

9.5m/pixel

LOD 11

16 BMP tiles @ 64x64

4.4 km

0.93 JPEG tiles

19m/pixel

LOD 10

64 BMP tiles @ 32x32

8.8 km

0.024 JPEG tiles

76m/piyel

LOD 9

256 BMP tiles @ 16x16

17.6 km

0.006 JPEG tiles

152m/pixel

LOD 8

1024 BMP tiles @ 8x8

34.2 km

0.0015 JPEG tiles

304m/pixel

Release 7 of Tileproxy has started to "think" in terms of LOD tiles as well and to supply an
entire group of BMP files to the tileproxy.sys driver at once - up to 1024 actually. And at any
given time, the RAM disk driver can remember up to 512 LOD tiles simultaneously.

What you see in the console window is a representation of the LOD rings 8 to 12 and LOD
rings 13-17 below. LOD 8 to 12 are these rings that require multiple BMP files to assemble
one LOD tile. It is these rings that  benefit most most from pre-loading. This is why these
are directly preloaded into the RAM disk. LOD levels 13 to 17 are preloaded only into the
application (proxyUser.EXE) and placed in memory and disk caches.

This is how to interpret the "ASCII art" that gets printed in the DOS box:

A . is a tile that is not currently of interest beause it is outside of the LOD rings.
A * is a tile that has been loaded and is currently stored inside the RAM disk driver
A + is a tile that is in the flight path and will be within the LOD ring soon
A - is a tile that is inside the LOD ring and that is missing

The LOD rings are printed and shown with a north-up orientation. In FS9 (FS 2004)
the rings are actually of different size, depending on the LOD level.

My LOD pre-loading strategy currently works as follows: First I determine which area the
aircraft will be over several seconds in the future, given its current speed and heading (the
exact number of seconds actually depends on the LOD ring and is largest for the lowest
resolution ring) . This area is marked with '+' signs in the output. All these tiles are in flight
direction.

If the next higher LOD ring and all rings below it have no missing tiles inside the LOD radius,
the tiles marked '+' may be preloaded for a given LOD ring. So for example if everything
inside the LOD radius is completed for rings 8-11, then some pre-loading in flight direction
might occur for ring 10.

Pre-loading is automatically performed when the flight simulator appears "idle", meaning that
it has not explicitly requested any particular tile in the last 100 milliseconds. By waiting for an
idle phase, I try to minimize the delays we cause by engaging in a lengthy preload operation.
All preload occurs at the "heartbeat" rate of the driver, which is currently set to four times per
second.

back to top / index

Interpreting the program’s statistics output

During Tileproxy operation, periodic messages are shown which provide some statistics:

The “individual tiles accessed” messages shows you the total number of individual tiles that
have been opened so far. The message is printed several times per second. Multiple
operations and reads to the same tile don’t count as individual accesses. It also shows you
how many individual tiles FSX or FS9 is currently accessing per second.

The higher the “individual tiles per second” value is, the faster the flight simulator is currently
updating its terrain. Try to tweak your FSX or FS9 config so that the value is as high as
possible during flight. In FS9, the value seems to scale linearly with the frame rate, so try
to get your frame rates up as much as possible. In FSX, typically locking your frame rates
(and increasing the FIBER_FRAME_TIME_FRACTION) brings this value up a lot.

Of course downloading terrain from the Internet will bring this number down momentarily, so
try to make your benchmark tests on already cached terrain.

The “preload” feature that gets enabled in in the INI file sends up to 1024 tiles to the file
system filter driver at once. This allows the driver to satisfy requests for tiles without having to
communicate with the TileProxy main program. To evaluate the performance of this new
caching system, I created some statistics that get printed once per every 1000 cache misses.

“Preloaded” is the number of tiles that were sent to the filesystem filter driver without
explicitly being requested.

“Hits” is the number of I/O operations that were satisfied from the preloaded tiles. The higher
this number the better.

“Miss” is the number of I/O operations that the tileproxy.sys driver explicitly requested
from the Tileproxy program. This means no preloaded tile in the cache was able to
satisfy the request and therefore it is a "cache miss". The lower this number is, the better.

“Messages” is the total number of communications between tileproxy.sys and Tileproxy.
It includes some extra chatter because the filter driver is pretty dumb and often forwards
illegitimate requests to Tileproxy (requests from other software, not FS9 or FSX,
requests for other BMP files – not terrain tiles).

back to top / index

How does the static LOD8 photo scenery work?

As you may have noticed, this Tileproxy release has become much "fatter". This is mainly due
to the fact that I now deliver the entire world at a resolution of 500m/pixel. This photo scenery is
shipped as BGL files that unfortunately can only be loaded by FSX. The texture is situation on the
outermost detail scenery ring that is rendered by FSX around the aircraft. Thusly from this ring
FSX will no longer request textures from Tileproxy.

This is advantageous in so far, as the outermost ring used to require the most file I/O. It covered
the largest area - and per unit of area it required the most BMP files to be loaded at a low resolution.
Because this area is now loaded from the BGL, Tileproxy can focus on the rest of the scenery -
which it now can do much faster.

To make this work, the WORLD_LOD8 scenery has to have a higher priority than the other Tileproxy
folders - i.e. in the scenery library it must be situated below the other WORLD_xxxx folders.

You should increase your preload_min_lod setting to 9 in case you make use of this texture (i.e.
when your WORLD_LOD8 folder is active in the scenery library).

Disadvantages of the static LOD8 photo scenery are currently:

It only shows a summer texture throughout the year (August)

Its resolution is a meager 500m/pixel and therefore it appears somewhat blurry.

Its watermask is relatively coarse.

The color of the water may be different than water on tiles created by Tileproxy.

Advantages of the static LOD8 photo scenery are currently:

It accellerates the loading of Tileproxy textures into Flight simulator significantly.

The LOD8 photo scenery is only active while Tileproxy is running. While it is not running, the ring
is rendered transparently and the standard scenery appears.

back to top / index

Some frequent Problems and Solutions

Problem: I see a lot of "unable to resolve host" messages and TileProxy tries connects to a
server called acmeglobe.com.

Solution: The source statement in ProxyUser.INI specifies the "Acme Globe Service", which
is a FICTIONAL map service to illustrate the program's configuration. Please search help
for configuring Tileproxy for actual services somewhere on the Internet. The Example entries
should give a few clues, you just have to figure out some parts yourself.

Problem: Tileproxy tries to connect to a server called loadbalancer.servicename.com and
fails to do so ( either "unable to resolve host" or 404 error ).

Solution: You probably copied a ProxyUser.INI file from some Internet forum or from an E-
Mail and got a line-break inside the module_config statement. As a result, the module_config
string cannot be read and the network access module uses its default setting - which happens
to be loadbalancer.servicename.com.

Make sure the module_config is a single-liner (disable word wrap in your text editor and
remove the line break. Also make sure the module_config string is enclosed in double quotes.

Problem: I see a lot of "redirect", Timeout and "Giving up" messages.

Solution: You ended up being blacklisted by the online service for overuse. You can wait for
about 12 hours or you can try to obtain a new IP address by resetting your DSL modem.
Also it may help to insert a conn=20| or conn=10| in the module_config statement of
said online service to reduce the number of simultaneous connections to their server. This
reduces the chance of getting blacklisted again.

If you are unable to change the IP, during the "blackout phase", you can access a different
service.

Problem: Transfers for high resolution tiles are slow, I am getting a lot of timeout messages
and often the transfers fail.

Solution: Your Internet connection bandwidth seems to be significantly slower than 2 MBit/s.
Insert (or modify) the rate statement in the module_config string for your preferred service to
specify for example rate=0.5 (if you have 500 kbit/s) or rate=1.0 (if you have 1 MBit/s). All
timeout values will then be adjusted.

You can also lower the conn=20 statement in module_config to something like conn=10 or
conn=5 to reduce the number of simultaneous transfers.

Problem: I want to use dialup with Tileproxy, can you tell me how to do that?

Solution: This is crazy. But try this:

module_config="conn=1|rate=0.0288|...."
bulk_extend=0

Try running this overnight or while you are at work. And I suggest you download an add-on
plane that doesn't move. How about flying a tethered balloon?

Problem: I get an Exception=5 eror message, when I start Tileproxy and it has connected
to Flight Simulator X (RTM DVD version). All downloaded tiles appear in a low resolution
and are blurred.

Solution: You have probably downgraded your FSX from SP1 after Tileproxy has been
installed. Reinstall Tileproxy.

I am shipping two binaries of TileProxy, one for the RTM version - another one for the SP1
version of FSX. During installation the matching binary is selected. If you mix the TileProxy
SP1 binary with the RTM version of FSX, there is a version mismatch because of the
SimConnect DLL version used. This can occur when you downgrade your FSX SP1 to the
RTM version by uninstalling the SP1. Then you need to reinstall Tileproxy.

back to top / index

Troubleshooting and Maintenance

If you appear to have problems loading the texture at a given location, try saving your flight
and going into the FSX scenery library dialog. Then don't change anything but just
acknowledge the dialog with OK. FSX will rescan the scenery library and flush its texture
cache. Then try loading your flight again. Alternatively make use of the "Rebuild Scenery"
action of Flight Simulator X, which is available in the Controls section of FSX and does not
have a key or button assignment by default.

If you have strange discoloration effects in some terrain tiles, you may want to consider
turning the "color_hack" option in ProxyUser.INI to "No". The algorithm decides on a per pixel
basis whether colorization is required based on a built-in threshold. Sometimes it decides that
pixels of coloured terrain tiles also require extra colorization and brightness adjustments. Turn
that option to "No", execute the cleanup.bat script in the "TileProxy Photoreal World" folder
and reload the flight.

If your "TileProxy Photoreal World" folder gets too full, consider running the cleanup.bat script
inside. This will erase all BMP tiles, but keeps the scenery definitions (BGL files) intact. The
tiles will be re-created as needed by TileProxy from the cache.

You might want to erase your cache folders for the individual map service from time to time.

If Tileproxy consumes too much memory after an extended flight, consider terminating it
and restarting it.

For best performance, keep defragging the partition you operate TileProxy on as it will
continuously create files and keep changing their file sizes. This can lead to a very fragmented
hard drive after a few days of operation.

back to top / index

Improving Terrain Loading Performance in FSX

Starting with FSX SP1 Microsoft's Flight Simulator X spawns multiple child threads that will
occupy all of the CPU cores multi-core PCs. These additional threads are used to accellerate
scenery and tile loading and processing. The first core always performs the graphics rendering
and each additional core will trigger load requests for terrain tiles. Therefore a quad
core chip may show up to three times the tile loading speed of a single and dual core PC.

However I recently found a really unfortunate bottleneck in this system: The other cores send
their I/O requests back to the first core, where they are responded to by a thread fiber that
performs all non-graphics rendering related tasks. So essentially the other cores may end up
waiting for the first core to return the graphics data. You can nicely see this in Task Manager
when you enable the “Show Kernel Times” option. Most of the time the other cores spend
their time in a busy loop (spinlock?) in the kernel, waiting for the I/O requests in the first fibers
to complete.

To improve performance of that fiber on the first core, lock your frame rates to something like
12 to 15 FPS. Alternatively increase your FIBER_FRAME_TIME_FRACTION to values around
1 and also lock your frame rates.

Despite these shortcomings, Tileproxy can obtain the highest performance on Quad core
chips. That is 1600 tiles per second in the initial loading phase and about 1000 per second
during flight. In contrast my dual core laptop does about 1000 per second in the initial loading
phase and 300-400 tiles per second during flight. These numbers directly translate to terrain
update performance in flight. If your tiles per second numbers are low, don't expect a fast
scenery update when flying fast aircraft – even when ProxyUser seemingly keeps up loading
the LOD rings, FSX still may not be updating the rings fast enough. You really need numbers
that show several hundred of individual accesses per second.

Consider placing the Flight Simulator's "Rebuild Scenery" action to one of your joystick
buttons (or key commands). By default this action has no keyboard or joystick assignment. It
forces the simulator to reload its scenery and as a result, everything should be crisp and clear.
This is a good thing for taking screen shots.

Using the "target frame rate" option in the graphics settings in conjunction with the
FIBER_FRAME_TIME_FRACTION near or above 1.0 in FSX.cfg results in an effective frame
rate that is much lower than targeted. However the Tileproxy process will be loading scenery
really fast. You can observe the "individual tiles per second" reading of proxyUser.exe during
flight in Windowed mode, it will show really high values then. When you check the “optimize
for high airspeed” option in the installer, a 0.66 fiber frame value will be used in the FSX.cfg
file.

back to top / index

Performance Issues with Flight Simulator X Service Pack (SP1, SP2, Acceleration)

For many users, the RTM version of Flight Simulator seems to have better performance in
updating terrain tiles than the SP1 version. Some users get blurred terrain after some minutes
of flying – no matter if they are using default terrain, third party photoscenery addons or
TileProxy. Only some users have problems with this, on other systems FSX behaves just fine.
At this point, no one knows what actually causes the problems.

Do not expect Tileproxy to perform any better than what you get with your SP1 installation
prior to installing TileProxy. If other photoscenery addons don’t work well with SP1 on your
machine, Tileproxy will run into the same problems.

Some people may get lucky and get a good performance with SP1, others don’t.

For some people, deinstallation of SP1 has solved their terrain blurriness. Consider this as a
last resort if all “tweaks” of configuration settings fail.

back to top / index

SP1 deinstallation instructions

1. From the Windows Start menu, run Control Panel and select Add/remove programs.
2. In the list, locate Microsoft Flight Simulator X
3. Tick (check) the Show Updates box at the top of the window.
You should now see SP1 as a separate item.
4. Click Remove, and that should do it.

In Vista, it's listed under "View installed updates" on the left side of the Uninstall a program
page (not “Show Updates”)

Mind that FSX will ask for the DVD 1 of your original FSX box for performing the SP1
deinstallation.

Make sure that you reinstall TileProxy with the "SP1 option" unchecked because the
otherwise you will get an "Exception=5" error and a lot of blurred textures when you try to run
TileProxy with the FSX RTM version.

back to top / index

Performance Considerations with Microsoft Flight Simulator 9

The installer is not currently making any changes to your FS9.cfg file when you install
TileProxy for FS9. This is because I do not yet know a "sweet spot" for FS9 settings and
a lot of people have put significant work into tweaking their configs already - I do not want
to mess up any existing settings.

The following observations seem to hold up:

The higher your frame rate is, the faster FS9 loads terrain tiles during flight. Locking the frame
rate has exactly the opposite effect as you would expect. Tiles will load actually slower with a
locked frame rate. Reduce unnecessary scenery complexity to get your frame rates in the
50's. This result is a much improved scenery loading performance.

All other tweaks and fixes that improve photoscenery performance with FS9 also apply to
TileProxy. The forums contain a lot of tips for improving both visual appearance and
performance with photo scenery.

For best visual effect, install an 38m (LOD10) mesh (e.g. for the Alps), and don't forget to
adjust your TERRAIN_MAX_VERTEX_LEVEL to a setting of 20. This works only with the FS
9.1 patch applied. For select regions of the world even higher resolution meshes (19m and
better) are available. These require a TERRAIN_MAX_VERTEX_LEVEL of 19. You might
want to try this in Grand Canyon, for example.

back to top / index

Image Quality in FSX

To get the best possible image quality in Flight Simulator X, make sure that Anisotropic
Filtering is activated in the Graphics settings. Without that, the terrain appears more blurred in
the distance.

Setting the Level of Detail Radius in the Graphics Settings to "Medium" or "High" generally
results in a crisper texture display - however this comes at a price: Expect your scenery
loading times to double or triple and the scenery update to be slower as you fly around. So this
option is better for screenshots, but maybe not so much for flying. The “Medium” setting could
be a good compromise.

Consider turning on some road traffic when using TileProxy. It’s fun to see toy cars driving on
top of freeways on photographic scenery. There are third party vector addons available that
add more roads for selected areas of the world

Setting Scenery Complexity to Dense or High can be fun in areas where a lot of landmarks
are accurately placed, like in Rome or other cities. If they align well with the ground texture,
they can add a lot of flair to the city scape.

nVidia users should set the "Negative LOD BIAS" setting to CLAMP in the nVidia control
panel settings either globally or just for FSX. In conjunction with the MipBias=6 values this
removes the flickering and generally leads to sharper terrain display.

back to top / index

Uninstalling TileProxy

The tileproxy.sys filter driver can be unloaded from memory by using the start menu - but only
if the Tileproxy program is not currently running. Beware though that there is a certain
chance that this can hang or crash the machine because this is still beta software that may
contain some bugs. Normally there is no need to unload the driver because it is designed to
not interfere with software other than the Flight simulator.

I provide an uninstallation option for the project. This should restore your fsx.cfg and
scenery.cfg to the state before TileProxy was installed. All caches and the "TileProxy
Photoreal World" folder will be deleted. The uninstallation may take some time, in particular if
you have downloaded a lot of graphics data during flight.

back to top / index

Future Work Items

This is a list of things that may be improved in future versions. Please remember that this
depends a lot on the amount of spare time that I have besides a day job.

I tried to sort this list in the priority that I want to work on it.

The program should reside in the task tray and we need to drop the ugly DOS box as
soon as possible. This is definitely the last major release having a console window.

Create a graphical configuration utility and GUI for Tileproxy.

Move the caching and disk storage strategy away from individual BMP files in favor
of caching entire LOD tiles (further speed gains expected).

Ability to quickly turn off the photo terrain coverage to fall back to default scenery from
a user interface. Possibly selectable by geographic area (e.g. for individual continents)

Ability to auto-select different online services by geographic area and based on user
preference. Falling back to default scenery in selected regions.

Improve Moving Map to show airports (4 letter airport codes) or city names, possibly
also a compass.

Show LOD circles and tileproxy performance metrics next to the moving map.

Tap further into FSX by hooking functions like the threading and fiber API or the file
I/O APIs. Maybe the filesystem driver will no longer be needed and the tile I/O
can be accelerated further. Possibly we can even alter the loading behavior of FSX.

Detect forests and create vectorized autogen descriptions for forest areas.

Integrate with OpenStreet Map project for providing vector roads.

We need a way to automatically manage and limit Tileproxy's disk usage in software.

Improving caching strategies and cache purging from disk.

Integration with a user-friendly AutoGen editor.

Online sharing of manually placed Autogen objects on Tileproxy scenery.

Light maps and different seasons could be synthesized artificially using side
information like population density, geographic region, etc...

Flight plans could be taken into account for pre-loading.

Enabling full UNICODE support for all file and path names to please international
users (asia/pacific region, arabic countries etc)

Ability to perform colour correction or blending between differently photographed
areas to make the landscape appear less like a patchwork of different satellite
passes.

I would like to get rid of concrete taxiways in regions with good satellite coverage.
These cover and hide the actual photograph of the airport!

Turn this manual into something more appealing with embedded graphics and screen
shots.

Provide translations in Spanish, Chinese and Klingon

back to top / index

Commercializing this project?

Well, I have thought about it - but the legal implications for a potential software publisher
would be huge. Imagine getting sued big time by Acme Globe Service for selling software that
accesses their servers with unauthorized software... I am sceptical that any of the small
flightsim add-on publishers would want to take that chance.

The only way I see this program shipping with default support for one of the "big players" in
the online map business is when they approached me and suggested a sponsorship of this
software - e.g. placing their logo in the software, sponsoring further development and
exclusively tying it to their service while actively promoting this FSX add-on as a new feature
of the service. It could even mean optimizing the server infrastructure to provide data in a
more convenient format for FSX (saving lots of resolution and format conversion steps in
between and reducing the network load). And if it means popup ads in the cockpits or a co-
pilot enthusiastically recommending his new aftershave in the cockpit, so be it. After all it's a
free download.

I could also imagine that flight simmers would be willing to pay a monthly fee for accessing a
high quality commercial satellite service with possible extra features like import of 3D
buildings, terrain meshes and more metadata from the service. But that's not up to me to
decide. It would certainly be worthwhile to have the service's 3D buildings available in FSX.

I like programming, but not so much making business plans. I implement what can be done
technically, while trying to stay out of legal troubles. So I am putting this project out there in its
current state to see what's happening. Maybe someone will approach me, may be not. If you
think you have a serious business proposal, let me know. If it sounds interesting, I am willing
to travel and listen. I have already released parts of this projects under the GPL (meaning the
exclusivity is a bit lost), but this does not preclude me from maintaining closed source
branches and continue development in any direction I wish (due to me being the author and
having the copyrights).

back to top / index

Working for Microsoft?

This would have been fun, for sure. But being age 34, I'm getting too old for this. ;-) Besides,
the US dollar just crashed hard. So you go first and tell me how much sun you get in Seattle.
Boy, I did enjoy living in San Diego though.

back to top / index

Recommended Third Party Add-ons:

High resolution terrain meshes from third parties may improve your VFR flying experience
greatly in particularly in mountainous terrain. Without a good mesh, everything appears flat.
Default mesh coverage in FSX is only good in Northern America and in parts of Europe.

For free terrain meshes, look at www.simviation.com - they do have occasional "terrain
spikes" (artefacts) in them but are otherwise fine and have a high resolutions. The FSX
default airports may sometimes appear on "plateaus" on these meshes the mesh has a
different altitude at that spot. Be warned ;-) The download URL is: 

http://www.simviation.com/fsx_terrainmesh.htm

The entire Alpes are available at LOD 11 from this site (FSX and FS 2004)

http://c30s.alpes.gratisim.fr/

Commercial worldwide mesh products are (some may also contain new landclass and texture
and a FS 2004 compatible version, check the reviews for each product's feature set and
quality)

PILOTs - FS Global 2008

FSGenesis - World Terrain Mesh for FSX

FSQuality - A Better World

For a mesh of the Canary Islands, try to download CanarySim V2.0 (available in 2008?). If
you make the TileProxy World folders have higher priority than the CanarySim scenery
folders, you can use TileProxy texture on top of their excellent meshes and you keep the
airport and custom autogen they provide!

A software company called Apollo Software offer a product called FS AirMap, a moving map
gauge (or panel) for FSX that can display either ICAO or topographic maps inside FSX. This
is very helpful as a navigation aid, especially if you can read ICAO maps. The only problem is
that it isn't using vector maps, and hence the text rotates with the map if you don't always use
the "north up" map display.

A product called FS Altitude offers photo scenery at up to 14m/pixel that covers the outermost
LOD rings. This is currently available for Central Europe and soon for the USA. It complements
Tileproxy nicely, as it replaces the slowly loading outermost LOD levels with pre-rendered
photo scenery. The inner LOD levels will remain FSX default - or can be filled by Tileproxy.

back to top / index

Scouting the area before choosing a flying location

Consider comparing the image quality of your map services on one of the following web sites.
These allow side-by-side comparisons. Zoom in all the way to verify that there is good
coverage where you intend to fly.

www.flashearth.com

http://www.jonasson.org/maps/


back to top / index

Good Locations to fly at

Generally all locations with hilly terrain look amazing. Flat areas look mostly ... well flat. While
the textures may be good quality a flat terrain simply has not much appeal even with a high
resolution phototexture slapped onto it.

One of the major online map services just recently acquired all of Switzerland in high
resolution, so you may want to fly out from Sion or Interlaken. Install a third party terrain mesh
at high resolution for maximum effect. The Eiger Nordwand (a notoriously dangerous climbing
spot) is really steep and the glaciers near Sion look amazing. And global warming really
doesn't have that much effect on phototerrain (unless the service keeps updating their
photos).

The Grand Canyon is also gorgeous. Start at Grand Canyon Natl. Park Airport and head north
and be prepared for a big WOW. The quality of the visuals depends on the service you chose.
Hint: The USGS aerial survey data on one particular service doesn't quite look as good as the
real deal on the other big player. The default terrain mesh of FSX is quite good at that the
Grand Canyon.

The island of Oahu, Hawaii is pretty well covered by satellite imagery. Its geology and beauty
is astounding. You might want to take a flight from Dillingham Field on Oahu and circle around
the island a bit. The views land-inward are incredible.

Some major cities have good aerial photo coverage on the major services. Flying over these
cities can be an exceptional experience, in particular if you have been to the city before and
you can recognize places. Salt Lake City in Utah for example looked very nice to me and
fortunately you could not smell the lake at all in FSX. So does Mountain View, California taking
off from NASA’s Moffett Field (try some barnstorming of the NASA hanger for extra
enjoyment).

Personally I like desert areas and canyons. Having travelled some of these areas in the USA
in allterrain vehicles myself, I also enjoy exploring them from the virtual air. The geology is
amazing and you can start counting individual rocks, gullies and bushes. Generally, all airports
containing the name "canyon" in the western United States (California, Nevada, Utah, Arizona,
Colorado) might be worthwhile exploring. You might also want to research the locations of the
National and State parks in the US and pick airports nearby. It is a humbling experience to
see the almost "the real thing" from the air and to experience the grandeur of this landscape.

Rottnest Island in Australia is an absolute stunner with the new watermasking feature using
the blending mode. No cars allowed on this island, so bring either your bike or your Ultralite.

Keep in touch in the forums and start exchanging superb locations. Share the fun!

back to top / index

KNOWN PROBLEMS in this relase version:

            - No longer contacts any servers in the domain *.google.com

            - The FSX compatible LOD8 scenery ring may have distinctly different water colors
              and more coarse water masks than the tiles served through Tileproxy.

            - With water masks enabled, some LOD tiles will not upload properly to the driver.
              This is a bug resulting in massive slowdowns in some areas. If you get hit by this
              bug disable water masks alltogether.  Fixing this is high on my priority list.

            - The "color hack" option is currently broken. Fixing this is high on my priority list.

            - Vista compatibility still may be problem. The cache manager in the vista kernel
              uses a more aggressive caching of the files. This can lead to unfortunate
              effects, like crisp tiles suddenly blurring again, or tiles sometimes corrupting
              in mid flight.

            - FSX RTM version currently has a problem with this release, as black or water
              tiles appear next to the aircraft. Maybe a future point release (e.g. Beta 7.1)
              will fix it. But I think most users will have switched to SP1 or SP2 already,
              as many addons now require it. So fixing this is not a high priority for me right
              now.

            - Vista users should DISABLE USER ACCOUNT CONTROL to make Tileproxy
              work. Vista 64 bit users also must press F8 during boot and allow unsigned drivers
              from the Windows boot menu.

            - Some stutters may occur on single core CPUs, especially with water mask
              or post colorization enabled. Also the new terrain preloading during flight can
              lead to stutters on these CPUs.

            - Disk space usage is still not monitored or controlled by Tileproxy, so please
              stay on top of things yourself and occasionaly clean up your world folder
              and use the service cache browser to clean up unwanted data.

            - The API hooking technique may cause occasional instability while Tileproxy
              is running. I have seen tasks like Vista's "Desktop Window Manager" fail on
              occasion, as well as about 1 out of 10 times my FSX crashes on me on start.
              I will try hard to improve the stability of this feature in the future.

END OF MANUAL

back to top / index