Water Material. How long will all that bad? And what to do?

Why is worse than the previous generation?

1.No full-screen reflections like UE3 Image Based Reflections. Only SSR (terrible artifacts!).

2.No distortion like UE3. The Refraction can not be used for water plane (terrible artifacts!).

3.Custom distortion is not working with light, only the base color buffer(terrible artifacts!).

4.No underwater fog. Only the depth test in the shader (terrible artifacts with distortion!).

How long will all that bad?
What to do?
Epic this questions to you.

screen shot?

1.No full-screen reflections like UE3 Image Based Reflections. Only SSR (terrible artifacts!).
Its the most advanced technique for dynamic reflections there is, the old one does not work anymore since new effects.

2.No distortion like UE3. The Refraction can not be used for water plane (terrible artifacts!).
Thats up to the artist i have pretty nice waterdistortion…

3.Custom distortion is not working with light, only the base color buffer(terrible artifacts!).

4.No underwater fog. Only the depth test in the shader (terrible artifacts with distortion!).
You can define it on your very own special way, but you have to work for it.

Ue4 is not suitable for people who dont want to learn… are you such person?

It hurts. I have over five years of experience with UE and CE .
Before writing this post I have a few months experimenting with water shader.
I thoroughly studied the documentation and examples that could be found.
Do not be skeptical.

Yes it is. But it is not suitable for water plane
Here is an example

So refractive operate at large distances and sharp angles
It is horrible

In the example from Epic in the Marketplace “Water planes” in the material “Transparent Water” for distortion effect
is sent to the slot Base Color distorted Base Color buffer (SceneTexture:BaseColor)

Light under the water is impossible!

Only on the surface lighting

No it’s because the system is not thought to realistic water
Discover the things in CryENGINE for rendering water.
Underwater mist as it is a single fog is very useful.
Do not need any Post Process under water. The natural depth and lighting

Epic I still want to hear the solution from you.

Let me guess: You don’t have any reflection capture actors on your map?

That i couldnt know? But still i dont think you got it…

You dont even have tried to search the community forums or?
I just give you this and you look at your arguments again.

Of course I have reflection capture actors on my map.
But transparent materials work with only one.
According to this only the sky is reflected there. Mountains, trees, buildings, etc. so will not reflect.
Otherwise, they will be reflected where they do not.

Thank you for trying…
Project Ocean was studied me a few months ago.
All that I have written above applies to him, too.
Other users wrote about this

**Believe me, the solution to this problem is not at the level of users.
Epic knows about it.
With such problems faced and developers The Vanishing of Ethan Carter Redux. Their programmer rewrote the rendering modules for the project.
It is only necessary to modify the code for the rendering engine.

The reflection capture nodes work just fine with translucent surfaces on my end.

More than one reflection capture actors?
You can make a screenshot?

Refraction works mostly fine. I personally use scene color node but there is nothing wrong with refraction and built in post process ones.
Water reflections really could use plane reflections. SSR just isn’t enough for big water surfaces. Single sphere capture isn’t also very good. Transparent shading is bit off but almost good enough for surface. Volumetric lighting is something that you need to implement yourself which is rather messy because you don’t have all the information available at material pass. Lights under water are doable but not super easy problem to solve.

But in any case such a negative attitude will not help you anywhere. I know it can be frustrating sometimes.

My apologies if I seemed rude.
English is not my native language.
I think you already noticed this)

I just want to draw the attention of the developers on this problem.
Solve this question will be possible only when the Epic Games will do a few things in the engine

  1. The specific render reflections for large flat surfaces

  2. The ability to change the refraction in the distortion(like UE3)

  3. The specific fog for water**

1 - There are no Planar Reflections in the Engine right now, so the way to do that (if you want to avoid SSR), is use the Scene Capture 2D and a texture target in your material. Just like Planar Reflections, this requires rendering the entire scene twice, which is more expensive in the new renderer.

2 - Refraction is more accurate than distortion but it works completely differently. I would suggest looking at the example water materials on the ‘Learn’ tab of the Launcher already to get some idea. It doesn’t work the same way as distortion, and AFAIK, there are no plans to bring the old distortion method back.

3 - Adding Fog to water is done using many different methods and just like UE3, it’s done as part of your material shader. You’ll have to look up different methods for doing it. One of the most common is using the scene depth to change the colour of water and the scene behind it. If you’re talking about underwater fog, then one of the best methods is to create a series of volumetric planes to simulate godrays, or write your own volumetric fog volume. Again, look at the content examples on the Learn tab of the launcher.

In RAGE(GTA V Engine),CryENGINE and Illusion Engine(Mafia 2)
for water reflections rendered a simplified version of the scene. And performance is slightly affected.
So I do not think that this option is unrealizable.

Refraction currently work well for small objects, where it is difficult to notice the deception. But if we put the ship on the water… So with certain distances we obtain the two ships. First where there should be and the second underwater. Very realistic, try)

I had studied these materials. And I made some improvements to them in recent months.
They have the same problems of course.

How are things going in the engine I know.
I’ve experimented with materials, test the depth, etc. I did more than 20 implementations of water.
There will be helped only programming new modules as is done in other engines.
If someone doubts, let him try to implement it in the engine. I’ll be very grateful.

Thank you for acknowledging that this is a problem. As a result of deferred rendering, the methods for simply capturing a reflected environment are much more difficult than before. Second, no specular highlights really SUCK. You can, if you want to, use per-pixel lighting and forward shading to get that nice specularity, or custom-build a simple phong shader in the material and attach it via Material Parameter Collection to a light vector BP: no shadows, but it is incredibly fast to render.

A lot of what makes for great opaque rendering makes for very bad, very very bad water rendering, but there are ways to work around it and make something that looks nice, even if it’s not perfect:

1 - Get some specular highlights in there! Either use the forward shading path and per-pixel lighting, or if you want to save on expense, use a GGX or Phong specular model w/custom light vector for the highlights on the ocean waves. It won’t cut out with shadows, so be wary of that. It’s cheap, and looks very good.
2 - Forget the reflection and look at what else you have to work with: normals, colors, and opacity. Make sure the normals work, make the colors pop, and use your own fancy techniques for messing with the opacity. I used an Assassin’s Creed III document on water that suggested color and opacity ramps, and making the water less opaque based on the light source and normals can really sell the idea that it has subsurface scattering. Using scene depth and depth-based, or distance-to-surface techniques to ramp the water’s color and opacity can really do a lot to sell the fact that it’s water.
3 - Depth-based coloring on surfaces underneath the water. Super Mario Sunshine used vertex painting to color things under the water as being very, VERY cerulean, and half of the reason the water looked beautiful is actually because of that: the colors just popped. If you were on top of the water, you knew how everything was underwater because everything turned blue. Don’t underestimate this effect, lightmass is terrible for projecting translucent rendering, so if you want a blue ocean, you need to make it blue down there as well.

The goal is not to model the water perfectly, the goal is to get a result that looks beautiful. If there’s something in the real world that you can do easily in a game, great! Do that! If not, then try to strike the right balance between what is physically correct and what looks good. Here is a water shader I’m working on currently. It’s not the best, but at 194 instructions with color and opacity depth techniques, sky reflection, refraction, panning normals, a basic custom subsurface, and Phong specularity, I really can’t complain. It looks good:


I tweaked the Epic water plane to make a foamy ocean. Looks decent imo. Litterally just tweaked values.

My pool water is reflecting what’s not visible directly on my screen. iirc I used a rendertargetcube blended with the water material.

I found this ocean on YouTube that is looking very good to me.

you could even give nvidia waveworks a try :

I’ve been working on a planar reflection system for things like water, combine it with the above and a decent material and you should get pretty close if not the same as the cryengine example - Didnt have access to my WaveWorks code, so just chucked together a quick panning normal example to show the reflections:

I kinda have to agree with the OP

Planar reflections are such a basic engine feature… from engines in the 2000’s
Planar reflections are much better than a SceneCapture2D because the method is much more efficient deciding what it needs to render and what it doesn’t (the view is similar to the player view, the plane culls everything under it)
I don’t quite get how you’d place the SceneCapture2D either. from what position and oriented how?

the problem with UE4’s refraction is, it just takes the rendered scene and scales it down in screenspace based on how much the IOR is different from 1. the effect of this is that the refractions in the middle of the screen look way different than those on the edge of the screen. if you use a high enough IOR and have the object on the edge of the screen you can even see the rendered scene’s texture edges. that was probably my fault for straying too much from real IOR values, but still the method isn’t actually good.
simply put, the method they used for refractions is cheap and it results in looking cheap in some situations. it’s just glorified distortion (but all the “glory” is the mapping of the distortion amount to the real-life IOR values).

the thing with underwater fog is not just the godrays, it’s the actual fog (see his posted CE screenshot, there’s this thick green fog). In UE4 there’s only AtmosphericFog and ExponentialHeightfog but gone are the fog volumes from UE3. “writing your own volumetric fog volume” seems again… like a missing basic engine feature from the 2000’s.
In UE4 if you have an island with a constant sea level you can put an ExponentialHeightFog with a very high HeightFalloff. But having a lake on high ground or just a swimming pool? in that case you have to resort to hacks or strange workarounds (best one IMO would probably be a postprocess volume with the fog in a Blendable)

The specular only does so much but a good water needs good reflections. and using a custom light means your water only has ‘highlights’ from one light source… in an engine where lights are next to free performance-wise.
how do you use the forward shading path anyway?

beautiful is subjective but what isn’t subjective is realism. your water looks nice but it’s far from a realistic-looking water. it can work in a cartoony or stylish game but in a realistic game it’s lacking some things, the things the OP is mentioning

for me the striking thing is, one can create better and more realistic water in UDK, the very own predecessor of UE4 :eek:

It is interesting looks. This only works with WaveWorks?
What are the limitations of the method? Is there any video?

HL2 2004(!!!) 12 years ago

It works with any surface, its just a new type of scene capture. So much like the HL2 screenshot above. Main limitation will be primarily performance, as its capturing the scene, it does use a plane of reference to ensure that it doesn’t render objects under the surface, so can help a little. But combine it with the black list in a scene capture component, or my white list, and u can choose which objects should and shouldn’t render.

No video at this time, as I am still working on it, does produce some errors at this time.

Good news! What will be distributed? When the release? Marketplace, what approximate price?