VTOL VR

VTOL VR

39 ratings
Making High Resolution VTOL VR Maps
By ierdna100
In this guide, I publish my findings on two of the ways to get heightmaps to generate high quality VTOL VR maps (the highest resolution the game supports as a matter of fact). You may use this information to also make maps larger than the default maximum size (section 5 of this guide).

I will familiarize you with Tangram Heightmapper and VTOL's map system, you will be required to also use some image editing software in some cases to filter out certain data that we do not need.
3
5
   
Award
Favorite
Favorited
Unfavorite
[PICTURES AND DIAGRAMS ARE NOT IN YET, I HAVE NOT HAD THE TIME TO DO THAT YET. THEY WILL BE ADDED SOON]




NB: Tangrams heightmapper is very buggy as of 2024. If you attempt to zoom past Z=12, it does not load the data properly. Recommended alternatives:

  • Skydark heightmapper[heightmap.skydark.pl]. Designed originally for Cities: Skylines, you can enter any custom area inside the "Map size" box to generate larger maps for VTOL VR. You can skip the Google maps bit with this one as it already overlays imaging of the Earth.

Alternatively, anything that can generate a PNG with the matching resolution shown in Section 7. I will not post recommended alternatives that require API keys, but those are probably a very good bet. Make sure they're based on NASA's studies of the Earth (SRTM-1 for 1 arc-second (90 m) accuracy or the newer ones).

Please suggest others that fit the criteria.
§1 - Selecting an area you want to import into VTOL VR
You may first want to select which area you want to import into VTOL. It is important to note a few things, especially if you are used to incredibly large maps from games such as DCS (up to 900x500 km²) or incredibly small maps such as Cities: Skylines (18x18 km²).



VTOL supports by default from 24x24 km² to 196x196 km² maps, but we can mess around in the file settings to get a larger (or smaller, but I don't know why you would want that) area. It also only supports a square aspect ratio for the heightmaps, otherwise the longest axis gets compressed to become square, and you get a stretched result reminiscent of your elementary school power point presentations's pictures.

Note that VTOL VR also only supports maps with a maximum altitude of 6000 m (19 700 ft). Any more and the game cannot physically represent it.

Lastly, note that certain map types support different sizes. Maps with land as edges have a 7.5% cutoff where the terrain is procedurally generated, while maps with water as the edge only have a 5% cutoff.


§2 - Trial and Error
Now that we know the limitations of VTOL VR, we need to open Google Maps[www.google.ca] and Tangram Heightmapper[tangrams.github.io] to start acquiring our imagery.

NOTE: It is not possible to derive a reasonable equation for distance to Tangram zoom level as the projection Tangram uses has neither a proportional area projection nor a proportional distance projection, as we move from the equator to the poles. Trial and error is the easiest way to solve this problem. The only detail helping us is that Tangram uses the same projection and data in it's URL as Google Maps, going from one to the other is very easy.

You may first want to go on Google Maps and hover above the area you want to put in the game.

Depending on your needs, you will now need to measure a vertical line from the bottom of your display to the top, trying to not leave gaps at the top and bottom. The line has to be as long as your shortest edge, meaning your map's length. If you are using the default tools, the length must be a multiple of 3.072 (approximately, a bit of inaccuracy is okay) and between 8 and 64 times that length. Use the size reference chart in section 6 for conversions. If you are planning on using a custom size (meaning larger or smaller than VTOL's default settings), follow the same steps, but you are no longer limited by the {8, ..., 64} multiplier.

NOTE: Maps larger than the intended maximum size tend to get random chunks without proper heightmap data, use at your own risk and try reloading the heightmap a few times. Using maps larger than 300km in length may crash some machines, while above 400km almost guarantees a crash on all machines.

Then, let's take the position and zoom arguments from Google Maps and import them into Tangram.

A Google Maps link looks like this:

https://www.google.ca/maps/@[LAT],[LONG],[ZOOM]z

We can see the arguments are separated by a comma, and the zoom level is followed by a lowercase "Z".

A Tangram link looks like this:


We can see the arguments are separated by forward slashes and the zoom is preceded by a hash ("#").

With this information, you should be able to set the coordinates and the zoom level in Tangram, then refresh the link to obtain the exact position we want. It is very important that you use Tangram and Google Maps on monitors of the same display resolution, as the scale changes if the resolution changes (i.e. monitors with two different resolutions will have a different pixel density).

Now that we have the position in tangram, we may close Google Maps. You now also have a choice.
  • You can choose to follow Section 3 of this guide for a quick and dirty map, with an accuracy limited to a quarter of the game's maximum accuracy. It still works very well as long as the altitude difference between the lowest and highest point is lower than 1520 m. I recommend this for most users, you do not really need the extra accuracy. This is not applicable if you are making a map outside of the default size constraints, then you will need to follow the 2nd point.

  • Section 4 covers a more detailed and complex way to do it and requires more time and effort, but yields a perfect heightmap that the game can immediately read without being interpreted, which gives the advantage of complete control of how the pixels we manipulate get read by the game. If you wish to later edit the heightmap (i.e. after its creation), that section also shows you what to edit and how. This is also required if you wish a custom heightmap size.
§3a - The Quick Way - Getting a heightmap from Tangram
You are now ready to render a heightmap from Tangram.

Now, make sure you turn off the "include ocean data" setting, as it will throw off the scale and VTOL cannot do detailed underwater terrain anyway. If you had map labels or map lines enabled, turn those off too, as they will make it in the final render otherwise.

Additionally, if you have a monitor with a resolution lower than WQHD (2560x1440), you now need to increase the render multiplier to 2 to make sure the game has enough data to convert the heightmap properly. Now, make sure you give your render an adequate name, then click "render".

Else, if your monitor has a resolution greater or equal to WQHD, you can just directly click "export", which is no different than rendering at a scale of 1.

IT IS IMPORTANT NOT TO GIVE ANY INPUTS TO YOUR BROWSER WHILE THE MAP RENDERS, AS THIS MAY GIVE A BROKEN RESULT, due to how Tangram actually acquires the render (stitching together a bunch of smaller maps from a higher zoom level).

Before closing Tangram, you need to note what the highest and lowest values in the top right of your screen are, as those will come in useful for generating the VTOL VR map. You may then close Tangram; we won't be needing it anymore.

With the file you have downloaded, you now need to open it in an image editing software. Fortunately, the built-in Windows one works for our needs. You then need to crop the heightmap to be in a square aspect ratio, due to how the game interprets images. This is also why we measured the distance vertically in Google Maps, and not across the length of your display. Feel free to overwrite the original, we won't be needing it anymore.
§3b - The Quick Way - Uploading the heightmap to VTOL VR
We are now ready to put the heightmap into VTOL VR.

First, you need to open the following directory:

You may access it quickly by right clicking on the game, then going into "Browse Game Folder" and searching for a directory named "Editor Resources" there.

Then, boot up VTOL VR and go to the map editor page. Select to create a new map, then make sure you enter all settings correctly. You first want to make sure you have the map type set to "heightmap". You then want to import the height map by clicking on the gray "IMPORT HEIGHTMAP" button. Make sure you set the settings of the border to be as close as possible to the real location. Mind that a coastal heightmap can only have 1 side be a shore, while the other 3 are going to be land.

The folder for Editor Ressources is at the following path, there are also instructions on the Map Editor import page to help you locate it:

[...]\steamapps\common\VTOL VR\EditorResources

Remember that a the game has a 10% cutoff on every side that is a shoreline, and a 15% cutoff on every side that is land.

Now, to help the game parse the heightmap, we need to give it 2 very important numbers.
The minimum will set what a black pixel represents in height, and the maximum will set what a fully white pixel represents. You may copy these values that you saved earlier from tangram directly into the game, but this means that elevated areas with bodies of water will not properly be generated.

For that, we need to offset it. Water in VTOL VR only generates at exactly 0 m in height, this means you must set the minimum to be lower than 0, such as -1. Unfortunately, you may notice on the preview that some bodies of water are not very flat, this is especially true for large lakes, dam reservoirs, and rivers. This is why you may want to set the minimum altitude to be lower than -1, as low as -80, to ensure all of the water from a relative elevation of 0 to 80 m is interpreted as such. Feel free to mess around with values until you find one you like.

The maximum altitude needs to then be the one from Tangram, with the same offset you applied to the minimum altitude. For instance: if your minimum altitude is 1000m and your maximum is 3000m and you want to shift it by 80m so the first 80m are water, then shift both the upper limit (3000 - 80 = 2920) and the lower limit (1000 - 80 = 920). Unless of course you want to stretch the map vertically, or compress it, then you need to reduce it less or more, respectively, until you find something you like.

For vertical compression, a lower inter-limit value (upper limit minus lower limit) leads to a contracted map, the peaks will be softer and the map overall flatter, a higher inter-limit value leads to stretching, higher, more defined peaks and significantly hillier terrain.

You are now done and have a working heightmap. It's not the best in the world, but it works. For a more detailed way to manage your heightmaps, check section 4.
§4a - The Long Way - Getting the heightmaps from Tangram
NOTE: If you wish to make a map with a size outside VTOL VR's default boundaries, follow section 5 for specifics, this section still covers required steps to get the heightmap into the game.

We are now ready to proceed to the intensive task of grade 1 arithmetic.

Now, make sure you turn off the "include ocean data" setting, as it will throw off the scale and VTOL cannot do detailed underwater terrain anyway. If you had map labels or map lines enabled, turn those off too, they will make it in the final render otherwise.

Additionally, if you have a monitor with a resolution lower than WQHD (2560x1440), you now need to increase the render multiplier to 2 to make sure we have enough data to convert the transform properly.

For our purposes, we will need to export not one, but four heightmaps. The reason for this is that the game uses 4 heightmaps, 8-bit with 1-channel resolution each, stacked together.

You will now need to disable "auto-exposure" in the top right of your display. This will hinder what we are trying to do.

For the first heightmap, set the minimum altitude to -80, even though tangram with it's current settings only goes to 0. This ensures proper scaling for VTOL VR. Set the maximum to 1440.

Now, make sure you give your render an adequate name, then click "render".

Note, if your monitor has a resolution greater or equal to WQHD, you can just directly click "export", which is no different than render at a scale of 1.

IT IS IMPORTANT NOT TO GIVE ANY INPUTS TO YOUR BROWSER WHILE THE MAP RENDERS, AS THIS MAY GIVE A BROKEN RESULT, due to how Tangram actually acquires the render (stitching together a bunch of smaller maps from a higher zoom level).

For the second heightmap, set the minimum to 1440 and the maximum to 2960. Then generate a new file. Make sure not to overwrite the first one.

For the third, minimum at 2960, maximum at 4480.
For the fourth, minimum at 4480, maximum at 6000.

You may then close Tangram, we won't be needing it anymore.
§4b - The Long Way - Post processing the heightmaps
With the files you have downloaded, you now need to open them in an image editing software.

For the first step, the built-in Windows editor will work. All you need to do is crop the images to a square aspect ratio. Make suret to keep them all aligned (which is why I really do not recommend the built-in Windows editor). I will be using Gimp to demonstrate as it is fully free. I also trust it to compress the image from our odd resolution to the exact one we will need, as it is proper software designed for this. If you have a licence, I strongly recommend Photoshop.

The second step requires us to remove the blue and green channel out of the heightmaps. This is incredibly important, as the green channel is used as an input for cities, and a completely green heightmap will take upwards of 15 minutes to load into VTOL VR, that's if the game doesn't crash and your memory doesn't catch on fire.

The final step involves making sure you resize the final output to match exactly what the game expects the image to be. There is a quick reference chart below for converting map size -> image size. For sizes outside of these bounds (8 - 64 chunks, i.e. 25 -197 km), check section 5.



With these values, make sure to resize the image to be a square aspect ratio. This is also why we measured the distance vertically in Google Maps, and not across the length of your display. Feel free to overwrite the original, we won't be needing it anymore.

We now have 4 heightmaps ready to be ported to the game.
§4c - The Long Way - Uploading the heightmaps into VTOL VR
Now, let's head into VTOL VR. Create a new map with the same chunk amount as you set your heightmaps to be earlier, then make sure you enter all settings correctly. Make sure you set the settings of the border to be as close as possible to the real location. Mind that a coastal heightmap can only have 1 side be a shore, while the other 3 are going to be land.

Generate the heightmap with any values you wish, then save the map with Ctrl+S, then quit the game.

Then, you need to open the following directory:

You may access it quickly by right clicking on the game, then going into "Browse Game Folder" and searching for a directory named "Custom Maps" there. Search for your map and open it's folder. You will notice 6 or 7 files are present. The ones of interest to us are height0, height1, height2 and height3. These, in order of name, represent terrain altitude. You want to replace them with your own maps, height0 being the first you generated and height3 being the last, also make sure they are all PNG files and not another file type.

After replacing them, open the game folder and enjoy a high quality map! The terrain tools in VTOL VR are very simplistic, you now know how to manually edit the heightmaps the game uses internally, feel free to do your map editing with an imagine manipulation program, they are infinitely better.

Reminder that a the game has a 10% cutoff on every side that is a shoreline, and a 15% cutoff on every side that is land, which will then not be fully accurate to the heightmap you input. The game can also bug out reading new files and it is recommended to not leave it open while you restart every time you change the files manually to make sure every piece of code runs in the order it is supposed to.
§5 - Maps larger (or smaller) than the game's "official" limit
This section goes into detail on how to set up your map for custom map sizes (outside the 8 to 64 chunks of the default game's options).

You will need to use section 4 to get the heightmaps into the game, this section is here for details and specifics to this process.

First, note that you will need to ensure that when exporting your Tangram heightmap, the render multiplier is high enough that you have enough data to work with. This means that 80% of your vertical resolution is at least higher or equal to the pixel size of the heightmap (e.g. you have a 2560x1440 px monitor and you need at least 2000 pixels of height, you need a 2x multiplier (2 * 1440 = 2880, 2880 * 0.8 = 2304, 2304 >= 2000)). The equations to convert from one unit to another are in section 6.

Second, you must instruct the game on how large you want your map to be. Section 6 covers how to convert from size to chunks, but once you have a selected number of chunks (as an integer!) you can now edit your map. Presuming you have already created the files for this one, navigate to its folder, situated at:
[...]\steamapps\common\VTOL VR\CustomMaps\yourmap

Next up, open up the file with the .vtm extension. The structure (that interests us) will look something like:
VTMapCustom { mapID = mymap mapName = mymap mapDescription = This is my map mapType = HeightMap edgeMode = Water biome = Boreal seed = seed mapSize = 30 TerrainSettings { mainNoiseScale = 10 maxMtnHeight = 221.3186 } [...] }

We wish to edit the mapSize variable, which is how many chunks wide our map will be. Once that is done, you may import a heightmap with the correct size and edit the map normally.

Note that you may need to restart the game, as it buffers maps in memory and only reads the files on startup, or so my current testing has revealed.

VERY IMPORTANT NOTICE: Maps above 300km wide are known to cause issues on some machines. Above 400km, they may crash most computers loading it. It is also normal for random chunks to get corrupted, try remaking it until you have luck with only one or two being corrupted in one of the corners.
§6 - Quick-Reference Chart (Chunks <=> Image Size <=> Distance)
Quick-reference chart for default VTOL VR chunk sizes conversions.

Chunks (20 px)
Image size (px)
Actual size (km)
Chunks (20 px)
Image size (px)
Actual size (km)
8
161
24.576
37
741
113.664
9
181
27.648
38
761
116.736
10
201
30.72
39
781
119.808
11
221
33.792
40
801
122.88
12
241
36.864
41
821
125.952
13
261
39.936
42
841
129.024
14
281
43.008
43
861
132.096
15
301
46.08
44
881
135.168
16
321
49.152
45
901
138.24
17
341
52.224
46
921
141.312
18
361
55.296
47
941
144.384
19
381
58.368
48
961
147.456
20
401
61.44
49
981
150.528
21
421
64.512
50
1001
153.6
22
441
67.584
51
1021
156.672
23
461
70.656
52
1041
159.744
24
481
73.728
53
1061
162.816
25
501
76.8
54
1081
165.888
26
521
79.872
55
1101
168.96
27
541
82.944
56
1121
172.032
28
561
86.016
57
1141
175.104
29
581
89.088
58
1161
178.176
30
601
92.16
59
1181
181.248
31
621
95.232
60
1201
184.32
32
641
98.304
61
1221
187.392
33
661
101.376
62
1241
190.464
34
681
104.448
63
1261
193.536
35
701
107.52
64
1281
196.608
36
721
110.592

Equations for converting other sizes that do not appear on the reference chart:

§7 - Note
This guide was relatively quickly made and I do plan to add a lot more to it in the future. I thank you for reading it and I hope it was useful.

If you find any mistakes in it, feel free to comment and let me know, I will correct them.

Finally, I did have plans to make a website to automatically do everything this guides says, but more important projects took the lead and I haven't gotten back in that mood. Should that project ever come back alive, I will make sure to put the link as far up as I can in the guide, as it will save a considerable amount of time.

Have fun on your highly accurate VTOL VR map!

Remember that pictures are not in yet, I will add them as soon as I find the time to do so, until then, you will unfortunately have to do with what I made, sorry!
9 Comments
David Rattleson Feb 11 @ 3:58am 
ok @ierdna100 thanks
ierdna100  [author] Feb 11 @ 1:02am 
@David Rattleson, Which bit of section 4? If you would like more help I'd recommend joining the official Discord server, we can help you in detail there (https://discord.gg/u7X72wc)
David Rattleson Jan 11 @ 11:23pm 
Hey! I believe that section 4 is maybe outdated? I tried several different map locations to test it and it seems that it always create only 1 height map in the map folder and not 4. And if I replace the 1 it created with my 4 height maps it don't look very good
ierdna100  [author] Jul 20, 2023 @ 3:51pm 
If the maps are black that's fine. It means there is no height data at that altitude (above 1280m for maps 2 and above)
RlyShadow Jul 17, 2023 @ 5:52pm 
I don't know if i'm doing something wrong but map 2-4 are just black.
Wildman Eli Jun 13, 2023 @ 8:48am 
Nice!
ierdna100  [author] Apr 7, 2023 @ 3:43pm 
I have no real skill in 3D modelling or texturing, I will not be making a guide on skin creation.
HighOrpheus Apr 5, 2023 @ 9:31am 
Have you ever made Liverys by any chance? I would like a guide for that if possible please.
HighOrpheus Apr 4, 2023 @ 6:18pm 
Thank you so much, I have just got this game and this has helped a lot with importing my map into game! :steamthumbsup: