Create FS2004 photoreal scenery with a copyable Resample INF, coordinate maths, supported formats, BGL installation, seasons and water masks.
To create photoreal scenery in Microsoft Flight Simulator 2004 (FS9), prepare legally usable aerial imagery as a north-up, georeferenced raster, write a valid FS2004 Terrain SDK Resample INF, compile it with Resample, then install the resulting BGL as an active scenery layer. Do not redistribute imagery unless its licence permits it.
Photoreal scenery replaces the visible ground with an aerial or satellite image. It does not create buildings, trees, accurate elevations or animated water; those require separate autogen, object, mesh or water scenery.
Is there a simple et gratuit way to do it?
Yes: the FS2004 compiler itself is free, and a basic project needs only a legal source image, a text INF file and the Terrain SDK’s resample.exe. The imagery is the catch—free access to an online map does not automatically grant permission to copy, modify or distribute its photographs.
Our FS2004 SDK pack containing the official Terrain SDK provides Resample and its reference material. If the different SDK components are unfamiliar, our guide to the FS2004 SDK tools and their purposes explains which compiler handles each type of scenery.
Do not use screenshots containing map labels, watermarks, perspective view or unknown reprojection. Removing a watermark does not create redistribution rights, and an image licensed only for personal viewing may still be unsuitable for a downloadable scenery package.
Which image formats can FS2004 Resample use?
FS2004 Resample works most predictably with an uncompressed 24-bit Windows BMP prepared in WGS84 geographic latitude and longitude.
| Input | FS2004 use | Practical advice |
|---|---|---|
| Windows BMP | Use Type = BMP | This is the safest choice for ordinary RGB aerial imagery. Use an uncompressed 24-bit file rather than an indexed or alpha-channel bitmap. |
| GeoTIFF | Use the GeoTIFF source type documented by the Terrain SDK | The old compiler accepts only supported tags, sample layouts and compression. Convert troublesome modern GeoTIFFs to BMP and supply the coordinates explicitly. |
| Raw or BIL-style raster data | Use Type = Raw with the required sample, byte-order and layout declarations | This is mainly useful for data grids. It is not the straightforward choice for a colour photograph. |
| JPEG, PNG or web-map tiles | Not direct FS2004 imagery inputs | Mosaic, reproject and export them to a supported raster first. JPEG artefacts also make colour-key masking unreliable. |
Prepare the raster as a north-up, unrotated grid in geographic WGS84 coordinates. FS2004 Resample is not a replacement for a modern reprojection tool: remove rotation and skew before compilation, and do not feed it Web Mercator metres while declaring the values as latitude and longitude degrees.
FS2004 INF syntax must also remain separate from later systems. Some FSX examples contain fields such as Channel_BlendMask and Channel_LandWaterMask; these are not the FS2004 masking method. Microsoft Flight Simulator 2020 and 2024 use a different package-building workflow rather than the FS9 Resample INF and BGL process.
How do I make photoreal ground textures in FS2004?
Build one small daytime tile first, prove its coordinates in FS9, and only then add a larger area or alternate textures.
- Select a recognisable test area. Include a runway, road junction, headland or another feature that can expose a coordinate error. Avoid beginning with an entire city or country.
- Crop and prepare the image. Remove borders and labels where the licence permits editing. Correct obvious colour casts, but do not enlarge a low-resolution source in the hope of creating extra ground detail.
- Reproject it. Export a north-up WGS84 latitude/longitude raster with no rotation. Record its outer west, east, north and south bounds and its exact pixel width and height.
- Calculate the INF values. Derive
ulxMap,ulyMap,xDimandyDimfrom those bounds rather than estimating them by eye. - Write an FS2004-format INF. Set the source to
Layer = Imagery, define the daytime variation and give Resample a destination folder, BGL base name and suitable LOD range. - Compile with Resample. Run the compiler from a command prompt and read every warning or error. A returned prompt does not prove that a usable BGL was generated.
- Install and activate the BGL. Put it in a dedicated scenery layer, add that layer to the FS2004 Scenery Library and place it above overlapping photo coverage.
- Verify the whole tile. Check its centre, four edges, sharpness and relationship to known landmarks before making seasonal, night or masked copies.
Copyable minimal FS2004 Resample INF
This minimal INF describes a 1,200-by-800-pixel daytime BMP covering 1.500000°W to 1.440000°W and 52.000000°N to 51.960000°N. Create the source and output directories first, then change the paths and coordinates for your own image.
[Source]
Type = BMP
Layer = Imagery
SourceDir = "C:\FS9Photo\TestTile\source"
SourceFile = "test_day.bmp"
Variation = Day
ulxMap = -1.500000
ulyMap = 52.000000
xDim = 0.000050
yDim = 0.000050
[Destination]
DestDir = "C:\FS9Photo\TestTile\output"
DestBaseFileName = "fs9_test_day"
UseSourceDimensions = 1
LOD = 10,15
| INF field | What it controls |
|---|---|
SourceDir and SourceFile | The prepared source raster. Here it is C:\FS9Photo\TestTile\source\test_day.bmp. |
Layer = Imagery | Tells Resample to compile photographic ground imagery rather than elevation or class data. |
ulxMap | The signed longitude of the upper-left edge. West longitudes are negative and east longitudes are positive. |
ulyMap | The latitude of the upper-left edge. North is positive and south is negative. |
xDim and yDim | The width and height of one source pixel in degrees. FS2004 uses a positive yDim here even though rows progress southwards. |
DestDir | The folder in which Resample writes the BGL. Make sure it exists before compiling. |
DestBaseFileName | The output name without the .bgl extension. |
UseSourceDimensions = 1 | Keeps the compilation tied to the declared source extent. |
LOD = 10,15 | Builds display levels from LOD 10 through LOD 15. LOD 15 is the normal upper detail level for FS2004 photo terrain. |
A common mistake is copying the BMP directly into an FS2004 Texture folder. FS9 will not interpret that file as georeferenced photo terrain; it must be compiled through Resample.
How do I calculate ulxMap, ulyMap, xDim and yDim?
Calculate the values from the raster’s outer geographic bounds and its exact pixel dimensions.
For an image with width W, height H, west bound west, east bound east, north bound north and south bound south:
ulxMap = westulyMap = northxDim = (east - west) / WyDim = (north - south) / H
For the 1,200-by-800 example:
xDim = (-1.440000 - -1.500000) / 1200 = 0.000050yDim = (52.000000 - 51.960000) / 800 = 0.000050
Validate the calculation by reconstructing the opposite edges:
east = ulxMap + (W × xDim) = -1.440000south = ulyMap - (H × yDim) = 51.960000
The latitude subtraction is the north-up check. As image row numbers increase downwards, latitude must decrease. GIS metadata often expresses north-up Y resolution as a negative number; use its positive magnitude for FS2004 yDim. If the image itself is stored south-up or rotated, re-export it rather than trying to compensate with a negative value.
These formulae assume that the reported bounds describe the outside edges of the raster. If the metadata gives the centres of the corner pixels, move the west and north values outwards by half a pixel before assigning ulxMap and ulyMap. Otherwise, the entire tile can acquire a subtle half-pixel displacement.
Keep longitude signs explicit. London-area coordinates west of Greenwich are negative; coordinates east of Greenwich are positive. For a project crossing the 180-degree meridian, split the source rather than treating a large numerical jump as an ordinary east-minus-west span.
Which output LOD should I choose?
Choose the highest LOD that the source can genuinely support rather than automatically requesting maximum detail.
| Approximate source detail | Sensible maximum |
|---|---|
| About 4.8 metres per pixel or finer | LOD 15 |
| About 5–10 metres per pixel | LOD 14 |
| About 10–20 metres per pixel | LOD 13 |
The values are practical approximations because ground distance represented by a longitude degree varies with latitude. Compiling a one-metre image at FS9’s LOD 15 ceiling does not preserve one-metre detail, while compiling a coarse photograph at LOD 15 merely creates resampled pixels and a larger file.
How do I compile and install the BGL?
Resample reads the INF, processes the raster and writes the named BGL into DestDir.
Assuming resample.exe is stored in C:\FS9Photo\Tools, run this exact command:
"C:\FS9Photo\Tools\resample.exe" "C:\FS9Photo\TestTile\test_tile.inf"
With the sample INF, the expected result is:
C:\FS9Photo\TestTile\output\fs9_test_day.bgl
If that file is absent, check the compiler output for an unsupported bitmap, missing directory, misspelt filename or malformed INF field. Paths containing spaces should remain inside quotation marks.
- Close FS2004 before replacing an existing BGL. The simulator may have the old file open.
- Create a dedicated layer. A suitable structure is
FS9\Addon Scenery\MyPhoto\Scenery. - Copy the BGL. Place
fs9_test_day.bglin thatSceneryfolder. The source BMP does not belong there or in the layer’sTexturefolder. - Add the parent folder. In FS2004’s Scenery Library, add
MyPhotoas a scenery area and make sure it is enabled. - Set sensible priority. Put the layer above other packages supplying photo imagery for the same location. Do not assume that moving it to the absolute top will override every airport, shoreline or mesh element; FS9 also applies scenery-type rules.
- Allow FS9 to rebuild its scenery index. Restart the simulator if the new layer does not appear immediately.
Our complete FS2004 scenery-layer installation procedure covers the Scenery Library and standard folder structure in more detail.
What should I check on the first tile?
A first-tile test should establish location, scale, orientation and display quality before any additional coverage is compiled.
- The scenery area is enabled and the BGL is inside its
Scenerysubfolder. - The aircraft is at the tile’s actual coordinates, not merely near a similarly named airport.
- A known feature near the centre appears at the correct latitude and longitude.
- All four edges meet the expected bounds without stretching, mirroring or a constant offset.
- The northern edge of the photograph appears north of the southern edge.
- The tile remains visible at medium altitude because lower LODs were included.
- No black, white or coloured no-data border surrounds the image.
- The source looks as sharp as FS2004’s photo-terrain limit permits at low altitude.
Why is my FS2004 photoreal scenery shifted, stretched or blurry?
Constant shifts usually indicate a bad corner coordinate or datum, while errors that grow across the tile point to incorrect pixel spacing, dimensions or projection.
| Symptom | Likely cause | Fix |
|---|---|---|
| No BGL is produced | Missing output folder, unsupported source format or invalid INF syntax | Create every directory, convert the source to an uncompressed 24-bit BMP and check the compiler messages line by line. |
| The BGL exists but nothing appears | Inactive scenery layer, wrong geographic bounds or incorrect folder level | Confirm the layer is enabled, verify the coordinates and make sure the BGL is directly inside the layer’s Scenery folder. |
| The whole image is shifted equally | Wrong upper-left coordinate, longitude sign, datum or centre-versus-edge convention | Verify signed decimal degrees and check whether the source bounds describe pixel edges or centres. |
| One side aligns but the opposite side does not | Wrong xDim, yDim, width, height or source projection | Recalculate from the original bounds. Do not stretch or move the photograph by eye. |
| The tile is north-south reversed | The raster was south-up, or a negative GIS Y resolution was copied directly into the INF | Export a north-up image and use a positive yDim. |
| The image is sharp in the editor but blurry in FS9 | The source exceeds FS9’s useful resolution, the selected LOD is too low, or simulator filtering is limiting the display | Use an appropriate LOD and review the terrain-texture and filtering advice in our FS2004 visual-quality settings guide. |
| A hard rectangular border appears | No-data pixels were compiled as ordinary imagery | Crop them out or assign an exact unused RGB value through NullValue. |
Default roads, coastlines and airports are not always positioned as accurately as a georeferenced photograph. If several surveyed landmarks align but one default road does not, the vector scenery may be wrong. Moving the entire image to match that road can make the rest of the tile less accurate.
How do seasons, night lighting and water masks work in FS2004?
FS2004 uses separate, identically georeferenced imagery sources and FS9-specific variation directives; Resample does not generate convincing alternate textures automatically.
| Purpose | Representative FS2004 directive | Requirement |
|---|---|---|
| Base daytime imagery | Variation = Day | Use the verified daytime raster as the master footprint. |
| Seasonal imagery | Variation = Spring, Summer, Fall, Winter or HardWinter | Each seasonal source must have matching dimensions, bounds and pixel spacing. Fall is the literal SDK directive despite British prose using “autumn”. |
| Night imagery | Variation = Night | Light only plausible lamps, roads and windows. Merely darkening the day image makes fields, roofs and water glow. |
| Hard transparency cut-out | NullValue = 0,0,0 | Pixels matching that exact RGB value are omitted. Apply it to every relevant source variation. |
For day, night and seasonal variants in one project, use the Terrain SDK’s multi-source pattern: set the main source to Type = MultiSource, declare NumberOfSources, then create numbered sections such as [Source1], [Source2] and [Source3]. Each numbered block repeats Type = BMP, Layer = Imagery, the source path, identical geographic fields and its own Variation. The multi-source imagery sample supplied with the Terrain SDK is the canonical syntax reference.
How does an FS2004 water mask differ from an FSX blend mask?
FS2004 commonly exposes underlying water by colour-keying exact imagery pixels with NullValue, not by using the later FSX channel-mask directives.
Choose an otherwise unused colour, paint the water area exactly that colour in every applicable BMP, and add the matching line to each imagery source. For example:
NullValue = 255,0,255
Any genuine pixel with that exact colour will also disappear. Keep the source lossless, because JPEG compression creates near-matching colours that remain visible as a fringe. This method produces a hard cut-out rather than a feathered alpha transition, and the underlying area must already be water through default or companion water scenery.
Water left in the photograph remains a static ground image without normal FS9 water movement or reflections. Shoreline correction may therefore need separate water or vector scenery.
Does photoreal scenery add autogen or elevation?
No: Resample compiles the photographic ground layer but does not infer trees, buildings or terrain height from the picture.
- Autogen: Photo coverage may suppress default autogen over affected terrain tiles. Add compatible autogen or manually placed objects as a separate part of the project.
- Elevation: The image follows the installed terrain mesh. Hills, cliffs and airport elevation problems require mesh, flatten or airport work rather than edits to the photograph.
- Airport detail: Runways and aprons visible in the photograph are still flat pixels. Functional airport surfaces, lights, signs and buildings require separate airport scenery.
Preserve the verified daytime INF as the coordinate master. Every night, seasonal and masked source should inherit its dimensions and geographic fields unchanged.