"That price is insane lol" by Elliot Gray

If you’ve ever purchased a premium asset from the unreal engine marketplace, chances are you’ve seen the comments that go something like “Looks good but I’d only pay $10 for this” or in more extreme cases “this price is insane”. As professional developers we read these and roll our eyes but goddamn are they irritating nevertheless.

In this blog post I talk about my experience as a buyer and a seller of unreal marketplace assets, and how and why you shouldn’t listen to the people trying to convince you your work is worth less than it is.

Read More

Why UIWS, What UIWS… Who UIWS? by Elliot Gray

By now, you’ve likely seen a bit about UIWS (Unified Interactive Water System), the plugin I created to allow UE4 designers and developers everywhere to add Interactive water bodies to their games.  I’m extremely happy with how my 1.0 (technically we’re at 1.3 already) product has turned out, and I’d like to talk a bit about why I made it in the first place as well as answer some of the really great questions people have had about the tool!  So before we carry on, here’s the plugin trailer for those that haven’t seen it (or just want to look at the pretty ripples again haha).

Why did I build UIWS?

I think this whole paragraph is pretty interesting, but also the tl;dr is I just like dynamic water in games and wanted it in my own and so did some other people so I built a plugin for us all.

For as long as I’ve been playing games, I’ve loved all types of dynamic interactives.  Destruction, foliage, cloth, water; I’ve been known to frollick around with them all for inordinate lengths of time. I vividly remember as a 15 year old watching Tim Sweeney’s gdc08 talk on Unreal 3 and seeing all the cool new tech coming to the engine and Gears of War 2, in awe.  The destruction system was so cool, fluid surface actors so pretty (also, meat cubes anyone?) #fluidsurfaceactorwasmurdered.  To me this was the future of game worlds, and still is. 

Something Cliff Bleszinski said back in the day really stuck with me (can you tell I’ve been a fan of Gears for awhile haha?).  It was on the topic of gore (and maybe destruction, it’s been awhile) in the Gears of War games, and was essentially that the gore isn’t really there out of bloodthirst; it allows the player to “reach out and touch the game world”, really be a part of it.  In my opinion this applies to all forms of dynamic world interactions whether it’s a cloth sim, foliage, or water.  Interacting with these really lets us feel the world is alive and dynamic and lets us become even more a part of that dynamic world.  This is why I love ‘interactives’ in games, and why I’m so passionate about getting interactive water in as many of them as possible (as in, you should all do it, with UIWS or otherwise, just do it haha).

More recently, I replayed the flawed masterpiece, Crysis 3 and DAMN did it get me fired up:  It’s 2018 and I STILL didn’t have access to the kind of water tech, in my beloved unreal engine, that Crytek have had FOR YEARS haha.  The other big engines have their own solutions now too, Frostbite and more recently Snowdrop, so I figured it was time to get my own.  And so I got started creating my own interactive water body.  The goal was to have a single actor that I could easily add to any level, have it interact with everything, AND cast dynamic caustics.  Because I wanted it.  As it turns out I wasn’t the only one that thought this was a cool idea and hence, UIWS.

Automatic collision particles!

What makes UIWS special?

I was asked a version of this question online (but it was technically more of a “it costs how much” spit take haha) and it’s a great one so thought I’d share my answer here.

Player Local, World Space simulation
Firstly, the simulation in UIWS is in world space, with player local simulation. This means you can have high simulation fidelity without having to stretch sim resolutions to cover the entire size of your water surface (which can be as big or as small as you like, the simulation doesn't mind). The simulation essentially follows the player (or camera) around any surface which as far as I'm aware, is unique to UIWS (compared to existing ue4 solutions).  This approach is not only great for fidelity and performance, but enables many of the other features included in the plugin. 

Fully Automatic, out of the box
Secondly, unlike other solutions the UIWS simulation automatically responds to anything that passes the water surface, without any need to manually write blueprint or c++ to agitate it. If it renders, it can interact automatically. Meshes, particles, you name it. Of course you can also manually agitate it with a function call, and it responds to damage too spawning ripples and splashes, all without requiring any designer or programmer interference. 

Caustic Lighting
Also, something I’m a huge fan of in UIWS (if I do say so myself) is that it approximates caustic reflection and refraction. This one speaks for itself in my opinion; I'm not aware of any product outside of cryengine that can do this without level specific, manual artist setup. Not only does UIWS not require any in-level setup for this, it automatically handles it for multiple bodies of any size, anywhere in the level (and is driven by the level’s directional light vector and intensity of course). 

Super User Friendly
Finally and dearest to me, is just how damn easy it is to use. Install the plugin, drag water bodies into your level, tick a box on your character and it just works. Automatic collision particles, automatic damage response, automatic everything basically. And it's super easy to add UIWS interactivity to any existing materials as well so the sky's the limit.   

I simply wanted to drag water into my level, wherever I wanted it, and it would just do it’s job and be beautiful water.  UIWS fills that void in my game development soul/life.

Tasty tasty frame rates, on epic, at 4k? UIWS has got you covered!

Who is UIWS for?

UIWS is for anyone who like me, wants beautiful interactive water in their games (players and developers alike), duh.  But I’ve taken special care to ensure a great experience for users throughout all areas of the dev pipeline.  It’s also super easy to learn how to use with convenient online documentation!  

For Programmers
UIWS is written in C++ for maximum performance, and is easy extensibility.  It doesn’t rely on custom a sdk so should (theoretically) compile for any target platform - I know one user is packaging it to their switch as I write this!  UIWS is also fully blueprintable – create custom water bodies for your in-game environments each with their own settings, if you want, and manually interact using straight forward blueprint nodes and events (which are all documented online!)

For Designers
As designers, we just want the pretty water (well, speaking for myself at least haha).  We don’t want to have to manually script interaction, or stuff around configuring settings and painting verts.  UIWS is drag and drop and (optionally) fully customisable to get the right look and feel for your game.

For Artists
UIWS comes with a pretty nice default shader, but I know you can do better, which is why all you need to do to add UIWS interaction to your own beautiful materials, is drop in the UIWS material function, and blend in the outputs (you guessed it, this process is all documented online too!)

Bonus Round

Based on some of the easier questions I’ve been asked around the internet.

Q: Can I customize how the caustics look?
A: Yes! If it can be done in a shader graph, you can do it to the caustics

Q: Are caustics based directly off the ripples made on the water surface or are they projected from a generic texture?
A: Caustics are based directly off the water surface, but only because they can take the same surface height data and work with it (you could, optionally, have caustics un-linked to the tiling surface material). The player/object interaction ripple caustics are directly linked automatically regardless.

Q: For foliage interaction, is it the ripples that cause the foliage to move or the character?
A: Any ripples caused by anything will interact with foliage. Even if a player isn't there to see it happen.

Q: Is it easy to integrate into existing projects?
A: Super easy! Install the plugin, drop a water body in, tick a box on your character mesh and bob’s your uncle, interactive water.

Q: Do you handle buoyancy?
A: Currently I’m not handling buoyancy, but it’s definitely something I want to do for future releases. I’ve ensured it’s straight forward to work with the UIWS water body/volume programatically, so if buoyancy is a feature required before then, there's nothing blocking custom implementation. I’d definitely love to include it out of the box.


Wrapping up

I hope you’ve found this blog post interesting or at least informative! If you have any other questions hit me up, I love talking about this stuff!

Till the next wall of text I feel compelled to write; may your waters be rippling, and your caustics interactive.
Elliot,
Water enthusiast, big graphics nerd.

Tasty Water (mmm) by Elliot Gray

Put together a rather neat unified water system in ue4 because basically I’m jealous of cry-engine developers haha. I’ve been replaying the Crysis series, a flawed masterpiece of a trilogy with graphics that still hold up 5 to 12 year later! Crysis 3 introduced some truly impressive interactive water surfaces with what appeared to be very accurate simulation. Going back however, I realized how fake the caustic lighting really is which inspired me to have a stab at it myself. I love pretty games.

Features include:

  • Infinite, automatically interactive, water plane

  • Totally not fake caustics sim (reflections + refraction) -

  • Water ripples affect plant 'physics'

  • Easy to use, almost no programmer intervention required (soon to be none)

Currently the system works well and looks really good but before it’s ‘game-ready’ I need to add/finish a few more features:

  • Support for water mesh LOD’s so the shader complexity can be lowered at distance automatically

  • Support for multiple separate fluid surface per level.

    • Currently while there’s nothing stopping you adding more than one mesh to the level, I’ll need to add a bit of logic and shader support so that meshes take caustic data from the water body they’re nearest to.

  • Move logic from blueprint to C++

    • Obscenely cpu intensive for a graphical feature otherwise

  • Automatic lighting condition support

    • Currently because the caustics are just faked based on height data of the surface ripples, if the scene lighting gets changed significantly the caustics will be over/underbright. At it’s simplest I’ll be able to read lighting intensity from a param collection but I’m also thinking about other options such as reading from the skylight or even reflection capture cube maps

  • 100% drag and drop setup

    • I’d love for this system to be able to be integrated seamlessly into any project with zero implementation work. Drag, drop, scale, and done. That’s the goal and I don’t expect there to be much trouble getting there from where I am now.

So definitely a lot of work ahead but hopefully I’ll be posting back here soon with a finished product. Thinking I might pop it up on the UE marketplace so if that’s something anyone’s in give me shout!