Custom Shaders In Unity

Up until now, I always used self-illuminated shaders which I know are well supported by any 3d engine. But they just don't provide much dynamic lighting. It's a compromise I decided to make. I rather had baked lighting then to give up colour control. There are plenty of great looking games that do this. But this isn't good enough for me any more. I want to have colour control over dynamically lit and unlit parts of geometry. A separate texture for both. So I have been looking for options.

Material Editors
Now some 3D engines like the Unreal Engine do have a useful material editor. Unfortuatly Unity by default does not. Though there has been development by third parties, there is nothing currently available. Strumpy's Shader Editor ceased development in 2011. And Shader Forge is currently in alpha development.

Available Shaders
There are plenty of (toon) shaders available on the asset store, but nothing fulfilled my simple idea. For a while I thought self-illuminated specular shader would be good enough after all. However, I ended up with a lot of separate materials and objects for one scene, because every colour has to have it's own colour specular. And you can only assign a single colour per material, instead of picking a texture. (though there is control over glossiness via alpha channel). But, besides having a terribly unoptimized scene, everything looked too 'shiny' because of the way specular works (like it's suppose to). While this looked fine for things like glass and metal it just looks weird on everything else.

Let's Just Write Shaders Then!
So, to get what I want I decided to peak under the hood, and try to see how shaders actually work. And well, as someone who is only comfortable with a few scripting languages it's overwhelmingly complicated. I couldn't manage to modify default shaders the way I wanted. I am nowhere near being able to write one (yet). But among a dozen of example GLSL shaders I looked through, I did find a shader that I actually liked. A shader that provides a separate texture for both lit and unlit parts of geometry.

Exactly what I was looking for. Definitely good enough to make a good looking game. However I will still look for a way to develop this shader further one way or the other. Adding a specular texture map, normal map and a gradient texture to mix the 2 colours different would be nice. A big problem is that it does not receive shadows. Because it's GLSL I have to force Unity into OpenGL, and for some reason Unity is weird about forcing OpenGL on Windows.
November 14, 2013




Why I Care About Colour

It boggles my mind why the majority of the industry chase after 'realistic' graphics so desperately. They seems to prioritize the use of normal maps over anything else. Resulting in white lights, black shadows, yellow overlays and desaturated colours that don't look interesting at all to me. We already have the technology to play in a nice painting, yet only a few developers care to do so. Brilliantly picked colours by concept artists often goes to waste this way, and it's frankly insulting.

Many modern games would just look much more appealing to me with a touch more saturation and style. I don't have a problem with realistic proportions or normal maps. But when it comes to use of colour, many games are lacking in my opinion. Chasing after realism will always make the game look dated in a few years. But the appeal of a well designed art direction lasts forever. The desire for colour control seems like a lost art only still present at Nintendo and in old games.



Why I Care About Games

My favourite aspect is (obviously) the visual side that games can offer. Art direction, story, technology, music and sound in games are very interesting on their own and add a lot to the experience. But they are not what defines a game. For me there are 3 key points that make games fantastic and unique.

Interactive Immersion
Some games react to the actions of the player from a narrative point of view. And some offer a big list of actions you can perform at any time, which provoke a lot of personal expression and freedom. For these reasons alone there is simply no other type of media that offers deeper immersion then video games.

Player Communication
Gaming with other people can quickly form a bond of trust and cooperation. It's a good way to build up teamwork. Playing (board)games is some of the best social fun you can have in my opinion. And then there is communication between the player and the game. A fascinating subject which relates to my next point.

Learning by Playing
Gaming is problem solving. It encourages critical thinking and skill to solve problems under strict conditions. The best games out there in my opinion are the ones that make you re-think and refine your strategy and control over and over again. Every game has something to teach it's player and almost never fails to do so. To me, that is amazing.