When I started making this game and finally announced it I set myself the goal of writing at least one development blog a month.
One thing I did not anticipate - and in hindsight should have - the setting and way I am working doesn’t lend itself to frequent updates. I did quite a lot over the last month; I however have little to show.
Well… do I have multiple things to show, all of them are work in progress. And when I say work in progress I don’t mean promo material which says “Alpha Work in Progress” even though it’s mostly done. I mean proper work in progress.
As a game Sails of War has three major art areas: Water, Ships, and surrounding vegetation/props. To show even a single screenshot of a ship, at least water and one ship need to be in a Beta state.
For these first few months of proper production I set out to concentrate on those two parts: Water and a ship. Yes one ship, only. This one will set the standards for all others.
And whilst the 3D model of this Sloop-o-War is about 85% done, its textures and materials are not.
I started the texturing process trying to do the whole thing with tiling textures to be used on all ships. The result wasn’t the one I am after. So at the moment the ship is at a point where I can happily show its model, but only without any textures. This then is untextured and just the model of the sloop:
Things that still need doing:
- More details on ship
- Build material for ship which utilizes tiling textures
- Have that material make use of both unique and tilling
- Add geometry where the model will have unique dirt
- Make textures
So far for the first model. Please keep in mind, all screenshots are actual work in progress. Not yet done. Actual work is still left to do and will be done.
Now onto the water: If you follow our twitter - or my personal one - you will have seen me tweet about the multiple revisions of water I was on. Most of the last month was spent on making and improving the water material.
Turns out, in order for any screenshot to look good the water needs to be amazing. About half your screen, if not more, is covered in everyone's favorite liquid.
I wasn’t quite sure how I should approach water. But after some testing with simple panning heightmap solutions, I ended up realizing that water is everything.
As said before: Most of the screen is covered in it.
Water, however, seems to be one of the least understood things on earth. There isn’t a simple fix for water and real time simulations are still to performance heavy. Luckily back 200 years ago a smart man called František Josef Gerstner discovered a wave function which nowadays most real time game and film projects use.
Those so called “Gerstner Waves” are some rather complex math - though a lot of awesome people online have put that math into UE4 Material Functions.
You then use those Functions multiple times and combine them until you have a nice wavy water. Once your displacement is set you can go on to adding detail normal maps for small water details. Then the basic color and lastly detailed seafoam and whitecaps.
I am at the moment trying to dial in:
- The combination of multiple wave functions each with their own setting
- The water texture and colors
- More obvious waves - looks shallow even when not at the moment
And additionally am looking into adding white tops and random foam.
Two huge unanswered questions are translucency and reflections.
Translucent materials are a lot more expensive and have less awesome reflections. They do however open up the possibility of smooth transitions were water hits an object.
If the material is switched to opaque then obviously transitions are hard cutoffs. But the huge upsides are better reflections and a lighter load on performance.
What am I looking at?! - Well, you are looking at the material complexity viewer build into Unreal Engine 4. The bar at the bottom tells you how complex and thus performance heavy your materials are. Green is good and white is very bad. You can also see the average and overall performance in that bar.
Basically, that screenshot tells us, on average the translucent material is a lot more performance heavy, especially at its peaks. This raises our overall performance hit by quite a lot. Realistically this means looking at performance you'd want to use the opaque material.
That being said, here is a comparison between the two in motion: (No sound)
Overall I’d like the water to be more reflective and might end up working with planar reflections. Those, however, are also performance heavy as the entire screen is rendered twice.
The current goal is to have a nice reflecting water surface with somewhat random foam and foam on the tops of waves. As you can see it’s not reached that goal just yet.
At the moment I’d say the water is about 65% there. A lot of small details and tweaks are left to do.
Which brings me back to the beginning: For most games I could show multiple props, weapons or environment art after a month of work. For this game, however: I can not. It’s likely that I’ll continue tweaking the water material until release, maybe even longer than that.
But nonetheless, I wanted to keep my promise of writing a blog post every month. Even if again I must stress that everything I have talked about and everything you have seen here today is a heavy work in progress. It’s the curtain being pulled back completely.
I hope at least some parts of this post were interesting. If you have more questions about Gerstner waves, materials or ships please leave them in the comments!
Next month I’ll likely talk about types of ships and setting a bit more.
Before I go one more thing: Calling all ocean-lovers, waterbenders and art critics. I’d love to hear your thoughts on the current progress of our water. Any feedback is much appreciated!