Achieving Realism in Open World Environments

Alireza Khajehali shared a couple of tricks he used to build an incredible natural environment, created in Unreal Engine 4.

Alireza Khajehali is a very talented 3d artist. His focus is creating open-world 3d environments. His Artstation page is full of deserts, misty mountains, and green grasslands. Most recently he shared some images of his new open world environment, which sort of remind us of the wild open steppe regions of Ukraine.

In this particular example, Alireza used some wonderful trees and explored his grass material. The scenes look very versatile and hold a bunch of great detail. The vegetation looks precise and almost photo-realistic. The biggest part of the scene is the incredible lighting and very real skybox. It feels like a photograph. We’ve talked with Alireza about this particular project and figured out how he managed to build this amazing scene.

Intro

One thing I need to point out first is that many people are disgusted when the shader complexity looks red or white, and they limit their art instead of unleashing it. UE4 allows you to see the shader complexity, and it’s a nice feature. But it’s designed to let you see the shader complexity. It’s not “Use the shader complexity view mode and remove what is red or white”. It’s not possible to have a bunch of grass and trees without having red or white in shader complexity view. Just right over the street is the Cryengine community. No one there is talking about shader complexity as much as the UE4 community members do because Cryengine doesn’t have a shader complexity view built in the UI and people have a piece of mind putting together dense forests and jungles. As long as it runs well. Right?

1 of 2

However, to my personal knowledge, in UE4 shadowing and overdraw cost more than normal when compared to another engine like Cryengine, and a lot of UE4 users will disagree, but it’s not a case of who thinks what.

How to make everything work faster?

  • Instead of having a lot of leaves cards on your tree, try to have as much less cards, but larger in size so you can have much more leaves on your cards which ends up filling the trees with much less tris.
  • When creating your leaves cards try to have as less empty space as possible, it’s fine to spend more tris on a card but reduse the transparent spaces because in the end overdraw costs more than trinagle count.
  • When using a directional light for an outdoor environment set the dynamic shadow cascades to 1. This will instantly release a lot of frames.

How to increase the overall quality of your outdoors?

  • Use DFAO with a min occlusion value around 0.15. In case 0.15 makes it too dark for you the problem is with your lighting and/or textures not being calibrated to PBR friendly values.
  • In case you’re using a billboard for your trees, try to tile a very rough and noisy normal map on it. At far, that noisy normal map on the billboard will break the flat look. (And don’t forget to increase the Opacity Mask Clip Value for the billboards too.
  • If you have noticed, usually your foliages look not so well when you’re not close to them. And that’s because of the MIP mapping. What happens is that when the texture is mipmapped you lose the full resolution and thus your alpha or opacity is blurred. That little blur results in losing all those tiny while holes and lines and therefore you don’t get to see anything from behind the mesh. This can be solved by increasing the Opacity Mask Clip Value. As you can see in my pictures the trees look very noisy, full of holes, you can easily see the sky behind the leaves and that’s what makes it look realistic.
  • Set your SSAO intensity to 1, Quality to 100, Fade out Distance to maximum.
  • Check “Generate Distance Field as if TwoSided” on your foliage meshes and their LODs. This will leave fewer artifacts in DFAO generated on your meshes.
  • Increase your normal map strength on grasses/leaves a lot! This will make your flat planes look directional. Plug the normal map to the A pin of a Multiply node, plug a 3Vector into the B pin, set the 3Vector values to 1,1,0.2 and that should do it.
Additionally, the pictures in this article are WIP images from Our Ghosts of War, a WW2 survival game that we’ve been working on since last year, and I think we’ll have a lot of good news soon! You can follow the progress here. There are tons of other things I’d like to share but I’m really busy and running out of time here for now. Might have another chance in the future again to share more. Thank you for reading, and thanks to Kirill Tokarev and 80.lv. Also special thanks to Quixel for Megascans, one of the main pillars for the environments of our game.

If you have more questions, make sure to check out our interview with Alireza Khajehali over here.

Join discussion

Comments 3

  • Bassam 83

    Tho I didn't actually test the method but I'm pretty sure it's very helpful , and by the way your work is fantastic , thanks for sharing the tips , gonna love your game when it's on , great work .

    0

    Bassam 83

    ·7 years ago·
  • Anonymous user

    Sure thing, go ahead. Remember to share the Chinese link. And link 80.lv in your publication.

    0

    Anonymous user

    ·7 years ago·
  • Noah Zuo

    Hi Alireza, I want to translate this article into Chinese. Can I have your permission please?

    0

    Noah Zuo

    ·7 years ago·

You might also like

We need your consent

We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more