I'm trying to create a large low poly terrain from a heightmap which is divided into multiple squares. Each square is then used as the texture for the displace modifier applied to a plane. However, when I then place the displaced planes next to each other to form the total terrain the edges don't align seamlessly.

Let me visualize this a little bit:

I'm using the following image (512px x 512px) as the heightmap for testing purposes:

enter image description here

This is going to be sliced into four (= 2 x 2) squares. (The final heightmap is supposed to be about 8 x 8 of these smaller squares). Let's just look at the top two:

enter image description here enter image description here

I have already checked and there are no pixels lost between the two slices. In the end each terrain tile is going to be in its own .blend file, but for demonstration purposes I'm going to have them in the same one for now.

Now I take two planes, subdivide them into grids of size 256 x 256 and add the displace modifier with the respective texture. (I'm also adding a decimate modifier but that's not part of the problem)

enter image description here

The texture settings are as follows:

enter image description here

Image Sampling is set to interpolate and image mapping extension to repeat (I've tried all extension options already)

The problem is this:

enter image description here

As you can see there are multiple places where the edges of the different planes don't align. I'm guessing that this is probably because each displace is lacking the information for the pixels of the other heightmap slice and therefore can't properly interpolate between the two.

Is there a way to solve this problem and make the edges align seamlessly? Or is there maybe a completely different and easier approach to this whole idea?

  • $\begingroup$ After testing a bit: create a vertex group corresponding to the border of one plane. add a shrinkwrap to it using this group. But! you will still have a normals orientation issue $\endgroup$ – lemon Mar 15 '17 at 12:27
  • $\begingroup$ Turn off interpolation in the image sampling panel of the textures. $\endgroup$ – JakeD Mar 15 '17 at 12:31

A solution can be using two additional modifiers:

  • Shrinkwrap to fill the gap between the two images
  • Data transfer to align the normal continuously

enter image description here

The vertex group used to that is the following:

enter image description here

You can also use "extend" option on the textures mapping:

enter image description here


Applying the data transfer modifier won't work if 'auto smooth' is not set, as Blender will recalculate the normals. So use auto smooth (180°) and apply the modifier:

enter image description here

  • $\begingroup$ Thanks for the answer! If I understood it correctly this would require all the adjacent planes to be in the same .blend file though, wouldn't it? $\endgroup$ – Keiwan Mar 15 '17 at 17:09
  • $\begingroup$ I think you can apply the modifiers, so once done, each part can be saved separately (use 'generate data layer' for the data transfer modifier)... well... just tried, for the data transfer applying does not seem to work... $\endgroup$ – lemon Mar 15 '17 at 17:12
  • $\begingroup$ OK, set "autosmooth" on with 180° for both meshes (data tab). Then data transfer can be applied and will be kept. $\endgroup$ – lemon Mar 15 '17 at 18:06
  • $\begingroup$ Thanks a lot for the follow-up. I'm going to try this out later today, but I think in the end I'm probably going to work around this issue in some other way. My computer is probably not going to be able to handle a lot of planes and the data transfer modifier all at once (It was already struggling with just two). $\endgroup$ – Keiwan Mar 16 '17 at 12:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.