Sunday, April 30, 2017

One step forward, Two steps back

It took a bit longer to make a new post. Not necessarily because I've been busy or whatsoever...  Time just flies! When getting out of bed, I'd better lay down again because the day is over already. And yes, like any programmer geek, my nights are short.

When writing a new topic, there has to be a topic to start with. Obviously a lot has been said already on this blog. Curtain shaders, game music, stair-climbing physics, Super Mario, pathfinding, you name it. If it's not somewhere in this blog archive, it has nothing to do with games.

On the other hand, the "should I post this???" bar has been raised quite a lot. Five years ago I would share my new bumpMapping shader, or devote a topic just to show a new metal-barrel 3D prop. Nowadays, games look so darn good that I can't come around with some silly 3D brick texture, or a dull dusty room - your typical Tower22 stuff. In this age, it’s just very hard to impress. My homebrew stuff isn’t impressive anymore for today’s standards.

Or well, that's how I feel about it at least. I'm not the type of guy who shares every restaurant meal or aftermath turd on twitter or Facebook. Heck, I don't even have an account on any social media. In general I only open my mouth if there is something truly informative or pretty to share. Or if I can't resist making stupid jokes. But none of that got triggered last month, so... no new topics.

Tinkering G.I.
No development then? Well yes. Made a few more (dummy) rooms for the playable demo, and got on a dead end playing with some other G.I. approaches. Every year or so, I get bored on my current "Indirect Lighting" method, because none of the existing methods is perfect... far from. Engine22 uses Lightmaps (& probes for dynamic objects) at the moment, but there are some seam-stitch artefacts, normalMapping issues, and of course dynamic objects don't play well with lightMaps. So I tried a probe-only-approach, but found the end-result to be disappointing, quality-wise. Spend a few weeks implementing them, only to throw them away with the garbage again, grabbing the dusty Lightmap-box back from the attic.

Probes can work pretty well -I used them in the Tower22 "Subway" demo clip-, but they lack accuracy and leaks are hard to prevent. And since the average Tower22 scene is a small room with a lot of crap, having probes every 0.4 m3 isn’t dense enough. At least not when you got used to lightMaps, which can be more accurate.

Tinkering Parallax effects
So, that was a waste of time basically. What else did we do? Re-Implemented "Parallax Offset Mapping" (POM). I wrote "re-", because this technique has always been present here, but not yet in the new Engine22, as I placed my bets on Tessellation instead.

POM offsets UV coordinates (per pixel) by sending out a ray towards the camera, checking for intersections with a surface heightMap. Neat trick, but still fake. Tessellation actually sub-divides the surface in many tiny triangles (if the camera is close enough), and then offsets the (new) vertices based on that same heightMap. Even though it works surprisingly fast I'd say, you can't sub-divide far enough to reach a per-pixel level, resulting in blocky/jaggy edges. And worse, since vertices actually go back- or forward now, it can punch holes in your walls, and furniture will either float or sink above/within the displaced geometry. Conclusion, it just doesn't look that good. Of course there are a billion optimisations out there, but for what... adding 5 mm depth in some floor tile gaps. Hurray.

You've seen this corridor a billion times already, but probably it looks more interesting this time. Not because brilliant new shaders, better G.I. or improved 3D props, but because a rather simple "dusty overlay" plus a blue-ish ghostly effect.

I learned that technical tricks alone can't boost graphics. Sure they can help, but in the end it's all about the composition, the scene as a whole, where every prop, detail, decal, lightSource or particle complements. Not a single Tower22 room looked good right from the start. More the opposite. Breeding a plan + 3D geometry for a new room for 9 months, only to give birth to the ugliest babies. Wondering if it would ever be all right until the last lamp was replaced for the 60th time.

I don't know if artists have the same experience with more professional tools like a Crysis or Unreal engine. Asides from having a more complete toolset, they probably gear towards getting your preview as quick as possible, so an artist can correct the steering wheel early on. But even so, all the High-Tec is still no guarantee for a good looking scene. There needs to be a good collection of 2D/3D props, as well as an art direction. So, to sum it up: 
               Technology + Idea + Artwork

Well, and that is where this demo is a bit stuck now. I think I programmed all the techniques needed, or collected the major technical ingredients / editing tools at least. Of course things can be improved, but probably that also depends on what the artist needs. There is no artwork though, asides from the "dummy" props I made so far. Those are all place-holders really, mainly to show whatever artist who decides to help, what the "Idea" is all about, roughly. Apart from a few paper bits, this Idea was mainly between my ears in the past, making it very hard to show an artist where to go. It's like telling your contractor to "build a nice home", without giving any further blueprints.

This time the demo has been made, mostly. Hell, we can even play it. Parts of it at least. I'd like to keep some open ends, because honestly, the idea is not rock solid yet. With that I mean the design of the rooms can (should) be tweaked, and moreover, the exact demo-play-sequence needs to be tested and modified to make it as horrific as possible. Horror is a complex thing. Ever tried to explain a nightmare that scared the shit out of you? It's almost impossible to transfer that feeling to another, unless you have strong visuals or master the pen like Stephen King. All I have is Delphi and this blog.

So I've been waiting. When asking artists to help, the Technology & Idea need to be in a somewhat mature stage (unlike my previous attempt, years ago). But when is that? When is the technology far enough? And how to make sure your Idea will attract others? Today’s technology is old tomorrow, and it's very hard to show your Idea without proper artwork. Chicken Egg story.

Ready? Set? Go?
So right now, I'm more or less balancing when & how to ask for help. There is not too much anymore I can improve with programming alone, but then again, once I ask, there is no way back. I can't invite skilled people, then to let them wait because the engine needs to be fixed first, or let them change their work every week because the Idea is fluid like apple juice. And not unimportant, with 2 kids and 2 jobs, it's not like I have nothing else to do. Probably anyone who started or thought about starting their own business, knowing when you're ready is difficult. It's scary. Out of the comfort zone, at your weakest. BUT: No Pain, No Gain.