Graduate Software Engineering
Projects for Students who want to get into the Games Industry
Physics Programming:
- Bother with low-level stuff!!! Collision detection, broad-phase pruning and optimizations in general do not only apply to physics programming but to the whole range of game queries and deep understanding and optimizations can be a great help.
- Constraints modelling and solver. Those even if they exist in packages require the level of Math engineering we could expect from Linear Algebra and Multivariate calculus: Jacobian of constraints, Conjugate gradient solver or any other faster.
- Fluids simulation understanding of Differential equations and solvers: Water, Smoothed particle hydrodynamics, clouds, smoke, etc.
- Lagrangian dynamics for a better expression of constrained dynamics.
- A good solid understanding of Newtonian mathematics is essential; you should be capable of coding the basics of a physics integrator yourself. Although you would not be expected to code a fully complete system from scratch yourself, you should build upon available "off the shelf" middleware & opensource and apply that to game scenarios.
- Seamless transfer from simplified physical model to complex physical mode (eg. car racing -> crash)
- Expandable systems for defining interaction between objects
Graphics Programming:
- Graphical techniques such as spherical harmonics
- Procedural generation of real-world geometry (anything from growing trees to constructing a city from combinations of pre-fabricated parts)
- Using advanced GPUs simulate physical effects such as subsurface scattering and partial refraction entirely on-chip (in shader code or similar)
- Water simulation – deep water waves, ripples on still water, streams/jets, etc.
- Buoyancy simulation – addition of liquid buoyancy forces to standard rigid body systems.
- Blood simulation – viscous liquid sprays, streams, sticking/sliding down walls, pooling on floors, etc.
- Global illumination, radiosity algorithms as well as speed-up techniques. Irradiance caching, use of graphics hardware to integrate irradiance, etc.
- Perfect understanding and demonstration of all current shadows techniques.
- Understanding and demonstration of the use of lighting transport (Scattering, BRDFs, optimizations, Photon mapping, etc.)
Gameplay/Game Systems:
- AI : Awareness of surroundings – navigation, avoiding other objects, cover, tactical positioning
- AI : Navigation and path finding algorithms including collision volume of the object moving.
- Character control is a good one - integrating physics and animation and still getting a responsive character
- Machine learning / genetic algorithms could well be a useful area
- In-game camera behaviour projects
- Animation and rag-doll interaction – blend in/out.
- Try to build systems which are robust under a wide range of conditions, not just one set-piece demo (or, at least, give examples of methods that could be used to expand the range of usable scenarios)
- Reversible gameplay – build a game engine which allows not only the game state to be recorded, but also arbitrary time rewinding/fast-forward/etc, with the ability for simulation parameters to be tweaked as the game is running. For example, a strategy game where the AI can be asked to play itself and then various different scenarios and AI options tested. Maybe allow “what if” scenarios, where the user can change a setting “in the past” (“what would the world look like now if this unit hadn’t died 5 minutes ago?”). Lots of interesting possibilities for investigation into “hard” theoretical game-theory, and things like probability maps.
- Instinctive behaviours – hierarchical levels of behaviours for animals/monsters in the game world, prompted by stimuli e.g. hunger, thirst, sound, light, heat, etc. Possibly extend this to designing puzzles based around predicting/influencing this behaviour.
- Audio – use DirectSound or similar to create a realistic 3D sound scene from a simple visual mesh, including effects such as obstruction and occlusion. Extend this to create a game level/puzzle that is purely audio, i.e. takes place in a pitch-black room.
Tools Programming:
- Using a dependency maintenance system to perform build processes in the most efficient way possible (i.e. doing only what is strictly necessary to update the output for changes to a specific source file)
- Developing an architecture to enable automatic use of multiple threads and physical CPUs to run game-level code whilst providing limited guarantees of the safety and correctness of concurrently executing tasks
- Building a system which allows fine-grained tracking of the process of compiling data from source assets to target-ready format, and back-tracking (for example, point at a polygon in-game and have the system highlight the same polygon on the original Maya model)
- Create a simple graphical AI editor that uses linked behaviour ‘black-boxes’ to specify how a game entity behaves. See ‘Instinctive Behaviours’ above for some simple behaviour ideas.
- Create a simple graphical messaging system editor that links message generators in the game world with simple ‘wiring’ and logic. An example would be a security camera system with motion sensors that is linked to a central control room, which in turn can send out security droids to the position where an intruder was detected.
Audio Programming:
- Implement a mixing system as part of a game where the gains of individual sounds change based on the in-game action. Balance the sounds so that the most relevant ones are emphasised
- Implementation of a streaming system where the sound data is read in small chunks from large files but playback is continuous
- Demonstrate Doppler effects by changing the pitch of a sound appropriately as it moves past a listener
- Implement an IIR low pass filter that can be used offline with a wave file
- Understand the principles of psychoacoustic compression (such as that used in MP3s)
Mathematics:
- Understanding and demonstration of the use of Wavelets basis for lighting: 2d wavelet transform on cube faces or spherical wavelets.
- Understanding and demonstration of the use of solvers: Differential equations, linear systems solvers, linear programming and quadratic programming solvers. This must be demonstrated to be useful given the constraints of memory and speed existing in games and console hardware.
- Understanding and demonstration of the use of Spherical functions basis: Spherical wavelets, Hemispherical harmonics, spherical harmonics, etc.
- Signal processing: 1D, 2D, 3D, transforms, predictors, fittings, filtering, post-process effects.
Collision Detection:
- Investigate existing Convex/Convex methods and why not propose better/new solutions, handling continuous movement is also interesting.
- Non-convex collision detection, hierarchies
- Penetration Distance estimation
- Spatial partioning and optimizations
Other topics of current relevance to programming @ EA European Studios:
- Real time global illumination
- Intelligent camera systems
- Physical modeling for animation
- Real time rendering of natural phenomena
- Procedural asset generation
- AI that suspends disbelief
- Collision co-processing
- Asset independent culling and visibility pipeline
- A procedural rendering framework
- A level of detail rendering framework
- Data amplification
- Real time production pipeline with very large database backend
- Multi-core processing for any above.
- Multi-core game architecture.
- Streaming game architecture unifying IO and task processing
- Asset creation from real world objects/environments
- Rendering exploiting visual perception
- Content exploiting human cognition patterns
Tips for Students who want to Program @ EA:
We are always keen to see a genuine interest in making games.
Someone who has tried to create their own little game demo in Direct X / Open GL (useful graphics libraries which you can obtain for free), is going to stand out and also learn a lot.
Level editors – play around with Unreal / Neverwinter Nights / Radiant etc. to see how a game is built.
C++ is preferable, but if you want to be a game-play programmer, then one of the main things we’d look for is that you’ve put passion into your demo, and that it’s fun to play.
All candidates should understand their responsibility as a developer will be to deliver Unit Testing of their code before submission to a software testing team.
Whatever subject you chose for your projects, we like them to be well engineered - good analysis of the problem, good technical designs, thoroughly tested and writing clear, well commented code is essential as it will be open to scrutiny.
Relevant Books:
- ‘Effective C++’ and ‘More Effective C++’, Scott Meyers.
- ‘Game Programming Gems 1-5’
- GPU Gems – Edited by Ranima Fernando – especially if you are interested in “Next Generation” shading and rendering techniques.
- Mathematics for 3D Game Programming & Computer Graphics – Eric Lengyel – covers mathematical concepts that we use in games
- ‘Graphic Gems 1-5‘
- Hint books – e.g. Halo2, HalfLife2, Zelda – buy these, and look at the CONTENT and SCOPE of a game first.
- Mythical Man Month – old, but still realistic and busts the bull on s/w engineering, while emphasizing teamwork. XP (extreme programming), and Agile Development are also modern, relevant methodologies to get texts on.
- Peopleware – DeMarco – how to develop s/w, emphasizing that it’s people who do development. I haven’t read it yet, but it’s so highly recommended that I’ll put it here too.
- Algorithms – Sedgewick – or several other such titles on Algorithms or Data Structures - probably the least well understood area of programming.
- Computer Graphics/Principles & Practise – Foley & Van Dam – or several other graphics complete overview type books.
- The Animators Survival Guide – Williams – actually an art book, so all the more reason for programmers to understand this.
- Writing Solid Code - Steve Maguire : not everything is entirely applicable, but there are a lot of valuable things in there.
- Code Complete 2 - Steve McConnell is a very good book. A bit like 'Writing Solid Code' in that not everything is applicable, but there is plenty of valuable information. It moves through many topics including class design, loops, refactoring, naming conventions, layout and style, commenting, defensive programming, testing, human factors etc. Not necessarily one to be read cover to cover but a great reference book.
- High Performance Computing - Kevin Dowd, Charles Severance : quite old and sadly no longer in print, but a great introduction to optimizing compilers and vector/parallel processing. A few seem to be available through the marketplace on amazon.co.uk most of the time.
- C++ for Game Programmers
- Game Architecture and Design, Andrew Rollings and Dave Morris
- C++ Coding Standards, Herb Sutter and Andrei Alexandrescu – this is pretty much in line with the EA coding guidelines
- Exceptional C++, Herb Sutter – covers best practices and gotchas similar to Scott Meyers’ books
- More Exceptional C++, Herb Sutter – as above
- Computer Graphics and Virtual Environments – a good computer graphics book from a new perspective
- SALAS and HILLE’S CALCULUS ONE AND SEVERAL VARIABLES
- Game Physics by David H. Eberly
- 3D Game Engine Design, Second Edition : A Practical Approach to Real-Time Computer Graphics (The Morgan Kaufmann Series in Interactive 3D Technology) by David H. Eberly
- Collision Detection in Interactive 3D Environments (The Morgan Kaufmann Series in Interactive 3D Technology) by Gino van den Bergen
- Realistic Image Synthesis Using Photon Mapping -- by Henrik Wann Jensen
- Head First Design Patterns by Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates
- http://safari.oreilly.com provides a cheap and easy access to online programming books.
- http://www.cprogramming.com/tutorial.html is also useful.
How to apply:
If you are interested in knowing more about opportunities within the UK studios, please contact our University Relations Manager, Jenny Brown; jbrown@europe.ea.com
To see what we do, visit www.eaukstudio.com and click "MEET EA" - that will let you know the studio developers do on a day to day basis and check out the EA Academy website - www.jobs.ea.com/eaacademyeurope for tips on how to apply and the types of roles we offer.
Also, as someone who could potentially be of interest to EA in the future, you can upload your details onto EA’s global talent pool - go to www.jobs.ea.com, select "Europe" on the left, then "Create and Account" on the right. We don't want to lose contact; and you can also update your details as you progress your studies / career.
I would definitely recommend that you set up a website to display your projects / demo / portfolio; it's undeniably the best medium to showcase your work, as you remain perpetually in control of its contents, it can be simultaneously delivered to a variety of hiring managers within game teams of various locations, and is less likely to become lost in transit, or filed away.
Thanks for your interest in EA!
“GET IN THE GAME!” – view our vacancies @ www.jobs.ea.com
Brajesh Lal
|