For a game that depends heavily on transparent effects (liquids, fluids, gels, water and even glass) it’s downright impossible to work with Unreal Engine 4.
The fact that the transparent materials are not fully integrated on the pipeline makes it a nightmare to attempt to do anything with them, especially since reflection and lighting control on them is very poor. It’s a deal-breaker for me.
Even things like good water materials are easier to make with UDK. Dealing with semi-transparent effects like depth-based shores is easier in every other single engine out there, including UE3.
I find bizarre that there isn’t more feedback from Epic on this issue. It’s especially weird since for many of the pre-PBR years improving water effects was the Gold Rush of the Triple-A engines. Now we can’t even make a simple transparent material without a lot of backface Z-fighting.
The issues is that there is hardly any forward rendering path to properly render translucent materials.
All deferred renderers have big problems with transparency sorting (in general just rendering it properly).
I wouldn’t expect any big improvements in that area until it will be decided whether it will be best to try to bend deferred rendering to render transparency, implement separate rendering path for forward rendering, or completely moving toward forward rendering.
It’s though choice to decided which option is better as all of them have prons and cons.
Hey guys, graphics programmer from Epic here. Which aspects of translucency specifically are you talking about? I know of quite a few problems so I want to make sure I know which are the most important to you. Screenshots are appreciated.
It sounds like water is a main use case, is it the lack of planar reflections that is the biggest problem?
You can make translucent materials fade out when they intersect opaque with a DepthFade node.
I’m not sure what this means, translucency doesn’t write to the depth buffer and therefore does not z-fight.
All engine have problems with transparent object. Unreal Engine 4 uses Tiled Deferred Rendering.
The only way to have transparency in it is to use a hack and give bad result.
The other and only one solution who works good and they use it surely is to have two render path : Deferred + Forward.
Now the question is : “Unreal uses order independent or uses sort to draw transparent ?”
Intel worked last years on improving OIT (Order-Independent Transparency) :
I can tell of two issues (which are related to each other I think):
Transparent surfaces can not be 100% opaque. Even if it set to black, there is still leaking on surfaces that are behind it. It is supper annoying especially for decals and when I tried to make some foliage using transparency.
This leads to sorting issues. Since there can not be 100% opaque translucent surface, when you stack some of them one after another it all melds into chunk of mess.
The last post explains the current issue with transparent materials. Ideally a 100% opaque material using the transparent pipeline should be completely indistinguishable from a material using the opaque pipeline. This is probably impossible, but it’s a good guideline - the further away the final result is from the opaque shader, the worse the implementation. Right now if you make a 100% opaque material it looks really awkward. Polygons that should be behind sometimes appear in the front, etc. It looks like it’s z-fighting with itself.
The issue with reflections is not just planar reflections. Right now the transparent shader looks completely alien and out-of-place. There are lots of semi-transparent objects which are undoable in UE4, if anything because they look outlandish when stripped away from the main rendering pipeline. A generic glass of water with refraction can fool someone by using a simple specular, but a gelatinous mass can’t - it’s either 100% opaque and being affected by the proper environment lighting, or semi-transparent and really weird-looking.
Yes, but I get a flat, weird-looking water then. It’s either that or using the opaque water from the Mobile demo.
I read you guys got creative with the water in the Cave demo by using multiple planes but, alas, it’s not available.
I think my water looks pretty kick (BLEEP). But because my graphic card is slightly outdated and doesn’t support tessellation, I cant get the actual wavy look.
I basically took the default water that comes with example. tweeked it and added in several more parts.
Basically I just created two separate textures, one had a low level panner and the main one had a rotate option with a timer and a sine for maximum control and then I lerped it into emissive.
It shows up on dx11 cards like actual baby Caribbean waves. Non dx11 looks kind of cool 2d texture.
So after looking at the Effects Cave I realize there’s really no way to achieve good transparent materials. For the water, there are two separate planes and the reflection sits on ground level. It’s not practical, especially for non-planar surfaces. That’s a pity. Hope you guys manage to implement it someday. As for now, unfortunately, Unreal Engine isn’t for me.
Yes, this is a real problem. Take hair for example. If I use masked, the material looks fairly good… except the ugly edges of course. But if I switch the very same material to translucent, all the beautiful shading gets lost and the z-sorting seems to bug out:
It is a serious flaw in an otherwise stunning engine.
This is exactly something I found out when making some leaf textures. I want to be able to use semi transparent alpha’s (ie values between 0 and 1) to fade materials. I don’t want to use a masked material exactly because of the colour edges. Please check the images in my answer hub link below for examples.
Is this something epic could please comment on? If It’s to do with deferred rendering then please let us know that this is the reason. So far the answers have been “use masked material”. That was the response here for my answer hub question…
I think it would be a safe assumption that users would like semi-opaque materials with correct sorting order for pixels. (I dont like the term translucent and its confusing with the translucency in other 3d packages which is a light bleeding effect).
Hey guys am done screaming about this, it will be done when done.
Its just sad that a “next gen” engine is missing something so important, and it makes me sort of frustraited.
BUT there are some small things we can do.
I posted a qustion about Forward shading support (translucency, more shading models) for todays stream lets hope they answer it.
But for now everyone vote, i think thats the best way we let Epic know how bad we need this. Edit: No plans for Forward shading support (translucency, more shading models).
as of yet.
We just have to wait guys
Hi! I messed around with two overlapping meshes with a translucent material on them, trying to figure out if it’s possible to somehow make them stop pop in and out depending on the camera angle and distance. In my case it’s not important which one actually renders in front of the other as long as the view order is the same all the time. If I set the FOV on the camera to 5 (the lowest setting), almost orthographical, it actually works and the two meshes renders the same way in any camera distance or angle. Now, I don’t really understand all the technical stuff about the renderer and how it works, or why this is such a huge problem, but is it not possible to just set a static order of which mesh renders in front and just make it render the same order all the time so that it doesn’t pop, because in my case anyway, as I said, the order doesn’t matter, the actual popping is the main issue.
Pardon me if this question is as dumb as it potentially can be.
Has there been any progress made on this issue in 4.6 or 4.7? I am having the exact same problem with grass which uses shaders and leaves right now. I am going to switch over to masked materials if I can but this is only because using translucency produces unacceptable results. Picture one is the grass from above. Picture 2 is the perfect angle where z-fighting is eliminated. Picture 3 is indicative of all other angels. (My browser won’t let me upload the pictures to this site here are the links):
I have to make scene for 2D platformer that is full of 2D layers. Of course, layers have semi-transparent borders and need translucent material. Which makes DoF shader not working. So I need pre-blur layers in photoshop. Also because translucent material have problem with semitransparent pixels, I have to export from every PSD edited TGA file (described here - http://youtu.be/oh2WGL8hvPo) which consuming even more time to make edits and re-import exported TGA.
There must be a easier way how export semi-transparent textures (and make it compatible with DoF), right?