Job Spotlight

Games Programmer
Dependant on experience
UK - London

OPINION: So you want to be a graphics programmer

OPINION: So you want to be a graphics programmer

Experienced developer Keith Judge offers advice on landing that top job

Recently, a university undergraduate asked me on twitter for advice on becoming a graphics programmer within the games industry. I wrote a fairly detailed email response and thought the information was good enough to make an article for AltDevBlogADay. This is all my personal opinion of course.

If you’re at university, you should research whether there’s a programme to do a summer or year long internship at a games studio.

There was nothing like that when I was at the University of Liverpool ’97-’00 (or I wasn’t aware of it), but I’ve seen people come through that kind of programme with much greater practical game development knowledge and it goes a long way towards persuading an employer to take you on. EA, Lionhead and other large companies tend to run this sort of programme so look on their job pages too.

Beware that sometimes companies don’t respond to intern applications for various reasons (team is deep in crunch, budget spent elsewhere, etc) and places are extremely limited.

Your best bet is to make a graphics demo, either on your own or with a small group of people. You learn more by doing than by just reading. Pick a modern graphics technique that interests you and implement it.

Even better, do more than one. This is also great training for motivating yourself to get a project finished which is often the hardest part of games development, for all disciplines. Make sure you’re prepared to talk in detail about the choices you made, performance (in milliseconds, not frames per second!), quality, alternatives and trade offs in a job interview.

When I was in university I did a straight computer science course – there were barely any games courses available back then, but I still think that employers still value computer science graduates above games graduates as there’s a perception that you learn a greater range of software engineering skills. This could be a misconception though, as games courses are a lot better than they used to be, but you may have to fight your corner in an interview and prove you know your stuff (and not just the curriculum you were taught).

Computer science courses also tend to be quite maths heavy (I would hope games courses are similar), which is vital for graphics programming. Make sure you understand homogeneous coordinates, matrix maths, dot products, cross products, quaternions, normal vectors, tangent bases, etc and how these things (and countless others) are useful for transforming and lighting geometry. Learn big O notation for algorithmic execution time, understand colour spaces, gamma correction, what high dynamic range means and so on. Learn some basic lighting models - Lambert, Phong, Blinn, etc.

Software

In my experience, Visual Studio is pretty much universal as a code IDE (except for Apple, Linux, Android and Nintendo games), though you can of course use your favourite editor if you really want to, as long as you know Visual Studio. There is a free Express edition available from Microsoft (http://www.microsoft.com/express/Windows/), so it won’t cost you any money to learn. The PS3 is a little different as there is a separate hardware specific debugger, but you should be able to learn that on the job.

You should be familiar with a source control system. Perforce (www.perforce.com) is a good choice as a lot of game studios use it and it’s free for single users. Try to learn it on a project with other people as merging, branching and integration are good skills to have. With all source control systems, similar concepts apply so it’s essential knowledge to have. Shockingly, my university course never mentioned source control and I was naive enough to believe that people just shared code over the network or on floppy disks.

As you’re unlikely to have access to devkits at home or in university, you’ll most likely be learning your skills on PC. In what may come as a surprise from someone with a decade’s game development experience, I don’t know much OpenGL as there’s never been a pressing need for me to learn it. Most PC games use DirectX, though if you learn DirectX 11, make sure you also learn DirectX 9 as it’s still current for Xbox 360 and many PC games still use it to support the dwindling, but still large Windows XP market. DirectX 10 is completely superseded by DirectX 11, so it is not worth learning (you can write DirectX 11 games for DirectX 10 hardware, and even DirectX 9 hardware).

It’s also definitely worth learning a graphical debugger. PIX for Windows isn’t as good as the Xbox 360 version, but there are fantastic free alternatives (Intel GPA - http://software.intel.com/en-us/articles/intel-gpa/, Nvidia Parallel Nsight - http://developer.nvidia.com/nvidia-parallel-nsight). These tools are not just for performance tuning on the GPU – they’re also for debugging your draw calls, working out why something doesn’t draw, why it looks wrong, and so on. You can also learn about how a GPU works as you can see all the renderstates, shaders, meshes, textures, etc for any draw call in a frame and really understand what the GPU is actually doing with the data you give it.

Other Duties

As a graphics coder you’ll probably have to do some tools work too, working with mesh compilers, animation compilers, plugins for Maya/3DS Max or in-house editors for the artists to use. Remember that your job is to provide technology to support the artists in their daily work, so it needs to be presented in a friendly manner. If you give your art team a tool that lets them tweak some coefficients of a fancy rendering algorithm and they have no idea what the numbers mean, they probably won’t use it. Also, technical artists are your friends – they’re the best people to talk about requirements for artists and to work out the best workflow for the content creators.

It’s also good to learn general performance and optimisation techniques as this often falls to the graphics/engine team to do. You probably won’t have to write any (or very little) raw assembler, but you ought to be familiar with what the C/C++ compiler is doing to your code, how to spot problems and what to do about them. For example, one of the biggest performance problem will be L2 cache misses (you lose hundreds of cycles per miss on all modern hardware), so learn techniques to reduce them (almost always changing the data, not the code is the fix).

Online Learning Resources

Online resources are a goldmine, and there’s much better stuff out there than there was when I was at university as a lot of companies publish papers on their techniques which are pretty useful stuff. A few examples…

http://www.valvesoftware.com/company/publications.html
http://publications.dice.se/
http://www.crytek.com/cryengine/presentations

Also there are a few good blogs posting regularly about graphics. A few good examples…

http://aras-p.info/blog/ – Lost in the Triangles. Aras Pranckevičius’s blog (a lead programmer for Unity).
http://www.realtimerendering.com/blog/ – Real Time Rendering has good information (also the book is a worthwhile read!)
http://www.humus.name/ – Another good graphics programming blog.

Make sure you read the relevant presentations from GDC (very useful) and SIGGRAPH (slightly less useful as a lot of it is for non-realtime graphics, but useful as a crystal ball for future techniques).

My last handy tip is that if you live near a big dev studio, find out which pub they go drinking at after work and join in on a Friday night. You’ll learn a lot just chatting with developers. You can also join twitter and talk to many games developers there who are willing to share their experience.

[This article was lifted from #AltDevBlogADay, a communal blog where industry professionals can write about the craft of game design]

Advertisement

Brilliant article

posted by Fiona May 11, 2011 at 12:36 pm
1
Fiona

I think there should be more games professionals talking about their own experience and giving advice to young grads trying to enter the highly competitive world of games. I think this article is a brilliant example of real career guidance that will be useful to many students wishing to pursue their dream job! In our own small way, we're trying to help as well with our career info and jobs site http://playfolio.com Thanks for this article, Fiona

  • + 0 
  • - 0 
  • 0

Yep

posted by Permion May 11, 2011 at 1:08 pm
2
Permion

Brilliant advice in here, especially for students

  • + 0 
  • - 0 
  • 0

Nice

posted by Ceiga May 11, 2011 at 3:10 pm
3
Ceiga

Could you also do one for environment artists please.

  • + 0 
  • - 0 
  • 0

How does one learn Visual Studio?

posted by Wolfos May 11, 2011 at 4:38 pm
4

I mean, there wasn't much learning in it for me. I just copy/pasted my code in there, compiled it and my Windows port was done.
Now back to a proper IDE: XCode.

  • + 0 
  • - 0 
  • 0

GCC & Opengl first

posted by eddie May 11, 2011 at 7:04 pm
5
eddie

The advice to push both Visual studio and Directx (and even windows) is terrible advice for new developers imo. GCC will throwout far more non-C or C++ compliant errors under normal use than Microsoft's semi-standard compliant compiler; OpenGl is also the only industry standard graphics API that supports all major platforms, (Mac, Linux, Windows, PS3, Wii excluding 360) and has the best books available in taking the novice from zero to knowledgeable (namely the Opengl red book, blue book and orange book) and was once the only PC API worth its salt for games (Quake3, Doom3, Unreal, Half Life, etc).

Getting a job in games might work with the advice given; but actually knowing the fundamentals would be better achieved with Kernigan & Richie C, OpenGL books, Computer graphics Principles in Practice, (commercially free use of) GCC with Eclipse on either Mac or Linux and a good grounding Structured and OOP software design.

  • + 0 
  • - 1 
  • -1

@eddie

posted by Wolfos May 21, 2011 at 3:21 pm
6

@Eddie: ID-software managed to make OpenGL work on XBox 360 with their latest engine, so it's supported by ALL major platforms.

  • + 0 
  • - 0 
  • 0

Learn fundamentals first!

posted by John Jun 08, 2011 at 6:07 pm
7
John

I have to agree with Eddie. To push Visual Studio and DirectX on new developers is poor advice.

This title of this article caught my eye and no offense Kieth but when I read that you had graduated in 2000, it explained why you would have pushed those techs and omitted some very important basics. You are from a much younger generation of game developer. I started in 82'.

BTW, I own and operate a small game studio (10 employees) and in its 8 years of operation and many applicant interviews I can say that I have never encountered a game design school grad worth giving an internship to, non the less a job. Harsh, I know, but its the truth.

  • + 0 
  • - 0 
  • 0

Leave a Comment