Virtual Heightfield Mesh in spherical static mesh

Hello, I’m really new to all this virtual texture volumes, heightfield meshes and what not. I’ve been designing a procedural planet generator that was supposed to use displacement to generate bumps, but in UE5 displacement is not supported. My setup was going to be simple, a material that generated noise, and displacement that made height out of the noise. I’ve read that Heightfield meshes were supposed to replace displacement, but I’m not able to actually displace a sphere, it’s all a mess.

Any known ways to displace a sphere with Heightfield meshes? What am I doing wrong? Is this impossible achieve?

You probably need to do reading about heightfields and noise. Why did you use an Add to add the voronoi to the Lerp’ed voronoi and simplex noise? It would seem that wouldn’t produce a correct heightfield result because it’s like generating noise within noise, this case being voronoi (cel shapes) within voronoi or on top of voronoi. You probably need to specify for the Material Editor the axes to generate the noise, then vectors for the heightfield displacing. Otherwise, it has no information to process how to build noise into 3D bumpiness from the sphere mesh.

Sorry, I completely forgot to add an updated image of the nodes, I only showed the noise generation. I add 2 noise values to have terrain bumps with Voronoi and detailing with simplex. If you could point me to somewhere to read about heightfield mesh manipulation I’d appreciate it, cause I can’t seem to find good documentation on it.

Again, sorry for the misunderstanding. Am I on the right path at least? This gives me the result in my post above.

I see you are using AbsoluteWorldPosition, and masking its Z (blue) channel. The issue I see with it is it’s only projecting, or displacing to use the more accurate term, on the Z axis. Hence, your sphere’s geometry is getting displaced vertically only. It’s not displacing on X and Y axes too, which would allow angular and even can allow rotational displacing. It may also be plugging into the Base Color main node is yielding a flat result because you are not yet providing it with the displaced data. Typically, displacement uses the World Position Offset node (under Tangent) or World Displacement (above Tesselation Multiplier), and utilizes Tesselation. There’s settings for Tesselation in the general material options which display when nothing is selected in the material graph. But tesselation is for enhancing / modifying the displacement result.

Look at a few Youtube videos that have instructions on how to design the material. I’ll watch too, and try and help when I can.

Thanks for the quick reply. I looked into displacing like in any other 3d software, I come from blender so I have a good understanding about displacement and tessellation. In Unreal Engine 5 I can’t tessellate or displace, as they are deprecated, and they replaced displacement with Heightfield meshes. You’re right about the absolute world position, I am masking the Z value and it’s wrong because I only get height information to the top of the surface, but when I don’t mask any value, and leave it as is, I get this shape:

I’m honestly lost and in desperate need of displacement back! Or at least a really good tutorial on how to replicate displacement with Virtual Textures and Meshes

Are you attached to using UE5, or really want to? UE 4.27.2 has tesselation and displacement, and there’s more in the docs on those than there is for VT and heightfield meshes in UE5 from what I found.

The new result, without mask of any channels, looks like it’s ‘displacing’ on every axis with a static value (rather than the noise that’s plugged in for the material). It’s like telling the editor: “move the geometry up (Z) by 1 or whatever amount, then on X by the same, and on Y by the same amount”. So it blends into the shape you got for the result, which is almost 1/8 of a sphere (top half of one). Did you watch 1 or 2 of those tutorials yet?

I’m giving a shot in UE5 for it’s new Nanite features and dynamic GI with low performance cost, it suits my project and my art style. I have watched a lot of the tutorials in YouTube already, many are selling plugins and some actually have valuable information. A very useful one I found was this one. I see what you say, what would you suggest I do to work around it? Maybe I’m just facing a problem with no solution, from my testing, seems like Heightfield meshes don’t actually create displacement to the mesh itself, it looks like it creates a plane and overlays it on top.

It’s not particularly well suited for this. VHM is 2D, it’s intended to be an alternative to landscapes, not spherical planet generation.

You could wrap it into a sphere but it’s going to be a lot more complicated, and it will have no collision.

My understanding of heightfield meshes so far is they’re a reference plane to get the displacing of the actual landscape or other mesh (separate from the heightfield mesh) performed however accurately you have it set based on various settings. It’s an overlay that can be increased or decreased in resolution and scale (using LODs too) so you can get higher numbers of vertices closer to the camera / player and lower vertices further for performance. If it’s a low poly game, it could also use lower vertices closer to the view camera or player. I don’t know how it would work on a planet level because there’s other aspects to it than merely putting a heightfield mesh on the landscape. There’s also the world origin and how that’s different for creating planets and their landscapes.

Yea I see now, still seems so weird to me that they would remove displacement, I know now you can have higher poly count meshes inside, but it doesn’t help for procedural systems like this one. Either way thank you for the insight.

Works perfectly fine on landscapes too. Thanks to both of you guys for the help. As a last question, any other way to do displacements in UE5 that you guys know about? Or any better way to generate planets? Again, thanks for the quick replies!

If I didn’t need it to change at runtime I would just generate it in houdini/blender and just import it as a Nanite mesh.

Otherwise I would probably look into Shaderworld as it seems like it was designed specifically for this.