Skip to content
FS2004 (FS9) 12 min read 184 views

How do I create photoreal scenery for FS2004?

Adam McEnroe
In short

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.

InputFS2004 usePractical advice
Windows BMPUse Type = BMPThis is the safest choice for ordinary RGB aerial imagery. Use an uncompressed 24-bit file rather than an indexed or alpha-channel bitmap.
GeoTIFFUse the GeoTIFF source type documented by the Terrain SDKThe 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 dataUse Type = Raw with the required sample, byte-order and layout declarationsThis is mainly useful for data grids. It is not the straightforward choice for a colour photograph.
JPEG, PNG or web-map tilesNot direct FS2004 imagery inputsMosaic, 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.

  1. 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.
  2. 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.
  3. 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.
  4. Calculate the INF values. Derive ulxMap, ulyMap, xDim and yDim from those bounds rather than estimating them by eye.
  5. 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.
  6. 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.
  7. 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.
  8. 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 fieldWhat it controls
SourceDir and SourceFileThe prepared source raster. Here it is C:\FS9Photo\TestTile\source\test_day.bmp.
Layer = ImageryTells Resample to compile photographic ground imagery rather than elevation or class data.
ulxMapThe signed longitude of the upper-left edge. West longitudes are negative and east longitudes are positive.
ulyMapThe latitude of the upper-left edge. North is positive and south is negative.
xDim and yDimThe width and height of one source pixel in degrees. FS2004 uses a positive yDim here even though rows progress southwards.
DestDirThe folder in which Resample writes the BGL. Make sure it exists before compiling.
DestBaseFileNameThe output name without the .bgl extension.
UseSourceDimensions = 1Keeps the compilation tied to the declared source extent.
LOD = 10,15Builds 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 = west
  • ulyMap = north
  • xDim = (east - west) / W
  • yDim = (north - south) / H

For the 1,200-by-800 example:

  • xDim = (-1.440000 - -1.500000) / 1200 = 0.000050
  • yDim = (52.000000 - 51.960000) / 800 = 0.000050

Validate the calculation by reconstructing the opposite edges:

  • east = ulxMap + (W × xDim) = -1.440000
  • south = 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 detailSensible maximum
About 4.8 metres per pixel or finerLOD 15
About 5–10 metres per pixelLOD 14
About 10–20 metres per pixelLOD 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.

  1. Close FS2004 before replacing an existing BGL. The simulator may have the old file open.
  2. Create a dedicated layer. A suitable structure is FS9\Addon Scenery\MyPhoto\Scenery.
  3. Copy the BGL. Place fs9_test_day.bgl in that Scenery folder. The source BMP does not belong there or in the layer’s Texture folder.
  4. Add the parent folder. In FS2004’s Scenery Library, add MyPhoto as a scenery area and make sure it is enabled.
  5. 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.
  6. 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 Scenery subfolder.
  • 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.

SymptomLikely causeFix
No BGL is producedMissing output folder, unsupported source format or invalid INF syntaxCreate every directory, convert the source to an uncompressed 24-bit BMP and check the compiler messages line by line.
The BGL exists but nothing appearsInactive scenery layer, wrong geographic bounds or incorrect folder levelConfirm 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 equallyWrong upper-left coordinate, longitude sign, datum or centre-versus-edge conventionVerify signed decimal degrees and check whether the source bounds describe pixel edges or centres.
One side aligns but the opposite side does notWrong xDim, yDim, width, height or source projectionRecalculate from the original bounds. Do not stretch or move the photograph by eye.
The tile is north-south reversedThe raster was south-up, or a negative GIS Y resolution was copied directly into the INFExport a north-up image and use a positive yDim.
The image is sharp in the editor but blurry in FS9The source exceeds FS9’s useful resolution, the selected LOD is too low, or simulator filtering is limiting the displayUse an appropriate LOD and review the terrain-texture and filtering advice in our FS2004 visual-quality settings guide.
A hard rectangular border appearsNo-data pixels were compiled as ordinary imageryCrop 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.

PurposeRepresentative FS2004 directiveRequirement
Base daytime imageryVariation = DayUse the verified daytime raster as the master footprint.
Seasonal imageryVariation = Spring, Summer, Fall, Winter or HardWinterEach seasonal source must have matching dimensions, bounds and pixel spacing. Fall is the literal SDK directive despite British prose using “autumn”.
Night imageryVariation = NightLight only plausible lamps, roads and windows. Merely darkening the day image makes fields, roofs and water glow.
Hard transparency cut-outNullValue = 0,0,0Pixels 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.

AI Assistant New

Still stuck? Ask Fly Away

Ask Fly Away is our AI flight-sim assistant. Ask your exact question and get a direct, step-by-step answer in seconds — free to try.

Ask Fly Away Free preview · unlimited for PRO members