i’m trying to look for a ue4 plugin/supported-software that works like world composer in unity3d, where it would create terrain with material base on real-world map in the editor and does not require a subscription.
i’ve made a search on google for such solutions but most requires me to get the gis data from another web to import only the height map to ue4 without the materials etc. i’ve also looked at both Cesium for Unreal and Coala but both requires long-term subscription instead of a one-time payment.
i could export from World Composer and re-import to Unreal, but would be great if there’s a plugin for Unreal to do it without long-term subscription.
GIS terrain data (DTM) is avaliable from some sources, but generally none of them make it avaliable within a program directly.
There’s really no point in building anything like that because the terrainndata can and often does come from anywhere, including custom scans off drones and lidar point clouds.
Source your DTM from whatever offers the best you can get for your region of interest.
Push that into any program (Houding by SFX is also free now, and does a good job at landscapes), and go from there.
Anything above 8km^2 should use world composition and world origin rebasing - but you don’t necessarily have to use the landscape system either, even if it is easier to pull in blank tiles to generate the level names/positions and subsequently delete thenterrain/replace it with meshes.
The nice part about making meshes is that you can UV it as you like and generate a unique image. Bake it down, and have very good looking results at a distance.
The downside is close up resolution suffers a bit.
I’ve been testing with DEM data from OpenTopography.org and other sources, downloaded as GeoTIF height maps, then edited using GIMP or World Machine. GIMP has the advantage of being free, but World Machine is a purpose-built terrain editing tool rather than a general image editor. World Machine directly supports tiling its output into the pixel dimensions that are supported by UE4.
One option I’m looking at is to use a Python script and the ImageMagick open source command line utilities to take care of the tiling, for projects where all I need is the raw heightmaps retiled and imported into UE4 (that is, if I plan to do any additional landscape work using UE4 native tools).
World Creator, a tool which is available either as a Unity plugin or as a standalone product, can do many of the same things as World Machine. I’ve used the Unity version of World Creator and like it, but the standalone version is quite a bit more expensive and I haven’t tried that yet.
Be mindful of that.
You need to keep the files in the proper format - 16bit.
If you open it and edit it in photohsop for instance, you loose almost all the data as it converts it down.
You really shouldn’t be editing the map at all unless the program is 16bit capable, like Krita.
Any sort of format compression applied by the program will shift your height bands up or down depending on the algorithm - you loose fidelity.
World machine is obviously better suited to this.
You can do the tiling via QGIS, I have explained how in this forum several times. Even given scripts for it.
With python/imagemagick the issue is the same. You need something that properly handles 16bit.
You have to script a system to rename the tiles to what you need, as when it chops it up its just a numerical increment.
Any bash script can do that correctly without changing the file, the important part is that it natively handles the file in 16bit without any particular considerations.
I absolutely agree about the importance of retaining 16 bit pixel depth, but recent versions of GIMP (I am running 2.10.24) can handle 16 bit greyscale in both TIFF and PNG formats. Here is the title/status line in GIMP after importing a NASADEM file that I obtained in GeoTIF format a few days ago:
The default is automatic pixel format. I haven’t tested to see if GIMP automatically uses 16 bit greyscale if the original image was in that mode, because (as you correctly noted) the bit depth is important, and I set it manually rather than leaving it to a default.
My comment about Python and ImageMagick was just floating an idea. Having not yet implemented that code, I am not yet aware of whether ImageMagick can handle 16 bit greyscale. Python’s capabilities won’t be an issue – the only thing I was considering doing in Python was creating a wrapper around the ImageMagick “convert” binary. I hadn’t contemplated any actual image processing using Python libraries.
I should add, what GIMP does not handle gracefully is the geospatial data tags that make a GeoTIF different from a regular TIF. Since TIF (tagged image format) is what it is, GIMP is able to disregard tags it does not understand. The imported image contained tags related to (among other things) the real-world size of pixels in three dimensions, and that information is lost.
For someone making a game and simply using real-world DEM data as the basis for an interesting fictional map, this may not matter much, and one can simply resize the image to a visually-appealing aspect ratio (admittedly with the loss of some precision). That may not be adequate for non-game applications in engineering etc. In those cases, a more robust solution such as Cesium, Coala, or World Machine – or some combination thereof – will be more appropriate.
@mosthost_la I believe we agree on the fundamentals, especially with regard to data accuracy. My suggestion wasn’t intended to supplant professional tools like World Machine, but rather to offer a free (but admittedly limited) alternative that might be adequate for small-scale game development or student/learning purposes where geodata accuracy is not critical.
Update: I’m now doing most of the upstream work in Quantum GIS (QGIS) and am blown away at the capabilities of that tool. I added the SRTM Download plugin to retrieve the DTM data from NASA, and I am using features in GDAL to export it as tiled Unreal terrain heightmaps. I am still working out some tuning details, but overall this is going well and likely will be a great workflow when finalized.
It is, it’s just a Lot more scientific than creative.
I’m still trying to figure out how to correctly etch rivers in directly onto the final export - the issue being that if you just make a vector feature you can’t scale the color according to the underlying height…
The script to adapt per pixel takes forever and then some, and I have about 5600 rivers on the map -_-
Could you store the vector data directly as a secondary height map, then pass it to your landscape material and let the GPU interpolate on the fly, taking advantage of the GPU’s parallelism and hardware interpolators?
If you have a heightmap whose UV coordinates exactly match the UV coordinates of your Landscape’s splat map and primary height map, extract the riverbed height from the secondary map and use whatever coloring gradient you wish to alter the color of the water (or the map representation of water, depending on what kind of output you are generating). The secondary heightmap could also use a forced no-data value of 0x0000 or 0xffff to indicate areas that are not rivers (if you use zero, then you can use a multiply-add in the shader which is cheaper than a conditional branch).
If the riverbed height is stored as an offset relative to the same coordinates on the main heightmap, you might be able to use an 8-bit gray scale rather than a 16-bit raw, saving some load time and (maybe) some GPU memory. It might take some math gymnastics – let the value be 0x00 for “not a river”, 0xff for a depth of 1 meter, 0xfe for a depth of two meters, etc. – in other words, the system thinks this is an 8-bit grayscale with a lot fully-black pixels and some that are nearly 100% white, but your shader interprets that as a signed 8-bit integer.
I may be completely full of it here, and I’m not offended if you say so. I’m just brainstorming.
Maybe, but they got rid of everything and ue5 works about as well as a library on fire. So I’m not too keen on testing this so far.
The problem with all the rest, is that you need a spline anyway. You know, for stuff to float along the river, to spawn the water, etc.
Same for roads really.
So, it becomes easier to just have a ton of splines all around, and use the bluetility to let them modify the landscape around them based on whatever parameters you feed.
Once the blutility finishes, that’s basically it. The landscapes heightmap is permanently altered.
The new system could probably use layers to do this. So you can test out and undo changes of a single spline. Maybe. Still not really sure how that works either since it’s never been applicable to world composition and I have been trying to deal with 120km^2 for a year now.