FG I : The Journey Begins With a Jam

Welcome dear reader!

It truly has been a while since I last wrote anything on this page, but that’s about to change!

This is the first post in a series on something I think might be rather unique, the journey of a Technical Artist going back to school to deepen his understanding of the artistic parts of game development.

This Friday I walked out through the doors of the studio I’ve been working at for the last 3.5 years, and stepped into student-hood at Futuregames on Medborgarplatsen in Stockholm.


As the title indicates we started off with a game jam which started on Saturday morning and ran until Sunday afternoon; giving us roughly 20 hours of active game development.

We were split into random groups of around 5 people and then the jam started. The theme was “Shoot for the Moon”; after a few minutes of deliberations we decided to go with a literal take on the phrase and with that pre-production started.

After 10 minutes we’d decided to go with Unreal and a low-poly style, which, while none of the artists had tried it, would be a very easy style to keep consistent.


Since we only needed around ten assets I set out to create some low-poly shaders inside of Unreal Engine; my goal was to try and get rid of the need for textures altogether, however, since creating textures would be faster than authoring vertex colors, we went with a simple flat Albedo for the planets which was generated by using polygon fill inside of Substance Painter.

Below you’ll find a lot of technical stuff but for now, enjoy the final scene inside of Unreal, there’s no gameplay in this one but I think it turned out quite well all things considered!

Dot Product Unreal Low Poly Material

Warning : Very technical stuff!

Now for the materials which, while not exactly complex, I think turned out quite well! One of the best things about having been doing this for as long as I have (about 13 years!) is that you had to create shaders (or materials as they are better known in Unreal) before there were nodes to help you out.

Why does this help you ask? The dot product.

This is where I refer you to  where an interested bystander can get a gander at the glory that is the dot product of the normal and the halfway vector!

Whether the above Wikipedia page was interesting to you or not, the reason I bring it up is that with a low poly style such as the one we were going for can look rather dull unless you bake a silly amount of ambient textures and lightmaps.

And so, the dot product to the rescue! In the above image you can see how I’m taking the vertex normal and using the dot product of it and a constant vector to setup a constant gradient based upon the face angles.

Now why is this so cool? Simply put, due to the way the mesh has been faceted (hard edges/each has a different smoothing group depending upon your 3D authoring application of choice) every face now has a unique value from -1 to 1 assigned to it.

Since I don’t care for the minus values but do care for variation I add 1 giving me values between 0 and 2 then multiply by 0.5, which finally leaves me with a beautifully normalized 0 to 1 range! (Note that you could also opt to run the value through an absolute node, if there’s any performance difference whatsoever, I’m sure it’s negligible even on older cellphones, this on a mirrored sphere does however only give you half the value range.)

After this I run it through a hue shift node and that is that, the final result is a low poly style which doesn’t need clunky vertex coloring, keeps its full 3D-look and which doesn’t look completely monochromatic; and while I did opt for a real-time light in this scene, faking the light completely using another dot product would be a cheap way of getting this to run smoothly on mobile hardware.

To make this happen you’d simply create a material parameter collection and use it to get a normalized vector from the sun’s position in the scene and then dot this with your vertex normals.

I’m out, if you’ve got any thoughts or questions, just leave me a comment and I’ll get to it when I can!

//Jona

Leave a Reply

Your email address will not be published. Required fields are marked *