Displacement Map is too spiky!

I got wood planks for my unreal project. I am using a heightmap to make the wood planks pop out. It looks great in Bitmap 2 Material preview but when I see it in Unreal Engine 4, it looks very jagged and spiky. I turned up the tessellation multiplier and it doesn’t change after using the value 2.0. What do I do? Check out the screenshots.

58003-material_inst_settings.jpg

Hello oblivion2500,

From your screenshots and description the displacement is very jagged and intense. You may want to consider plugging your displacement directly in and see if that solves the issue. You could also try decreasing the intensity of your distance.

Essentially you are multiplying the texture sample by ten and then multiplying it again by a World Space vertex normal. My suspicion is that your material being intensified to such a degree that the result is becoming distorted.

I tried directly plugging in my displacement. It didn’t help me with the issue. I also tried decreasing the intensity as well. Any other solutions?

How many polygons does that floor mesh have? For that kind of a displacement you’ll need a pretty high amount of tessellation in the mesh itself since material tessellation would probably not be enough and cause that kind of jagged displacement.

Hello oblivion2500,

Decreasing your distance and your tessellation multiplier should help the intensity of what you are seeing. Your values are extreme.

We tested a project using the same settings you have linked in your screenshot and I was able to reproduce your issue. If you create a new material and just set up your grey texture sample without whatever you have feeding into it, and scale the values of your world displacement and tessellation multiplier, you should see a drastic change.

World displacement should not exceed much past 2, and your tessellation multiplier not much past 1.

I cannot see what else you have that is influencing this, but that is where the issue lies. At a tessellation of four the tessellation is so dense you quite literally cannot see any space between vertices. In the material properties you can enable the viewing of the wireframe to see what I mean.

Thanks,

When I put the displacement height down to 2 and tessellation to 1 or 2. It looks a lot less intense, although, it looks unnoticeable compared to without the height map and just using the normal map. It doesn’t look anything like the B2M preview.

I have tried turning up the tessellation multiplier to a 100 and it’s doesn’t change anything, anything past 2.0 for tessellation multiplier. It doesn’t look any different. The number of polygons my plane has is 48 triangles.

Hello Oblivion2500,

Adding a displacement to a normal can also cause some issue when adding other variables. Intensity through multiplication of your displacement typically does the trick.

I would go back to B2M and make sure your workflow is sound. Also check the intensities of what you have created there. Then work from there to UE4 and make sure there isn’t something that could cause this outside of the settings in your material in UE4.

I know B2M says everything is compatible with UE4 and that there is a workflow created for PBR pipelines. However, they suggest using the Substance plugin and using a certain method for this workflow.

The algorithms for how B2M creates it’s rendering and their node system is completely different from how UE4 handles it’s deferred rendering system.

If after this you are still having a problem then please post again.

I have just tried using the B2M material workflow for UE4 using the substance plugin. It looks better but still weird looking (looks similar as before).

Hello oblivion2500,

The only thing I can think to do now is try and test your materials and textures on my end.

If you are willing to send me a test project with exactly the same textures and materials you have used to create the jagged lines, I will attempt to recreate this issue on my end.

For that I will need your .uproject file, and your content and config folders. Only these folders are necessary as UE4 will write the files for all of the others when I open a new project.

Please let me know if you would like me to investigate this further.

Here’s the shared OneDrive link to my .zip of my test project. I copied the material from my main project and textures as well. One thing I notice about the test project is that it looks better, I’m using a different geometry plane. It’s still spiky, I wonder if it has to do with the geometry of the mesh. The tessellation algorithm could be very picky with certain geometry and the typology of the mesh. Any way, any help or new tips you find from checking out my project would be great. I will be deleting the project link from OneDrive to protect copyright of my project.

OneDrive UE4 project Heightmaps DOWNLOAD

Hello Oblivion,

If you would please upload this to dropbox. So that I do not have to sign up for One Drive.

Sorry, probably should have mentioned that earlier.

Thanks,

Here you go:
DOWNLOAD

Hello Oblivion2500,

I have downloaded your project and in the process of diagnosing this issue. I can certainly see the spikiness on your floor when adjusting the values for tessellation and world displacement.

The displacement is working. Displacement acts as a whole displacement for your entire Material. Whatever that material is applied to it will displace the whole thing, not just the individual planks.

What I suspect is happening is that at a certain level of tessellation/displacement your UV’s are becoming stretched. This is expected behavior as well. What happens is there are ways of hiding the tessellation at distances through distance fades and such. You will notice that the jaggedness is only noticeable at high values at extreme angles.

I will continue to investigate this issue further. A temporary work around would be to use geometry or intense normal mapping or both to find a solution.

Thank you,

Okay, first off, thanks for the help you have been putting into this. Second, here’s a download link for the plane geometry that I am using for my main project, it’s just a simple plane with a Y-facing UV map.
Wood Plank Plane Geo DOWNLOAD

I got a question on displacement vs added geometry. Which is more of a performance hit? Heightmap/Displacement/Tessellation or added real geometry of the model? Will this matter too much with Directx 12? What if my plane has 500 triangles or 1000 triangles and I just make it look like wood planks. Then I have say 500 of them in one scene or area. Will that be more of a performance hit than using heightmaps/displacement w/ Distance Based Tessellation?

Hello oblivion,

In the gen1 consoles like the xbox and playstation 2, polygon count was an issue because of the processing power these machines had.

What is more heavily intense on your system is Draw Calls and not poly count. Now, obviously, if you have a 10 million poly object in your scene your performance will take a hit.

However, you can create a plank with 6 polys and a normal map.

However, before you do that. If you would like to look into this POM material - Rendering - Epic Developer Community Forums.

It deals with Parallax Occlusion masking. This essentially is a more complex method to achieve what you are trying to do. It is some fairly advanced stuff so don’t fee bad if it’s above you. To be honest it’s a bit above me.

Hope this helps,

I see, so for example, having 50 trees with the same material is less intense than having 50 trees with 10 different materials. That’s kinda of the purpose of material instance, to reduce draw calls.

Yes, the parallax occlusion masking from that forum is very complex and doesn’t really show you how it’s set up and done.I know how to do basic parallax occlusion in the material editor but that kind of quality parallax occlusion is way over the top. Looks very nice though.

Hello Oblivion,

Yes, fifty trees with the same material would be less intense than having 50 trees with 10 a piece. Especially if you are using the foliage system. The foliage system is drawn as one system. Although it is made up of many parts all of the foliage associated with that is considered one entity.

The one material would be called once, and arrayed across all of the trees. Where as the ten different materials would be called and then arrayed.

At a point, geometry must be used if certain complex methods are not utilized.

where do you get those settings. I cannot find any distance parameter, any wave parameters whatsoever in my material details settings?

Not enough polygons on your floor. U need to subdivide your mesh.