Your first games programming gig – the 2018 edition

Image result for shadow of the colossus ps4

It is 2018, and whilst the world can feel like it is falling apart a bit in regards to politics, economics and whatever, we can rejoice.  ONE OF THE BEST GAMES EVER GOT REMADE AND IT IS NOT TERRIBLE! Seriously if you have a PS4 go and and get Shadow of The Colossus.

Anyway! This article is the 2018 version that covers some things to think about when applying for and getting first programming job in the industry… as the title states… whatever let’s get to it.

Your Portfolio, Personal Projects and Game Jams

When it comes to games jobs, your CV is literally a piece of paper that you have written. Although it lists all the tech you have had, your experiences, your grades, etc, it is the old phrase of “actions speak louder than words”. You need to sort out a portfolio site to show off your work. Whether it is a wordpress blog like this or a github site or an itch.io page, your portfolio is invaluable and will sell you in a much better way than a piece of paper does.

However, it is not as simple as grabbing all your university work and whacking it on a website. You should have some non-course related projects up there as well. Games is very much a passion industry, and not working on games projects outside of your course can show a lock of passion. Yes university can be busy… but compared to working 5 days a week full time, you have bags of time to work on something outside your studies.

When picking a personal project though, don;t expect to make the next Final Fantasy 15, but at the same time don’t just show off a Pong clone. What you want to do is pick something simple, enhance it, make it super polished and for bonus points, have it running on a cool piece of hardware and maybe even release it on a store. It is super easy now to make games on consumer hardware. You can build Android APKs and distribute them, you can even make games for your retail Xbox One.

If you are stuck for ideas here are some games/genres you can look at as reference for “relatively” easy stuff to make that also covers a couple of Games disciplines such as Graphics, Gameplay, Physics and AI. Don’t full on clone them though, make sure they are your work and have your unique flair in them.

Your personal project doesn’t necessarily have to be a full game though. As this is your first gig you may be limited to what options you have (for example you may not be an A.I. programmer right off the bat) but, you can still tailor it to indicate what you want to do in the future.

If you love graphics programming you can make a really sexy looking demo that shows off a certain technique. You can even go to places like GDC Vault and Siggraph and find papers to give yourself inspiration. For example you could have a crack at doing something like the Sand Rendering in Journey.

Image result for journey ps4

If you really like AI you can go to resources like AIGameDev for inspiration or have a look at something like TORCS where you can make a cool A.I. car controller to race against others.

Image result for TORCS

 

A really good way to add to your portfolio is a Game Jam. You don’t even need to go to somewhere and do one, places like itch.io have a massive list of game jams that are always running with a variety of different themes and the famous Ludum Dare runs pretty regularly. You may make something absolutely amazing that you then keep working on after the jam and release commercially. Titan Souls is a prime example of such a scenario.

Image result for Titan Souls

The best way to present all your work is through videos and builds. Show a youtube clip to entice me into actually want to play. Then, don’t make it hard for me to play. If you are using Unity or Unreal, make a web build. I can play it right there in the browser. If it is an exe, make sure you package everything your game needs (for example if it needs something old like the XNA runtime, make sure the installer is included). If it is a mobile game, provide and APK for Android (don’t go through the pain of sorting provisions profiles, etc for apple).

Show Passion

I mentioned this briefly in the previous section, but to reiterate, games development is fueled by passion. Rami Ismail of Vlambeer put it brutal honestly in the film “Surviving Indie”. For what you do in game development, you can probably get 2-3 times the salary doing something similar in another industry. Especially with programmers where you could in theory go and do banking software, etc for lots and lots of money (and if money is what drives you rather than enjoying making games for 85% of your week then yeah games is probably not for you). That said, games does not pay badly in the grand scheme of things where the average wage of the UK is around £27k and London is actually lower than that.

That minor tangent aside, the point here is, you get into the industry because you care. And show it. When talking to potential employers in interviews, etc release your passion for whatever games excite you and why they excite you. Just saying “I like playing games” does not really cut it here. Why do you like playing games? Why in particular Zelda? Why does Need For Speed make you super excited when you see a car slide round the corner? What are your favorite games.

I actually did a talk in the last month about games I work on in my free time and I did a whole slide of some of the games that got me excited and drive me into the industry in the first place.

Soft Skills and Being “well rounded”

Your soft skills are as important, if not more important than your programming skills. Professional game development is very much a team sport. You will often be working in an open plan style office with a variety of disciplines. The lone programmer sitting in a dark room does not exist.

Soft skills are your personal attributes, personality traits, communication abilities, etc that define how well you play with others. Soft skills are not something you can really go and hard learn, they come through your life experiences. Hard skills like knowing C#, C++, Direct X, etc are tangible skills you can go and learn that are easier to quantify. So in order to work on them, you need to do stuff with others to see how you interact with others.

Here is an example that puts it in a more blunt way. You could be the best C++ programmer ever interviewed, but if you are super arrogant about your skills, don’t listen to anyone else’s opinion, don’t want to learn form those more experienced and think you are gods gift to game development, you are a bad developer.

Blunt, but you see my point right?

You can read books or whatever to improve soft skills, but in my opinion, go and do something different with other people. If you are at university, seriously, don’t spend all your time sat in the library and just reading programming books. You are not just missing out on half the experience, but also you are not taking the opportunity to develop your soft skills. There are loads of clubs and teams that tailor for a variety of interests. I personally did fencing (and still do now), which at Uni, is a team sport. I met up with people, interacted with them and developed your soft skills. Doing other things than just game dev actually helps you with your day to day, and also gives you a broader perspective.

Also, yes you get your degree for life, but after a while, it just becomes a part of your CV. Your degree is great at the start of your career, but your soft skills are going to be setting you up for life. Still work hard and aim for a 2:1 or over, but don’t sacrifice the other experiences and opportunity to improve your soft skills as well.

Swot up

OK, so you have applied for a job with a nice covering letter, CV and portfolio and you have a date for the interview. It is time to swot up. Basically, revise all the things. OK maybe not all the things but definitely the things your employer is looking for. The three things I would suggest revising regardless of the employer or role is Data Structures, Algorithms and 3D Maths. The majority of games programming will come into contact with some sort of maths and some point (especially the dot product and cross product, that is a question that EVERYONE asks). You are going to want to be able to store data in the most efficient and effective way possible, so you want to know what sort of data structure you should use in a specific scenario. You will possibly want to iterate or manipulate that data, what is the best algorithm to do that?

Look over what the job spec was again. Do they mention Unity or Unreal? How are your skills with those engines? If they use Unity, how is your C#? If it is not super clear, what engines or tech do their other games use? Wikipedia pages often say, but you can google this and find out. If you really can’t find it, and the game is on Steam, why not explore the files and find out? Unity games have a very specific structure for example.

Be nice, polite and passionate in interviews and don’t panic

Hey look, there is that Passion word again 😉 So you got the interview. Awesome. There is something in you that is attractive to your potential employer. Seriously, that is amazing, you have successfully sold yourself to someone else, and that is a win in itself.

So when you go, first off be likable. You are a human being at the end of the day and so are the ones that interview you. You aren’t some programming robot that is just gonna whack out code consistently, you are going to be in a team working with artists, producers, QA testers, etc. Show that you can fit into these teams. You know the soft skills? Show them off.

Be polite, do your thank yous, shaking hands, etc, pretty much all the stuff you would do in a normal interview. Although it is the games industry and we don’t often where suits, smartish clothes ( although I wear this every day) such as a nice shirt, jeans and pair of shoes is always a win (in my opinion anyway some people won’t mind 😛 ).

Also be passionate about what you do, love games. If you don’t love what you do, is it worth doing?

Finally if you get asked a question you don’t know about, try to solve it calmly. If you get it wrong then and you are calm about it that is much better than quite frankly “losing your shit” because you got it wrong. You are a grad, you really aren’t expected to know everything, but you will be expected to think about ways to solve problems in a cool and calm manner. “I don’t know” is a legitimate answer if you are REALLLYY stuck.

Make sure the job is right for you

Once you leave Uni, you will not know everything. And if a company expects you to know EVERYTHING then it is probably not going to be the right place for you. I have been in the industry for 5+ years and I certainly don’t know everything! And as a developer you will keep learning. However when you start as a junior it is good to have someone who will guide you and teach you cool, interesting and most importantly useful stuff. It is hard but try and get a feel for the place when you go for an interview. If they are going to mentor you and improve your professional skills as a programmer, that is a brilliant place to be. If they are just going to throw you in the deep end and not give you clear deadlines or expectations, then great if you want to learn things the hard way, but I would suggest going somewhere where there will be somewhere to mentor you and help you in your career development. Similarly, try and get a feel for the culture. Are the people nice? You are going to have to work with them for 8 hours a day. Can you literally picture yourself working there?

Some of this will be based on gut feels and stuff you can’t always quantify. I had the opportunity to go for an interview at a studio, but when I walked in it was almost silent and people seemed to be almost ignoring each other. As a super social person, I would have died pretty quickly there. Similarly, there was a company that said it was a games company, but when you drilled down to it they didn’t really want to make games, they wanted to focus on “Tech”. Which is great, it is a part of the games industry, but not great for someone who is passionate about the actual games rather than “the cool tech” behind it.

Lets look at another example. Your dream may be to work at a big company that makes cool 3D console games, however, you may just be a cog in the machine. On the flip side there may be a smaller mobile company, but you get your voice heard. Which one do you feel is best for you?

Finally, what are there “working on your own stuff” clauses. Some companies will stop you working on your own projects outside of work, or at least want full ownership of ANYTHING you work on, others will not. Is that important to you?

Be a humble sponge

When you get your first job, remember, you are brand new to this. A fair few of the guys you will be working with have been in the industry for a while. So even if you got a first, were top of your class or whatever, these guys will know more because they have worked on real life game projects which are very different to Uni projects you work on. Absorb everything from them, the good and the bad. You will learn so much, in a short period of time. When I first left Uni, I would say I learned a lot more of actual game development in the first couple of months in my career than I ever did in my 4 year course.

And also accept that you may not be put on the most sexy thing in the world. You may join a studio that runs multiple projects, some that are really “cool and interesting” and some that are a bit more vanilla. And you might get put on the vanilla shouldn’t be put off by that. Far from it. As a newbie you should embrace being put on that project. You will still learn a hell of a lot from more senior people that have been in the industry before. You can also make an impact to that project. Yes, there may be cooler stuff going on, but like I said, you are new. No stripes have been earned yet, so picking and choosing is not really an  option. Also in the long run, the vanilla game might do gangbusters and look great on your CV. And if you have worked on a game that has done well, then picking and choosing is more likely. Similarly, you may go to triple A and end up working on “the screen where the loot boxes are bought”. Again, yeah this is not sexy but you are part of a team that you can learn from.

Recruiters

In my experience, as a graduate it is better to send your CV around yourself. Because at the end of the day, that is what most recruiters are going to be doing for you at that stage in your career. This is how recruiters work. They are paid by your employer (usually after your probation period) a percentage of your salary for the first year. In other words, when you are hired, your employer is paying you and the recruiters the commission. Now, if you are a grad, in my opinion it is better for you to apply direct than it is through a recruiter. For one, it will be cheaper for your employer and two, if you apply direct it shows you took the time to go through their website and an employer feels you actively want to be there rather than being thrown a job you may or may not be interested in just to get your foot in the door. Later in your career, they can be super useful. Sometimes they have jobs that will never be advertised on company websites and they can do a lot of the adminy stuff if you are busy. But again, you are more likely going to want to take advantage of this in your later career rather than as a graduate.

And that’s that!

Well I hoped this little opinion piece helped and wish you good luck to you all applying for your first gig in games! If you are a grad and need advice or fancy a job working with yours truly at Mediatonic then you can contact me over on LinkedIn

Image result for thumbs up

Share

Get Shifty (Bitwise Operations)

Image result for get schwifty

As I fired up my pc today I actually looked at those post-it notes that have been sat on my desktop. And one of those little tasks was “Stuff I need to brush up on – C# Bit Shifting”. Have you ever used a bitwise operation? I have maybe once. Have you needed to do a bitshift in real life? On the other hand, have you ever been to a coding job and have to do one of those coding tests and it had bit shifting is on it? Yeah ok. Essentially, it is one of those things that in 2017 (or nearly 2018) you are unlikely to have used bit shifting, etc day to day, but it is one of those things that it is kind of useful to know. I was super rusty on it because I mainly do gameplay programming, graphics and SDK integration inside of Unity day to day. The closest I come is using Flags.

Anyway, to the plot!

So what are Bitwise operations?

Well they are operators like +, -, * &&, etc, etc that operate on ints and uints at a binary level. This means that they operate upon the actual digits of a binary integer.

To put it another way. See these binary numbers I stole from google images:

Image result for binary numbers

The bitwise operators operate on the binary numbers. Get it? Well, here is the binary table, to remind you of how binary number are represented:

128 64 32 16 8 4 2 1
1 1 0 1 0

Basically, the operators change where the ones and zeroes go in a binary number.

So let’s look at some of these operators! We are looking at operators in C#, because C# is a beautiful language.

Bitwise AND (&)

The & operator compares each binary digit of two integers and returns a new integer with a 1 wherever both numbers had a 1 and 0 anywhere else. Let’s look at 2 numbers:

128 64 32 16 8 4 2 1
 0  0  1 0 0 1 0 0

The above number is 36.

128 64 32 16 8 4 2 1
 0  0  0 1 0 1 1 0

And the above number here is 22.

If we use the & operator on both, we take wherever both numbers had a 1. This produces 4.

128 64 32 16 8 4 2 1
 0  0  0 0 0 1 0 0

Basically, the operators change where the ones and zeroes go in a binary number.

Sure OK. But why is it actually useful? Well we can look in the context of flags.

A flag is a special enum that can hold multiple values at a time.

[Flags]
public enum AttackType
{
    NoEffect = 0
    Melee = 1,
    Fire = 2,
    Ice = 4,
    Wind = 5,
...
}

Imagine we have a JRPG. In a JRPG abilities have elements and abilities. Abilities could have multiple elements. We could use a flag for that. Say we want to check if an ability has Fire and Wind in it. We can use the bitwise & operator.

int mask = AttackType.Fire | AttackType.Wind;
bool isFireAndWind = (attackType & mask) == mask

The above bool will return true.

Bitwise OR (|)

The | operator compares each binary digit across to integers and gives back 1 if either of them are 1. Unlike AND where both have to be 1, 1 could be in well one or the other.

128 64 32 16 8 4 2 1
 0  0  1 0 0 1 0 0

The above number is 36.

128 64 32 16 8 4 2 1
 0  0  0 1 0 1 1 0

And the above number here is 22.

You know, like last time. If we apply OR.

128 64 32 16 8 4 2 1
 0  0  1 1 0 1 1 0

The above number is 54.

Makes sense?

Cool. Let’s have a look at our JRPG example again:

_ability.AttackType = AttackType.Fire | AttackType.Wind;

The above code is setting the ability’s attack type to Fire and Wind. The game can then check this later when doing the battle calcs.

Bitwise NOT (~)

The bitwise ~ operator is different than the previous ones we have looked at. Where as the & has been similar to && and the | has been similar to ||, the ~ operator is similar to the ! operator. You know how the ! operator can flip a boolean from true to false. The ~ operator reverses a binary value.

128 64 32 16 8 4 2 1
 0  0  1 0 0 1 0 0

The above number is 36.

The same as last time. If we apply the operator to it we get:

128 64 32 16 8 4 2 1
 1  1  0 1 1 0 1 0

OK cool. I mean to me this is not the useful part of the NOT operator for gameplay programming anyway.

If we look at our JRPG example with our flags. You can use the NOT operator to unset a flag.

_ability.AttackType = AttackType.Fire | AttackType.Wind;
_ability.AttackType &= ~AttackType.Wind;

The above will remove the Wind element from the ability.

Bitwise XOR (^)

The ^ operator, like the previous operators, compares the binary digits of these numbers. If only one of the two comparing integers in the binary is a 1, it inserts a 1 into the result. Otherwise a 0 is inserted.

128 64 32 16 8 4 2 1
 0  0  1 0 0 1 0 0

The above number is 36.

128 64 32 16 8 4 2 1
 0  0  0 1 0 1 1 0

And the above number here is 22.

You know like all the previous times.

128 64 32 16 8 4 2 1
 0  0  1 1 0 0 1 0

And the result is 50.

Cool. So in regards to our example, the EXCLUSIVE OR is true only if the other is true, but not both. We can use it to toggle a value inside a flag.

_ability.AttackType = AttackType.Fire | AttackType.Wind;
_ability.AttackType ^= AttackType.Wind;

The above code “toggles” Wind.

Bitwise Shifting (<< / >>)

Bitwise shift operators work a little differently than before. Instead of comparing 2 integers, these operators shift an integer.

128 64 32 16 8 4 2 1
 0  0  1 0 0 0 1 1

The above number is 37. If we 37 << 3 we slide all the digits left by 3

128 64 32 16 8 4 2 1
 0  0  0 0 1 1 0 0

And the above number here is 12. You can also right shift the integer >> by any number that does a similar thing.

This is a harder one to find a decent example, or at least I cannot think of a time I have actively had to use it. If you look at the maths of bitshifting though, you can use it to do calculations. Shifting the bits of an integer number left by one place is the equivalent to multiplying the number by 2, whereas shifting it right is equivalent to dividing it by 2. I guess an example could be hardware that was used back in the day. This hardware did not have floating point support and thus in order to do any arithmetic, you had to do bitshifting. Wierd huh?

Again, I have never needed this in my day to day, but it is one of those things I have seen in programming tests. I have theorised why this stuff is probably still on tests in the past and the whole “programming test” is a post for another day.

Regardless, I hope this post will be helpful in some way when understanding bitwise operations, flags and bitshifting.

Share

A summary of the Rendering Pipeline for Humans

Image result for Xenoblade chronicles 2

I just started playing Xenoblade Chronicles 2 on the Switch. It is pretty neat. Anyway In this post I wanted to talk about the rendering pipeline, or rather put it in simple terms that less tech savy people can understand.

In a game, rendering can be seen as the process of drawing a scene on a computer screen. It involves a mathematical combo of geometry, textures, surface treatments, the viewers perspective and lighting. In other words, it is a combo of the geometry that forms the meshes made in Maya, Blender, whatever, the textures that are applied to those meshes, shaders that do some neat stuff to make it look cool, where the camera is looking and how the scene has been lit. The Rendering pipeline then represents the flow of processes that take place to show a virtual environment on your screen. Basically, how your games console draws that sweet Vidja Game on the screen (bit of an oversimplification, but you get the idea).

In simple terms, there are three stages of the pipeline:

The application phase runs on the CPU (generally) and deals with all your gamey stuff. This includes moving object, input, collisions, etc. This then affects the geometry part of the pipeline that basically determines where stuff is. It involves calculations regarding the position of the camera, the transformation, scale, rotation of each object and all the mesh data we have. The rasterisation phase then actually displays the image on the screen. It goes through some more in-depth processes to get that desired image on to your sweet 43inch Ultra HD TV.

Now it is a bit of a cop-out to say “more in-depth processes” so let’s have a look at what those actually are. We are going to look deeper into both the Geometry and Rasterisation parts of the pipline.

I know what you are thinking.

Those sound like pretty technical things! S’alright, we are gonna look at each one individually. Imagine we are trying to render a model on our screen. Maybe it is a model of a character. Or a car. Or big massive gothic cathedral. Or an awesome mech. I will probably refer to the model as just a “character.” This is the process that happens to get it on the screen.

  • Geometry – So we kind of looked at this phase earlier on. In deeper terms, a model is made out of polygons and vertices. These are shapes that make up a 3d model. In other words they describe the structure of your game character. Not in gameplay terms but how the shape of the character should be in the game terms. The geometry phase processes all of these polygons and vertices so that data can be used in other phases.
  • Illumination – This is where the models are coloured and lit. In other words, you could see it as textures that represent the details of a character, like Link’s skin and clothing in Zelda are applied to the model and the details of how the model should be lit by light sources in the game like street lamps, the sun, etc are applied. This is the process where fancy programs called shaders (not Destiny 2 shaders, CURSE YOU BUNGIE!) can make models in the game look real nice.
  • View Perspective – The model is processed through a viewing perspective, or rather a camera. The process looks at how the camera is set up, whether it has an Orthographic projection (often used for 2D games) or Perspective projection (often used in 3D games) and how big the field of view of the camera is.
  • Clipping – This process looks to see what parts of the model are outside of the cameras viewing volume or rather what parts of the character can be seen by the camera. The bits that cannot be seen are clipped away.
  • Screen-Space Projection – This where we take a projection of the 3d object and put it into 2D space so it can be displayed on a screen. Monitors fundamentally show a 2-dimensional image so we are mapping the 3d model into this space and producing a 2D image to be displayed on the screen.
  • Rasterisation – This is where fancy post-processes occur. A post-process is an extra visual technique that is applied to the image and includes techniques such as bloom. These techniques are applied to the 2D image created by the Screen-Space Projection phase.
  • Display – This is the final image.

And yeah that is that really. I hope this helps understand how the rendering pipeline works a bit better.

 

Share