I am sharing the development process of creating a new PC game featuring a huge open environment. The level I am currently building is purely for demonstration and testing various optimization techniques (LOD, vertex count etc..) and is by no means a complete or even near playable game.
This is purely a tech demo, that serves to satisfy my need to build tools, establish workflow and understand limitations and bounds I have to work with.
All images and videos have been taken at my max fullscreen resolution of 1920 x 1080, using Windows 8 with an Intel I7 47K CPU, GTX 970 GPU with 16GB RAM.
I am using a car imported from the UnrealEngine as a starting point to see what the FPS will do while moving through the terrain. I always start by building the world first, and then make things up as I go along, as I am a one man army at this point, I have tried this when UnrealEngine4 released, but struggled as there was no speedtree support, and went to CryEngine3 for some TLC, but found that UnrealEngine4, after adding various features in my hiatus (~6 months), is the way to go . I love working in Unreal, the documentation is ‘Unreal’ and super awesome.
First things first, I started by creating a landscape, the textures on the landscape were downloaded from www.cgtextures.com and edited to tile using Photoshop CS6. I also created and added rocks with LOD for static meshes that I created using 3DS Max 2014, textured using textures from cgtextures. These same rocks were also scaled up, to created some mountains, and scalable textures created to match them, sokme were placed in the background for parallax viewing, I also added an ocean like water surface, but I think this is still a very early feature of UnrealEngine, so I don’t see me using this until it is completed or ready for use, as it is an actual plane, and not a volume, like CryEngine3’s endless swimmable ocean.
This video shows some detail moving through the environment, and checking general look and feel of the terrain, not the car here is simply imported from UnrealEngine4 start content, and will by no means be used in the game, but serves as a good starting point for checking FPS, and LOD transitions, while moving through the environment at a pace.
The next step was to create grass using SpeedTree, the textures I created myself from pictures taken from my garden (with a Samsung Galaxy Note 3, and IPhone 4), and cleaned up using Photoshop, for CryEngine this was a painful process, as the models had to be imported, and edited first, and then used, for UnrealEngine4 the .srt tree file compiles automatically when the SpeedTree model saves, I found the textures to be really washed, and too bright, so I had to darken them when importing into UE4. All SpeedTree models I create support LOD, and various settings had to be adjusted to get the right LOD transitions at the right distance *UE4 uses a percentage of the screensize wrt the mesh, so those values also had to be tweaked.
Grass models were created using mesh fronds, and highly optimized as the default mesh frond shape, involves about 500 tris. Each grass patch was then painted using the Landscape foilage tool, with shadows and static lighting switched off, as all my SpeedTree models are animated using vertex animation, and sway in the wind. Each grass patch came in at around 240 tris, and 32 for last LOD.
The next step was to create some bushes, to cover various areas of the landscape. These were also created from textures I created from pictures in my garden, these images will probably need to be refined more for production use, but will serve me well for the next coming demos. The bushes also include plants where some textures were downloaded from cgtextures. *Frond textures. The bushes came in at around 2K tris, and 32 tris for the last LOD.
This video shows the vehicle moving through the bushes, as no collision will be set up for these.
The next step was to create ground and mountain/rock cover foilage, and this went through various iterations as the FPS was really starting to take a hit, after some pretty extensive (2 hours 😉 optimization techniques, in SpeedTree and Unreal, it looks OK. The ground cover for each mesh, came in at around 1K tris, and 32 tris for the last LOD.
Here are some videos, and then had to do some tweaking with the mesh vert count and LOD settings for improved FPS.
The next step was to add trees, the textures for the trees were done from images taken from my garden, and need a lot of cleanup work still, or better quality with less shadows to cleanup, in any event, they look pretty good for this demo, trees average around 35K tris, and 7K tris for the second lowest LOD, this will still be heavily optimized over time, but the billboards come in at 32 tris.
This video shows the vehicle moving through the terrain, and found some interesting collision problem with the vehicle capsule, and the terrain slope. But all in all not bad FPS around 30, will need a lot more tweaking before it is considered polished. But this is a good start, from here I can optimize and add more world geometry for my test level.
Here are some shots taken from far away, to check the LOD and texture seaming.