Wolrd Machine to UE4 using World Composition

For the longest time I have been trying to figure out the best process to integrate World Machine tiled worlds into UE4. I think I have come across a good solution so far. I have attached my process. This is from my Technical Design Document so if you need anything explained just let me know!

– EDIT –

I created a wiki with the same info located here: A new, community-hosted Unreal Engine Wiki - Announcements - Unreal Engine Forums

World Machine to UE4

1. World Creation

1.1. Overview
Creating worlds for the game will be a detailed and long process. With the right steps the time it takes to create worlds should be lessened. The next sections will layout the process in detail.

1.2. Terrain Creation
Terrains are created using World Machine. Below is the process of creating terrains and setting the terrain size up.

1.2.1. Generators
In world Machine there are multiple ways to create terrains. One way is a paramatized way using perlin or any other kind of noise generators.
Another way is to import a heightmap created in another program as a basis.

1.2.2. Natural Processes
Erosion is a huge positive of using World Machine. It creates lifelike erosion. The outputs of the erosion process can be used to create flow maps and more.
Another Process is Thermal Weathering.

1.3. Terrain Export
To export the terrain from World Machine follow below. The export process is ran once exporting multiple files used for weightmaps for textures as well as the main heightmaps.

1.3.1. World Machine Setup
Below is the process to export the heightmap.

[INDENT]1.3.1.1. Tiled Build Setup
Under “World Extents and Resolution” you will see a “Tiled Build Options” tab. Set the following options.
• Tile Resolution - Custom 2017 x 2017
• Tiles per Side - 4 x 4
• Blending Percentage - 100%
• Share edge vertices - tick
• Flip Y-axis orientation - tick[/INDENT]

[INDENT]

[/INDENT]

[INDENT]1.3.1.2. General Setup
Under the “General Setup” tab make note of the maximum elevation used. You can change this to your needs but remember that number it will be used when importing into UE4.[/INDENT]

[INDENT]

[/INDENT][INDENT]1.3.1.3. Height Output Setup
Ensure the final height output is attached to a Height Output node. Ensure the settings follow the settings below:
• Filename - Filepath/Planet_Name
• Participate in tiled builds - tick
• High Precision - RAW16[/INDENT]

[INDENT]Height Output Settings.png[/INDENT]

[INDENT]1.3.1.4. Weightmaps Setup
Setup whatever weightmap selections you wish to use. Follow the steps below to setup weightmaps based off terrain angle.
• Create 3 Select Slope Nodes
• Attach the Primary Output node to each select slope input node.
• Set the angle selections for each select angle nodes.
• Attach the outputs from the select angle nodes to a height output node.
• Set a distinct name for each output and make sure it is tileable. Below are some screen shots for each step.[/INDENT]

[INDENT]


Select Angle Node.png
Weightmap Output Settings.png[/INDENT]
[INDENT]

1.3.1.5. Build
Click the tiled build button and wait for all the heightmaps to populate.[/INDENT]

1.4. Terrain Material Setup
The material for the terrain should be setup first. Follow the steps below to setup a terrain ready to accept the weightmaps exported earlier.
• Create a new material in UE4.
• Create a Landscape Layer Blend node. Add a layer element for each weightmap you exported.
• Name the Layers something you will remember and can associate with the weightmaps exported from World Machine.
• Drag the textures you want to use for each layer into the material editor.
• Connect the outputs of the textures to the associated “Layer” input on the landscape layer blend node.
• Add a Landscape Layer Coords and attach the output to the “UVs” input of each texture node.
• In the Landscape Layer Coords set the tiling to whatever you want. Start with 25 and go from there.
• If you wish to use Normal Maps for the textures duplicate the process above. Instead of connecting the output of the layer blend node to the “Base Color” input, connect it to the “Normal” input on the material node.
• Below is an example node structure.

1.5. World Composition in UE4
World composition allows smaller chunks of the planet be loaded at runtime when the player is close enough to that chunk. Below are the steps to get the terrain into the world.

1.5.1. Persistent Level Setup
To setup the persistent level follow the steps below:
• Create a new level with a sky-box pre-built or not.
• Save the file with the Planet or location name.
• Open the world settings and check the box labeled “Enable World Composition”

UE4 World Settings.png

1.5.2. Tiled Landscape Import
To import a tiled landscape follow the steps below
• Open the levels window.
• Click the Levels drop down menu in the upper-left of the levels window.
• Select “Import Tiled Landscape…”
• Click the “Select heightmap Tiles…” button.
• Navigate to the folder where you saved the raw heightmap images from World Machine
• Select all the tiled files. (e.g. Planet_Name_x0_y0)
• Change the Z scale. Times the world height used from World Machine by 0.1953125 and enter that number in Z scale.
• Select the Material created earlier. Once selected it should give you the weightmaps option.
• Now click the “Select Weightmap Tiles…” button.
• Navigate to the folder where you saved the raw weightmap images from World Machine
• Select all the tiled files for each weightmap. (e.g. Planet_Name_HighAngle-x0_y0)
• Then click “Import”
• Select all the Planet_Name_x#_y# levels in the Levels window
• Right click and select load to see if the imported properly.
• Below are some images of the process.


UE4 Tiled Landscape Import.png
UE4 Tiled Landscape Import Final.png

1.6. Terrain in UE4
Below are some images from the terrain created above in the UE4 engine.



I like the way you have documented your process, I need to do something similar. I usually get a process and settings figured out, then get distracted and have to come back to it months later and basically figure it out all over again.

I dont see any seams/lines in the images, you must have the tiling working nicely. Last time I had a chance to generate some landscapes in WM there were some issues with some erosion effects not crossing tile edges. the solution was to perform the erosion on a large untiled map,save it, then open it back up in a tiled build and then save the tiles. Have you experienced this?

I do the same thing, that is exactly why I started documenting things as I went. Even while writing the above the process changed a few times.

I have experienced the tile issues you mentioned. What I did was crank up the belnding percentage on the tiled build options tab. It is under tiles per side. Then I just made sure everything being exported was blended across tiles. I have had issues since I started doing those steps. I started with 4033 size landscape tiles and it would take forever to build so I increased the tiles and dropped the resolution to 2017 and it all builds out in 2 hours if not a little less. Not that I have the process down I’m going to experiement with exporting the perfect weightmaps so everything flows better. The cool thing about doing weightmaps is I can go back and paint over the landscape.

Thank you very much for this. I am near to have to work with this and this guide is very useful.
I have the World Machine standard version, which not supports tiles.
However searching I found this:

http://scrawkblog.com/2013/02/18/automated-height-map-splitting-using-imagemagick/
(not yet tested by me)

Perhaps it is also useful to prevent erosion probem / tiles of world machine until it is resolved.

.-

,

I will have to look into that tool when I get home. That could be another way to do the tiled build. I also forgot to mention that World Machine exports tiles in this format:

(0,3) (1,3) (2,3) (3,3)
(0,2) (1,2) (2,2) (2,3)
(0,1) (1,1) (1,2) (1,3)
(0,0) (1,0) (2,0) (3,0)

Were UE4 imports tiles in this order:

(0,0) (1,0) (2,0) (3,0)
(0,1) (1,1) (2,1) (3,1)
(0,2) (1,2) (2,2) (3,2)
(0,3) (1,3) (2,3) (3,3)

That is for a 4x4 grid. That is why I flip the y on the output of World Machine. So when you save your tiles be aware of how UE4 imports them.

DUDE - Put this up on the WIKI - this needs to be up there :slight_smile:

+1 for the wiki :slight_smile: this is great stuff man!

Thanks! I didn’t think about the wiki. I will work on getting this up there.

Update,

Here is a picture of a huge 16km x 16km terrain using the process above with a cel shader created by Antidamage here: https://forums.unrealengine.com/showthread.php?7164-A-different-kind-of-cel-shader

I just followed your process, seems my material isn’t HD

Hey there,

I’m trying to follow your process, but I get an error while importing my weight-layer. I’ve tried to export different sizes, my heightmap has a 2017x2017 resolution and my layerfiles.raw, too. But each time I get this error message: “sitze of layer file does not match sitze of heightmap”. Any ideas?

Best regards,

Can you post screenshots of your settings on WM and UE4? I will tell you if I can

Okay,

so I’m able to import the heightmap without the Layers and it will work. But I can’t import the layer files for the height/slope definiton. Here are some screenshots.

Thanks




So, I finally found the error. I tought the file type of the weight layer has to be set as raw16 bit. If I export them as raw8 bit, it works fine.

Sorry Guys

Yep good find. R16 is for the heightmap and raw is for the layer maps. Sorry I didn’t respond sooner. How did it turn out for you?

I have a little bit of a tilling problem with my textures, but after all and some basic materials, it turned out well.

See attached:

Best,

That looks awesome. I need to work on my materials and textures also. But yours looks great!

Hi,

I want to thank you for this awesome tutorial! It has really helped me out. Thanks a lot dude.

Hey! Thanks for that! I will be trying it out soon.

Import in UE4 is mirrored ?!

[]
,

I will have to look into that tool when I get home. That could be another way to do the tiled build. I also forgot to mention that World Machine exports tiles in this format:

(0,3) (1,3) (2,3) (3,3)
(0,2) (1,2) (2,2) (2,3)
(0,1) (1,1) (1,2) (1,3)
(0,0) (1,0) (2,0) (3,0)

Were UE4 imports tiles in this order:

(0,0) (1,0) (2,0) (3,0)
(0,1) (1,1) (2,1) (3,1)
(0,2) (1,2) (2,2) (3,2)
(0,3) (1,3) (2,3) (3,3)

That is for a 4x4 grid. That is why I flip the y on the output of World Machine. So when you save your tiles be aware of how UE4 imports them.

[/QUOTE]

Hi,
Thanks for this so useful “how-to” ! All works like a charm except that: when I import my tiled landscape in UE4, each tile seems to be mirrored… For example I have a crater with a river on the left side, in UE4 all the crater is mirrored resulting in a river on the right side of the crater… (Using UE4.6.1). Any idea?