2
$\begingroup$

I have a very large terrain that is a about a mile x mile long, even a 16k texture is way too low res if you put the camera on a human height level.

In order to get good pixel density for painting, I have to have at least some 150-200 pixels density per meter, for example if I have a 10 x 10 meter plane and put a 2048x2048 texture on it, then that is 2048/10m = 204 pixels density per meter. Anything lower than 100 pix is way too low.

There are only 2 "easy" solutions I know:

  1. To make hundreds of 10x10m tiles from the original terrain and put a new 2048x2048 tex on each tile or...

  2. To put a single 320K texture on the entire terrain.

The second one is obviously not going to work unless you have a supercomputer and the first one will take centuries to complete and I am not even sure if Blender could handle that many objects, materials and all that. So is there a smarter way to do this?

Note that I strictly need to paint on the terrain, I don't want to just resize a single seamless UV, that would be easy, but it's not what I am looking for.

Also, I am doing this in order to export it to 3.rd party game engines and maybe sell the models, so I'd prefer a non or very low node based solution, since I am not sure how that would work with other programs.

Maybe related, maybe not, but terrains in GTA V don't look like they are made from just resizing a UV, however if you enter the game files via Open IV, you'll see that terrain sections use seamless 512 or 1024 grass/sand/etc. textures, but don't seem to have a "painted texture" laid on them....but at the same time the terrains look like they were actually painted, so how is this possible?

$\endgroup$
6
  • $\begingroup$ As far as I know this is generally achieved with a bunch of seamlessly repeating tileable textures for several terrain finishes like grass, gravel, dirt, rock, etc. Then use actual larger textures as masks between them, possibly recycling channels for saving memory. The masks can comport a much lower resolution or even be somewhat procedural, like normals based $\endgroup$ Dec 23, 2017 at 17:45
  • $\begingroup$ Not sure if I understood, but..you mean basically this, I have just one huge UV face, I put a single grass texture and englarge the UV map 20, 30 times, so that the grass looks normal, then in a different layer I repeat that with sand and then somehow make a part of the grass layer visible in one place and a part of the sand layer visible in another place, right? I never used layers/masks, so I am not sure how this works. $\endgroup$
    – Jakester
    Dec 23, 2017 at 22:09
  • $\begingroup$ Yes, that is about it. You will still need a few very large textures used for masking but those wont generally need such a high resolution, and then can be monochrome or use independent channels from one same image, thus saving memory See blog.mikepan.com/post/26950891126/procedural-terrain $\endgroup$ Dec 24, 2017 at 0:04
  • $\begingroup$ Thanks, I'll try that, if it's not too much to ask, can you give me a good video or something on the basics of masking needed for this? I never had any contact with that, I did use photoshop, so I understand the concept, but not in Blender. Also, will this work in 3.rd party software (unity, unreal and maybe 3ds max) if I export it, due to the nodes? $\endgroup$
    – Jakester
    Dec 24, 2017 at 0:24
  • $\begingroup$ You can't export materials, just create your UV Maps and paint your textures properly in Blender then recreate your final material setup wherever you want to use it $\endgroup$ Dec 24, 2017 at 0:55

2 Answers 2

1
$\begingroup$

I would use texture masking as some comments suggest.

Have your grass, sand, gravel etc all mapped to the correct scale and tiled.

Then unwrap your whole mesh to a single image( or more depending how mush res you want for your mask)

Then basically just paint onto the image..

Here you have options I'll start with the most simple: Imagine you have two textures, one sand, one grass. In the node editor you connect both of those textures to a mix node( you can just mix the image textures using an rgb mix node, or the entire shaders using mix shader) then use your painted mask as the factor input of the mix node.

So if you have a plain black image connected to the factor of the mix node it will show only the colour/shader connected to the first input of the mix node. Then anywhere you paint white on the mask will mix in whatever is in the bottom input of the mix node.

To mix multiple textures/shaders you can use a mask painted with rgb values instead of black and white. Then you use a 'separate rgb' node to get each channel's value. So anywhere that is red will output 1 from the red channel of the separate rgb and so on.

$\endgroup$
0
$\begingroup$

You can also create decals for any given texture by tying the mapping to another object like an empty, and moving/scaling it. There’s also a cheat way of killing tiling by plugging in the color output of a voronoi texture to the Z rotation of your repeating texture, sized roughly so that the cells are close to the same width as your ground texture. If for some reason you can still notice sharp cuts, distance mask a non-rotated version closer to the camera.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .