Thanks for sharing and detailed production breakdown
i thought there wouldnt be anything better than akeytsu for creating easy animations. im happy if i am proven wrong.
Keith, I just wanted to stop by and say: Thank you.
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.
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?
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.