Landscape Displacement issue using Instance and Master materials

Hello everyone,
I’m struggling in try to set a good displacement material for my landscape but it doesn’t work properly. It doesn’t shows any effects based on map and it creates artifatcs. These are my settings

Your screenshots show almost nothing useful.

First, you need to have displacement on the material properly enabled. Probably with the adaptive option disabled.

Second, you need to create a way to increase the tessellation multiplier to the max (32 probably) based on distance of the camera (or character) to some point further out (10m or so) away from the character.

Third, you need to multiply the G (which is the Z) of the texture by a custom scalar. (you do show that)
You have this on the whole texture. I would isolate just the G channel and re-compose the texture (append).
Your scalar cannot be 1 to see results. 1x1 = 1 so the multiply node is useless. Start it off at 5. it resolved to a maximum height bump of 5cm.

Keep in mind that artifacts are present anyway depending on the tile size you chose for your map.

Also, Tessellation on the landscape is very expensive to render.

Displacement in Master Material is enabled and tessellation can be increased. Basically if I increase or decrease tessellation something happens in the landscape but it doesn’t sculpt the landscape based on texture.

It seems that it doesn’t follow the landscape coordinates

Basically I have

  • 2 material functions
  • 1 master material
  • 1 material instance

The master material blend the 2 functions and drive all the information to the material instance
Do you think it could be a problem for displacement?

These are my setup and this is what I get:

Anyone please?

the tessellation multiplier looks Ok-ish syntax wise, the values are however bad.
It should go from 0 - no need for a scalar - to 32, or a scalar.

From the wire-frame view, I would think that Adaptive is still checked within the material. It should have way less quads at a distance…

What you put into the displacement doesn’t really matter - it’s literally just a texture, multiplied (as I told you probably incorrectly) by a scalar that defines the height in world units.
Normally, you want the UVs of the displacement to match those of the material. I’m not sure what you are doing though, so you may not need that.

As a somewhat side note.
Extract your tessellation multiplier syntax, make it it’s own material function, and attach it to the end material without having to break material attributes.

As for the displacement. Normally, you just compose it within each different layer/material function with a standard scalar for the overall height. It hugely depends on what you need to do though. What I’m saying is that generally speaking having a specific function for the displacement makes little to no sense.

Thank you very much again man.
I’m gonna improve the shader quality, but why even using the same LandscapeCoordinates of the base and normal map, I get different tiling in case of Displacement?

Maybe the texture sample is set to a locked Mip ? or something similar to that, like the texture itself is not the same size?

Yes the Displacement texture is set to computed Mip Level… what should I change it to?

The default value is -1.
you can also delete the node and bring in another one to restore its defaults.

BTW, since i’m re-working my landscape to increase performance and include virtual texturing, figure I’d share this.


The formula is
World PS …
…- Distance - Divide 1000 (scalar of distance) - Power EXP of .5 (Blending) Clamp - LERP Alpha (32, 0).
Camera PS …/

The lerp is inverse, so I don’t have to 1- the texture.

Thanks man :slight_smile: I appreciate… just let me try.
At the moment I’m implementing a better Normal mapping in addition with Bump Offset to have a good looking effect with a minimum amount of resources.
But I still want to implement Displace that will be activated/deactivated in the material function

The problem is not about the tessellation multiplier but in the displacement.
I have imported the heightmap from the function but I only have a big bubble in the area instead that a proper displacement based on texture.