Board index FlightGear Development Scenery

Azores Custom Scenery with Terragear

Questions and discussion about enhancing and populating the FlightGear world.

Azores Custom Scenery with Terragear

Postby AzulProfundo » Tue May 25, 2021 1:56 am

This topic is a split from the "Azorean Groundnets with FGAirports", where a first series of groundnet files for the airports of the archipelago was produced. From this work, it was found the need to correct some position deviations between the groundnet files (supported on OSM and official airport data) and the TerraSync scenery files.

The scenery I intend to generate will have the same generic data on infrastructure and landclass, but with updated airport data supplied by D-ECHO and the now available SRTM-1 mesh data. The vector infrastructure data will be extracted from OSM, so it will be also more current than the scenery now available in TerraSync.

For the moment, and using the procedures described in "Using Terragear" and "TerraGear Documentation" wiki page, I have just generated the mesh. In fact, three versions of it:
  • SRTM-3 with hgtchop used by Terragear GUI (593kb of data)
  • SRTM-3 with gdalchop (1,3Mb of data)
  • SRTM-1 with gdalchop (5,3Mb of data)

The data I am referring is the one obtained after running the Terrafit tool. The last version is the one I will use for the final scenery output. It was obtained from the NASA Earthdata page (a login is required).

Concerning the OSM data, I will use the osm export page and the overpass API to extract the data and further process it in QGIS. Here I share just the layers I will use, obtained with the overpass-turbo page:
Code: Select all
/*
This has been generated by the overpass-turbo wizard.
The original search was:
“highway=primary or highway=secondary or highway=track or water=river or water=stream or natural=coastline or natural=beach or landuse=reservoir or geological=outcrop or geological=volcanic_caldera_rim or geological=volcanic_vent or geological=volcanic_lava_field”
*/
[out:json][timeout:25];
// gather results
(
  // query part for: “highway=primary”
  node["highway"="primary"]({{bbox}});
  way["highway"="primary"]({{bbox}});
  relation["highway"="primary"]({{bbox}});
  // query part for: “highway=secondary”
  node["highway"="secondary"]({{bbox}});
  way["highway"="secondary"]({{bbox}});
  relation["highway"="secondary"]({{bbox}});
  // query part for: “highway=track”
  node["highway"="track"]({{bbox}});
  way["highway"="track"]({{bbox}});
  relation["highway"="track"]({{bbox}});
  // query part for: “water=river”
  node["water"="river"]({{bbox}});
  way["water"="river"]({{bbox}});
  relation["water"="river"]({{bbox}});
  // query part for: “water=stream”
  node["water"="stream"]({{bbox}});
  way["water"="stream"]({{bbox}});
  relation["water"="stream"]({{bbox}});
  // query part for: “natural=coastline”
  node["natural"="coastline"]({{bbox}});
  way["natural"="coastline"]({{bbox}});
  relation["natural"="coastline"]({{bbox}});
  // query part for: “natural=beach”
  node["natural"="beach"]({{bbox}});
  way["natural"="beach"]({{bbox}});
  relation["natural"="beach"]({{bbox}});
  // query part for: “landuse=reservoir”
  node["landuse"="reservoir"]({{bbox}});
  way["landuse"="reservoir"]({{bbox}});
  relation["landuse"="reservoir"]({{bbox}});
  // query part for: “geological=outcrop”
  node["geological"="outcrop"]({{bbox}});
  way["geological"="outcrop"]({{bbox}});
  relation["geological"="outcrop"]({{bbox}});
  // query part for: “geological=volcanic_caldera_rim”
  node["geological"="volcanic_caldera_rim"]({{bbox}});
  way["geological"="volcanic_caldera_rim"]({{bbox}});
  relation["geological"="volcanic_caldera_rim"]({{bbox}});
  // query part for: “geological=volcanic_vent”
  node["geological"="volcanic_vent"]({{bbox}});
  way["geological"="volcanic_vent"]({{bbox}});
  relation["geological"="volcanic_vent"]({{bbox}});
  // query part for: “geological=volcanic_lava_field”
  node["geological"="volcanic_lava_field"]({{bbox}});
  way["geological"="volcanic_lava_field"]({{bbox}});
  relation["geological"="volcanic_lava_field"]({{bbox}});
);
// print results
out body;
>;
out skel qt;


If I manage to get good results from this, then I will report the complete procedure, for a Ubuntu (linux) point of view, in the form of a tutorial. Maybe a series of video screen captures with vokoscreenNG... :)
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Re: Azores Custom Scenery with Terragear

Postby AzulProfundo » Fri May 28, 2021 7:19 pm

I have completed the first version of osm data, using just the export page from openstreetmap with the overpass API to generate the osm file. The overpass-turbo query and the script supplied by D-ECHO were used just to check which where clauses to use, but in QGIS. It took longer, of course, and specially for generating the shapefile with the islets (almost one hour).

The resulting set of files is shown in QGIS, with some simple symbology I added:
Image

For the CORINE 2006 dataset, I avoided to download the complete European Union file (around 3Gb) and used instead the Portuguese Spatial Data Infrastructure (SNIG) to connect to a WFS resource for the Azores region, and from there, exported the polygons to a shapefile. The resulting shapefile has just about 6 Mb... So, now I have still to split the land classes to be considered in the custom scenery to individual shapefiles.

The CORINE 2006 dataset as seen in QGIS, also after applying some symbology:
Image

The situation, as seen at this small scale, is almost perfect. However, if I zoom to a larger scale (below at 1:5.000), the differences between the osm landmass and the CORINE are now perfectly visible. Some doubts arise:
1. should the landclass (CORINE) be cut by the landmass (osm) where is covering the sea?
2. should a ocean polygon be drawn around the islands, or Terragear automatically infer that from the landmass of the islands and islets?
3. a default landclass (osm) will show in the narrow strips where the CORINE does not reach the sea. Is this OK?

Zoom at 1:5000 on the coastline North of Graciosa:
Image

I will move now to the third component of the scenery: the Airport data, to be reviewed in WED. Using the apt files supplied by D-ECHO as a basis. I do not have x-plane installed, so I should pay attention to the problems recently reported in this forum.
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Re: Azores Custom Scenery with Terragear

Postby AzulProfundo » Sat May 29, 2021 10:42 pm

Well, this post looks like a blog with the making of custom scenery for Azores! :)

At this moment I completed the set of tools required to generate the scenery, with the installation of WED. To avoid the problems already identified (and solved, thanks to Iomar) I installed also the free demo of x-plane. Even so, I am not being able to run version 2.3 of WED, so I am using version 1.7.2.

The picture shows LPAZ apt.dat file (contributed by D-ECHO), with no import errors.
Image

The question remains about how to do the alignment of the airport. The idea I have is to add the osm map as an overlay picture, and then to move all the features to the new position. This requires a careful georeferencing of the image, off course.

I have noticed that the apt.dat file has some data not needed for FlightGear, like the airport flow (runway use in FG) and the ramp starts and taxiroutes (groundnet in FG). They can be deleted as far as FG is concerned.
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Re: Azores Custom Scenery with Terragear

Postby BecOzIcan » Sun May 30, 2021 12:14 am

1. Set Runway thresholds (clickable dot in the center at the end of each runway) as per published eAIP values so you can use the runway as absolute certain reference element

2. Menu View / Slippy Map / OpenStreet Map
Current Projects: AI Traffic, Models & Liveries
User avatar
BecOzIcan
 
Posts: 1302
Joined: Tue Oct 04, 2011 11:43 pm
Location: Sydney, NSW, Australia
Version: 2020.4.0
OS: Win10

Re: Azores Custom Scenery with Terragear

Postby AzulProfundo » Sun May 30, 2021 4:27 pm

BecOzIcan wrote in Sun May 30, 2021 12:14 am:1. Set Runway thresholds (clickable dot in the center at the end of each runway) as per published eAIP values so you can use the runway as absolute certain reference element

2. Menu View / Slippy Map / OpenStreet Map


I have used method 1 above on the apt.dat of LPAZ. Not through the "clickable dot", but updating the LatLong pairs 1 and 2 of the runway. In this case, the deviations were quite small, less than one meter. I could confirm in FGAirports that the groundnet is aligned (after the apt.dat update). So, this airport is definitely approved! :D

Regarding method 2, it would came very handy, but I can not find it. I am using version 1.7.2 of WED, because the latest does not work on my notebook (don't know why :( ). I will try other versions in between. Meanwhile, I found that using the coordinates of the frame on the export page of osm, and taking a snapshot of the rectangle, is a good way to get an accurate overlay.

Quick Note: I am using now version 2.1 of WED, and this one already has the Slippy Map choice. So I can apply the full method. :)

Today I plan to run the first ogr-decode commands and start processing the osm layers for the custom scenery... :wink:
Last edited by AzulProfundo on Sun May 30, 2021 5:51 pm, edited 1 time in total.
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Re: Azores Custom Scenery with Terragear

Postby AzulProfundo » Sun May 30, 2021 5:37 pm

I tested the processing of two linestring shapefiles through ogr-decode (streams and tracks or tertiary roads), but the tiles generated in the work folder have the latitude and longitude switched. Instead of longitude west and latitude north, I get longitude east and latitude south.
I am running version 2.1 of this tool.

Other terragear tools, such as gdalchop or genapts, did not make that switch.
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Re: Azores Custom Scenery with Terragear

Postby BecOzIcan » Sun May 30, 2021 11:34 pm

@azul

Lookup the forums for wedomaker plugin which can also generate the background image for you.
https://forums.x-plane.org/index.php?/f ... s-wedbing/

Beware the image generated is slightly offset, use the runway as a reference point to realign.
Ian
Current Projects: AI Traffic, Models & Liveries
User avatar
BecOzIcan
 
Posts: 1302
Joined: Tue Oct 04, 2011 11:43 pm
Location: Sydney, NSW, Australia
Version: 2020.4.0
OS: Win10

Re: Azores Custom Scenery with Terragear

Postby AzulProfundo » Mon May 31, 2021 8:33 pm

First actual alignment of an airport with the method by BecOzIcan: LPPI "Ilha do Pico".
First I selected all the elements, and with the marquee tool, move them (visually) to align with the osm overlay. Airport elements are now synced with the groundnet (which is following osm). After that, I corrected the position of the runway to the official threshold coordinates.

This second step was a little more tricky, because the latlong pairs in the runway object do not always correspond to the threshold (if they are displaced). The remedy was to use a pair of cones to mark the threshold positions (entered by hand), and then precisely align the runway numbers to those marks.

Doing so, I observed that the osm runway position was almost correct, with a deviation of less than one meter. :D

The initial deviation of this airport, measured in WED, was 20 meters, azimuth 288º.

I will continue with the alignment of the other airports, but meanwhile, anybody has any ideas of what is happening with ogr-decode (see previous post)?

LPPI in WED, after the alignment:
Image
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Re: Azores Custom Scenery with Terragear

Postby ludomotico » Tue Jun 01, 2021 1:39 am

AzulProfundo wrote in Fri May 28, 2021 7:19 pm:The situation, as seen at this small scale, is almost perfect. However, if I zoom to a larger scale (below at 1:5.000), the differences between the osm landmass and the CORINE are now perfectly visible. Some doubts arise:
1. should the landclass (CORINE) be cut by the landmass (osm) where is covering the sea?
2. should a ocean polygon be drawn around the islands, or Terragear automatically infer that from the landmass of the islands and islets?
3. a default landclass (osm) will show in the narrow strips where the CORINE does not reach the sea. Is this OK?


1. Yes! In my experience, the coast line in OSM is much better than the coastline in CORINE. Use OSM to cut the CORINE classes. If you decide this is too much work... then, cut at least the CORINE "port area" landclass: I guess the Azores have many ports, and CORINE classifies inner and surrounding water also as "port area". You MUST cut at least the "port area" landclass using the OSM coastline. Current WS2.0 does not take this into account and the WS2.0 scenery is painfully wrong in port areas. BTW, regarding this issue, I strongly believe that tg-construct (the last tool in the terragear chain) already does this automatically, if you define a polygon as "landmass". But I may be mistaken.
2. No, if there is no landmass (i.e., there is not any kind of polygon), FlightGear draws the ocean. In fact, this is exactly what you get if the scenery fails to load for any reason: an infinite ocean.
3. These are the parts you might consider for custom polygons: beaches, cliffs, docks... Try how it goes with the default material, and decide if the potential enhancement deserves the additional workload you need to create these custom polygons. In my opinion, too much effort for a very little gain. But you decide what is the best for your project!

Anyway: keep in mind that most materials and specially the default material already includes a variety of crop types, roads, small tree areas... things that will help you to "hide" many "mistakes" and create the illusion of more complex areas using fewer or larger landclasses.
User avatar
ludomotico
 
Posts: 1269
Joined: Tue Apr 24, 2012 2:01 pm
Version: nightly
OS: Windows 10

Re: Azores Custom Scenery with Terragear

Postby AzulProfundo » Wed Jun 02, 2021 8:52 pm

ludomotico,

Very good answers. I will follow your advice to perfect the land classes, while avoiding the "too much effort for a very little gain". Perhaps completing the effort for a couple of the smallest islands (Corvo and Graciosa) and see the results in the custom scenery.
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Re: Azores Custom Scenery with Terragear

Postby AzulProfundo » Wed Jun 02, 2021 11:02 pm

Quick update

Three airport's apt files aligned with official threshold data and OSM / groundnets. Results of deviations as follows (meters and azimuth of the move).
LPFL: 7m, 350º
LPGR: 7m, 250º
LPHR: < 1m (no move)

All runway threshold positions updated to official coordinates (even on LPHR). This last one had a difference of about 30cm.

Just four airports remaining in Azores. Next step will be using genapts to get the work folder for the airports.
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Re: Azores Custom Scenery with Terragear

Postby merspieler » Wed Jun 02, 2021 11:36 pm

Do you use the apt data you get from fg or do you use the latest apt files from the xplane gateway?

Many airports which are wrong in fg have been fixed in the gateway and all that remains to do is to download the new file.

Also do you push your updates back to the gateway?
Nia (you&, she/her)

Please use gender neutral terms when referring to a group of people!

Be the change you wish to see in the world, be an ally to all!

Join the official matrix space
merspieler
 
Posts: 2242
Joined: Thu Oct 26, 2017 11:43 am
Location: Wish to be in YBCS
Pronouns: you&, she/her
Callsign: you&, she/her
IRC name: merspieler
Version: next
OS: NixOS

Re: Azores Custom Scenery with Terragear

Postby AzulProfundo » Thu Jun 03, 2021 9:05 pm

The apt files were contributed by D-ECHO and I believe they are the latest version in the gateway, plus other editing done by D-ECHO. These last edits, and the ones I did (just alignments of the airport or specific to the runways), are not yet available in Terrasync. I hope they will be, if I manage to compile the custom scenery and it is approved for merging.

It is true that the apt data (in $FGDATA), at least for the azores airports, are wrong and outdated, and that was the reason for using the OSM as guideline to create the groundnets. And then discover the small deviations with the current airport scenery in Terrasync.

I am not considering to do any push back to the gateway, because in my view this is a problem just for the FlightGear. In X-Plane, the different components all reside in the apt file, so they are naturally in sync. Even they have those small deviations from official data, it is not a problem for the X-Plane user, neither for their AI system.

I believe the apt.dat.gz should be updated with the latest airport data available in Terrasync, so that everything be kept in sync also in FlightGear.
Last edited by Johan G on Fri Jun 04, 2021 8:34 am, edited 1 time in total.
Reason: Please do not quote the entire preceding post.
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Re: Azores Custom Scenery with Terragear

Postby AzulProfundo » Mon Jun 07, 2021 6:07 pm

Just a quick update about this project.

I think the issues with the landclass (CORINE 2006) vs. the OSM data can be partly solved with a simple intersection geoprocessing operation in QGIS. This updates the landcover with the more correct and detailed shoreline from the OSM. And also more current, as can be seen from the small example below for the island of Faial.

In the picture, intersected CLC is in brown, the green area (port in original CORINE) is actually sea and will be shown as such, and the small patches in orange are the parts of landmass that will receive the default landclass.
Image

For this island, the intersection was really fast, so I think it will not be a problem to process the entire archipelago.

Still no answers for the ogr-decode problem, so I will create a new post for the issue...
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Re: Azores Custom Scenery with Terragear

Postby AzulProfundo » Sun Jun 20, 2021 1:27 pm

Quick update on this project:

The ogr-decode problems were solved with the switch to "next" branch of the repository, and results are now in the "work" folder. I have done a total of 25 land classes from OSM and CORINE. Plus the SRTM-1 mesh and the two folders generated by genapts850 gives a total of 28 folders to be processed by tg-construct.

Concerning genapts850, I found problems in two airports (LPAZ and LPSJ), due to the same reason: it does not process some textures in the linear features, namely those with codes 19 (taxi-hatch) and 10 (taxi-wide). So, I have changed them to code 1 (solid yellow) in order to process those airports.

Finally, I have tried to generate the custom scenery with tg-construct, but with no success until now. There were some problems with area types not recognized, but I checked the names in the default priorities file and re-run the ogr-decode with the correct names. But there are still problems, only this time I can not see where they are precisely...

In order to get some help, here goes the code of the ogr-decode commands for the land class files, and the command line for the tg-construct:

Code: Select all
/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --line-width 3 --area-type Stream work/Stream data/osm/osm-stream

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --line-width 6 --area-type Road-Tertiary work/Track data/osm/osm-track

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Default work/Default data/osm/osm-landmass

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --line-width 10 --area-type Road-Secondary work/Secondary data/osm/osm-secondary

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --line-width 20 --area-type Road-Primary work/Roads data/osm/osm-primary

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --line-width 10 --area-type Watercourse work/Rivers data/osm/osm-river

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Sand work/Beach data/osm/osm-beach

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Town work/Town data/corine2006/clc-town

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Heath work/Heath data/corine2006/clc-heath

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type NaturalCrop work/NaturalCrop data/corine2006/clc-naturalcrop

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type CropGrass work/CropGrass data/corine2006/clc-cropgrasscover

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Grassland work/Grassland data/corine2006/clc-grassland

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Bog work/Bog data/corine2006/clc-bog

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Lake work/Lake data/corine2006/clc-lake

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Vineyard work/Vineyard data/corine2006/clc-vineyard

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type ComplexCrop work/ComplexCrop data/corine2006/clc-complexcrop

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type DryCrop work/DryCrop data/corine2006/clc-drycrop

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type DeciduousForest work/DeciduousForest data/corine2006/clc-deciduousforest

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Airport work/Airport data/corine2006/clc-airports

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Urban work/Urban data/corine2006/clc-urban

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Port work/Port data/corine2006/clc-port

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type EvergreenForest work/EvergreenForest data/corine2006/clc-evergreenforest

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type MixedForest work/MixedForest data/corine2006/clc-mixedforest

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type ShrubGrassCover work/ShrubGrassCover data/corine2006/clc-shrub

/home/jph/TerraGear/terragear/src/Prep/OGRDecode/ogr-decode --max-segment 500 --area-type Rock work/Rock data/corine2006/clc-rock


Code: Select all
/home/jph/TerraGear/install/terragear/bin/tg-construct --work-dir=./work --output-dir=./output/Terrain --threads --min-lat=36.386 --max-lat=40.2461 --min-lon=-31.9043 --max-lon=-24.1699 AirportArea SRTM-1 AirportObj Rivers Stream Roads Secondary Track Port Airport Beach Lake Town Urban Bog ComplexCrop CropGrass DeciduousForest DryCrop EvergreenForest Grassland Heath MixedForest NaturalCrop Rock ShrubGrassCover Vineyard Default


The log file is too big to be put here as code, so I have created this link in google drive: tg-construct log
__________________________________________________________________________
Slimbook ES (Ubuntu Notebook)
AzulProfundo
 
Posts: 97
Joined: Sat May 09, 2020 12:54 am
Location: Portugal
Version: 2020.3.8
OS: Ubuntu 20.04

Next

Return to Scenery

Who is online

Users browsing this forum: No registered users and 12 guests