Meet Brandon Fogerty, Video Game Graphics Programmer
Brandon has been engineering interactive 3D graphics since 2006. From his early days programming avatars for clients like Motorola and NASA, to his recent cutting-edge games for Nintendo 3DS and smart phones, Brandon has been pushing the boundaries of 3D hardware for nearly a decade.
We’re speaking with him today to find out what it’s like to code professional 3D graphics, how to work successfully with artists and designers on a game team, and how you can start your own career as a Video Game Graphics Programmer.
What do you do each day as a Graphics Programmer?
Generally I wear multiple hats. Some days I work closely with the art department, to design new shaders and build better tools to support their workflow. Other days I work with the design group to implement new gameplay mechanics, and likewise building better tools to make their jobs easier.
Find game schools near you
What do you like most about the job?
When I first entered the game industry, I saw engineers come up with solutions that worked but were not easy for the artists and designers to work with. I often heard engineers say “That is Art’s problem.” This caused people to complain, work longer hours, and be sad. They didn’t always look forward to working with their studio’s tech.
I wanted to fix that. I love to serve others and I have a passion for making a game developer’s vision become reality. So part of the reason I really enjoy my position is that I get to work closely with art and design to understand their problems, and hopefully come up with a solution that they like.
How can you be sure you’re creating what the artists and designers need?
Whenever an engineer writes code, they should first understand exactly who their customer is – and they need to treat them like a customer. In order to make a customer a product that he wants to use, you really need to understand his problem and try to feel his pain.
Often you need to step outside of your code environment and learn to use the art tools the way the artists use them. You need to break down their task and do it yourself the way they did it. That helps you to really understand the problem from their perspective. Once you feel their pain, then it’s time to start planning a solution.
However, coming up with a solution is a team effort. As an engineer, I am not an artist, therefore I don’t think like an artist. Hopefully I understand their problem and feel their pain, but if I lock myself up in a cubicle and just code away, the artist probably won’t be very happy with my solution even if it works – as good as my intentions might be. So I like to do “whiteboard prototyping” before writing any code, because it is much less painful and expensive to make mistakes on a whiteboard than to make design flaws in tech.
What exactly is whiteboard prototyping?
For example, if I am developing a new tool for the art group, I want to design the tool on a whiteboard and figure out what inputs they need and what each button will do for them. Generally when I prototype on a whiteboard with my customer, whether they be artists or designers, I find they don’t necessarily know exactly what they want. So I start by diagramming the UI the way I think it should work, so we have something to start with.
At that point I explain to them in person how I’m imagining it will work. Often, the artists or designers walk up to the board and make improvements on the fly – erase screen transitions, add buttons, remove functionality they don’t need, etc.
At the end of the process, the customer has designed the solution they need and all I have to do is implement it using the whiteboard prototype we developed together. Generally, once the solution has been implemented, they are happy with it because they designed it and it works exactly the way they think it should.
Are their any “gotchas” with the prototyping process?
Yes! First, you need to become familiar with their tools. For example if an artist says “Hey, I wish I could do such-and-such in Maya,” you need to get access to Maya and try doing what they are doing. You don’t need to be a Maya expert but at least you need to be familiar enough with it so you can speak the same language as your artist.
It is also generally a good idea, if you can, to get a couple of different artists from other game teams to offer their input on how the tool/tech should function. You may hit a grand-slam for one artist, but it may not be a good solution for other artists. So if you can, try to ask other folks from the same customer discipline to give their feedback.
What advice would you give to somebody who wants to become a Video Game Graphics Programmer?
They should become comfortable with math. Don’t just memorize formulas – understand intuitively what the formula means. The more mathematical building blocks you can get under your belt, the better. It will allow you to create even more powerful graphics tech.
I would also recommend getting your hands dirty and start writing some shaders in GLSL Sandbox. Start simple and learn from others. Before you know it, you will be creating some pretty cool stuff!
While sites like GLSL Sandbox and Shadertoy will help you stay current with advanced techniques, you should also try downloading a professional game engine like Unity 3D and learn how to work with a professional video game rendering engine. The kind of shaders you write on GLSL Sandbox and for a video game are going to be different so you need to understand what you can and can’t do in a professional game engine.
Some folks like to create their own graphics engine from scratch using C++. There is value in that because it helps you understand the low level details. However as video game graphic engines become more and more complex, you may end up chasing your tail trying to reinvent the wheel and get lost in the details. So start from a high level with a professional engine like Unity and work your way down into the low level details.
I find the best people to teach engineers how to develop shaders are artists who tend to be a bit technical. So try to find some and download their knowledge.
Do you think it’s best to choose a specialty like Graphics Programming and stick to it?
My company embraces the T-Shaped engineer. That means we might be an expert in one discipline of engineering, but we need to be at least comfortable working in others.
Technology is always changing and improving. I believe engineers should always be learning, and willing to push themselves outside of their technical sphere.
Where do you look for inspiration when programming graphics?
Often it is wise to look into other industries to see how they solve problems and see if you can extract any value from it. I mostly work on mobile games which is a bit behind the PC and console arena in terms of graphic capabilities. On the other end of the spectrum is the movie industry. Since they can afford to render frames slower than the game industry, they are able to push the boundaries of visual fidelity.
The game industry generally takes “tech hand-me-downs” from the film industry, once gaming hardware has caught up with movie hardware. For example, the CG (computer graphics) movie industry used the concept of programmable shaders for quite some time before it became standarized in the game industry. Furthermore, the way CG films render their frames is quite different from the way we do it in the game industry. I believe eventually we will catch up.
In fact we’re already seeing a push towards more physically-based shaders. My hope is to thread myself a bit more and take time to learn new graphic engineering techniques from engineers in the movie industry and find ways to keep myself current or apply what I have learned in my own graphics tech.
What books do you recommend for beginners to learn video game graphics programming?
Unity Shaders and Effects Cookbook
by Kenny Lammers
Shaders promote gaming realism but are not always easy to implement. This book seeks to change that with a cookbook approach to teaching you how to create stunning Shaders using your knowledge of Unity3D.
3D Math Primer for Graphics and Game Development
by Fletcher Dunn
This engaging book presents the essential mathematics needed to describe, simulate, and render a 3D world.
Ray Tracing from the Ground Up
by Kevin Suffern
This book takes readers through the whole process of building a modern ray tracer from scratch in C++.
Shaders for Game Programmers and Artists
by Sebastien St-Laurent
This is the first book approaching the topic of shaders in an accessible manner. It takes a simple, easy-to-follow approach to the high-level language of the topic.
Getting Started in 3D with Maya: Create a Project from Start to Finish – Model, Texture, Rig, Animate, and Render in Maya
by Adam Watkins
Deliver professional-level 3D content in no time with this comprehensive guide to 3D animation with Maya.