This is great. Keeping UVs at 90 degrees never occurred to me but it makes so much sense it seems obvious in retrospect
Unless I'm mistaken, this is how Shadow of the Colossus handles the fur on the Colossi
Awesome breakdown Simon!
Environment artist and level designer Ben Burkart has recently published a beautiful software product Eternity Benchmark. This is a nice little natural environment with mountains, roads, bridges, planes and incredible vegetation. You can actually download it and try it out for yourself. In this article Ben talks about the creation of this project and the software he used to build it.
About Eternity Benchmark
Eternity Benchmark started out as a personal challenge to myself to finish an enormous open world environment in 2 days time, which you can find the video for here. It was also right after Epic Games had released a very important update that allowed hundreds of thousands of foliage meshes in a level without drastically hurting performance. I wanted to try and literally “break” Unreal and see how far I could actually push that within that two days.
After initially finishing this 2 day challenge I was intrigued by how easily Unreal Engine 4 handled such an environment and I began to wonder how much better and further I could push things so I began improving upon the initial design which eventually became the Eternity Benchmark that was released to the public. I decided to turn it into an actual benchmark because it would be a fun way for me to release this project to the public for free.
Creating Open Environments
Any time I am creating environments like this I always want to create a place of beauty as well as a place I would love to personally visit or even often times live. I had only a few things I really wanted to push from the start and that was vast open worlds with a maximum of foliage, lots of atmosphere, and I wanted it to feel very natural. I had never created an environment nearly to this scale so there was a considerable amount of learning that went along with it, but that is half of the fun!
When building large open worlds having correctly made assets goes a long ways. I used SpeedTree for all of the trees, most of the shrubs, and bushes which all have proper LODs setup. Also most of the actual meshes I used had proper LODs created for them. With these assets I first set out to find the sweet spot when it comes to how far I could push things visually.
Once I found that sweet spot I could have potentially created an environment such as this that went on infinitely while maintaining a decent frame rate. It mostly comes down to finding a balance between how much foliage is on screen, when they LOD out and when they actually stop rendering at a distance.
Finding this sweet spot also allowed me to keep a very steady FPS throughout most of the map no matter how close to the ground the camera is or how high up in the air the player could get. I wanted people to have 100% free rein in this world and I wanted them to be able to fly up as high as they wanted so it needed to look just as good and run just as good when they were 5000 feet as it did when they were 5 feet from the ground.
The project ended up being nearly 20GB worth of uncooked content, 90% of which was foliage. The entire environment outside of the actual landscape was built using modular meshes. None of the foliage, from the trees down to the smaller grass meshes were placed procedurally. Everything was placed manually using the foliage tool to take advantage of UE4s foliage optimizations with drawcalls including most of the rock piles.
For the lighting I used 100% dynamic lighting as well as 100% dynamic Global Illumination. I did not get full day and night cycles in unfortunately but keeping the time of day the same at all times allowed me to push a really atmospheric morning time with lots of fog. Although I generally enjoy having full control over lighting and having 100% dynamic lighting takes away from most of the ability to add point lights and control things more specifically, the lighting came down to finding a little bit of a middle ground that looked good in bright areas as well as dark areas. Unreal Engine 4’s automatic Light Adaption settings helped with this quite a bit!
The mountains were actually one of the easiest things to pull off correctly, it is more the connection from the main level area to the background that was a little more tricky to pull off. I bought the actual mountain meshes on the Unreal Marketplace and just positioned them around the outer edges of the world, making them scale a bit larger the further out they got, eventually leading up to the snowy mountains in the distance.
After placing these surrounding meshes I also brought up the terrain all around the level to match up a bit more naturally/realistically and to really bring it all together I painted several thousand pine trees around the level to really connect the background to the main level, cover up the seams between the two, and to really make the level feel as though it is a part of a much larger world. One of the largest things I see newer level designers/ artists do is neglect the backgrounds and this will often times leave their levels feeling more like a small arena than an actual part of a larger world. I also spent some time on the shaders to really tone down most of the major detail in the mountains as well as most of their color and specularity to really push them back in the background a bit more.
All of the terrain was entirely sculpted in engine but when you actually look at the actual terrain in the environment it is very simple overall. The answer to having complex and good looking landscapes is not simply in the landscape itself, but a good balance between landscapes and well placed meshes.
The kind of comical thing I found while doing this was that very little optimization was needed on my part. It mostly came down to what I mentioned before about having proper LODs and finding that sweet spot so that I could create an entire world at a specific quality level infinitely in all directions if I wanted. It also helped quite a lot that I was creating this only for high end PCs so I never had to go out of my way to consider lower end PCs. Upon finishing this I did find that lower end PCs could actually run this at about 10-15 FPS which was much better than I had expected! That being said I do not want people to think that this is the best that UE4 can do. I have been working on a personal project for several months now with 3-5X the detail at better frame rates, so it could have been much more optimized but most of it ends up coming down to having high quality assets that make that easier for designers.
I created the entire environment using assets I found on the Unreal Marketplace, SpeedTree, and TurboSquid so I was not actually responsible for creating any of the assets, simply tweaking them to fit my needs. I don’t really have any regrets on creating this as it is something I was able to release to the public for free for others to enjoy but if I had a lot more time I would have liked to have gone through the world and really spent a lot more time on the smaller details at ground level. Basically creating a much more realistic and dense forest and making one that feels less random and much more controlled.
The biggest challenge when creating large open worlds such as this really comes down to performance. Any time you have giant open worlds or vistas there is always a struggle to get things to perform properly and often times that means any time you have these giant open environments visuals will suffer much more than a much smaller much more controlled closed map.