HDRP Water Floating Origin?

Hi all, what is the best way to handle large scenes with HDRP built-in water? I have a project where the intent is to go large scale but I am encountering a few issues so far.

Around the origin, the water renders as you would expect. The further away from the origin (beginning around 900-1000 units away), it seems the worse the rendering quality of the water becomes.

In descending order, the ship at (0, 0, 0), (0, 0, 1000), and (0, 0, 5000):

I thought that floating origin could solve this, and indeed it helps, but that creates a new issue. When the ship’s position is recentered, the geometry (texture? position?) of the water changes:
dd2d96bc5c9219415e28773363c7afc2
I believe this is due to HDRP water simulation happening in a space relative to the camera? I have tried quickly disabling and re-enabling the water surface, not moving the camera and instead moving everything else under one root node, and fading in-and-out between different water surfaces but nothing so far has helped.

Is this just a limitation of the built-in HDRP water? If so, does anyone know of an alternative solution? (I have seen Crest 5 and its Shifting Origin extension although I am hesitant to spend that kind of money on a hobby project that in all likelihood will never be finished…) Thanks.

What you usually do is move/simulate the water while the boat stays at the origin, faking movement. Not sure if HDRP water supports that however

Unfortunately that would just lead back to the inverse of problem 1; where now instead of the ship’s position being far away from the water surface origin, the water surface’s position would be far away from the origin. In both cases the rendering quality of the water suffers greatly. Thank you for offering some advice, though.

You don’t actually move the water, you use the shader or system so it just scrolls the water past

Ahh thank you I see what you’re saying. Although I think HDRP water is too ‘smart’ to fake it like that. The waves, normals, buoyancy, foam, etc are all tied to world space. Might start looking at building a custom solution

I believe this is difficult to solve easily. Particularly since the water is made out of several dozens of individual waves, each at a different wave length (eg. 64, 48, 32, 24, 16). They’d have to be shifted by the distance of that wave length in order to move without a noticeable jump.

If you can, set the threshold at which you perform the origin shift to some distance that’s a power-of-two value (such as 1024). If all the wave lengths are also a power-of-two value that would do the trick.

Hey, sorry about that, I just checked and indeed, it appears there was a regression about that recently.

Issue Tracker Link

It’s totally not supposed to behave like that and moving in world space (even relatively far) is not a limitations of HDRP Water system. I’ll log something on our side and see what’s possible.
I’ve already identified the culprit PR on our side, so if that helps, the issue regressed starting :

  • 6000.3.0a1
  • 6000.2.0b5
  • 6000.1.7f1
  • 6000.0.51f1

anything before that should be fine.

I can confirm never running into this (or any other water rendering weirdness) up to +/-10,000 units from origin on earlier 6000.0 releases

Reverting to 6000.0.33 fixes it! Thanks a lot for the help.

While this is being fixed, if anyone’s want to revert it locally, this is what caused the regression.

hey, btw, this has been fixed and you can follow in which version on this link !

How would you do that? I have notices setting heading and water speed is not reliable for this.

What we would need is a way to shift the simulation or have a simulation offset perhaps.

HDRP Water in it’s current state appears completly unusable, because we cannot :shift: the simulation itself without moving a transform

  • EG: use current to simulatte movement
    • we cannot manually say ( apply this much offset to current immedietly ) - which could be a fast forward in a direction technically in the water current sim without needing to store a global offset.

It also appears unusable if we try to use current, as changing the heading causes the water to rotate around some arbitray point far away, instead of near origin, which is weird shifting current direction causes water do doe a very weird thing with waves )

Has anyone found a solution to this yet?

Is there any way to use floating origin with HDRP water without noticable jumps? I am using it in the real scale planet rendering and custom meshes. Because of huge scales I need to keep spacecrafts in the center of scene and I need to constantly shift water and other world around. I’ve tried to shirt water at repetition size steps but still no luck.