Hi, I'm Jon Moore, and today I'm going to be talking to you a little bit about my job as a graphics engineer at Iron Galaxy Studios. A little bit about Iron Galaxy first, we've got two offices in Chicago and Orlando, and we're currently at around 110 full time employees. And the company was kind of made out of the ashes of the Midway bankruptcy in Chicago. And the focus of the company because of that is try to be a company you could retire from if you wanted to. Trying to be more stable than the average game development studio. Part of that is that our work is super diverse. We're a mid-sized internal projects include things like Wreckateer, Killer Instinct, and Divekick. But that's usually up to only about 60% of the studio working on a project like that at any given time. We also have projects like Capsule Force, Elder Scrolls Online being the most recent one to come out. We do contract engineering where we lease out specialists to other studios to work on now, big name titles like Destiny. And we've also recently gotten into publishing independent video games. Capsule Force just came out recently. Videoball will be coming out in the future sometime. So, a little bit about me. When I was a kid, I started getting interested in game development because I realized that my dream at the time of being a researcher at NASA like my uncle wasn't exactly something that I thought was that interesting when I actually realized what being a researcher entailed. So then maybe something more focused on creating something would be exciting to me, and I really liked video games. I started trying out computer programing and realized that this was actually something I might enjoy. So going through high school I started to read up a bit and eventually decided to come to Michigan State in 2008 when I graduated high school to pursue computer programming and and video game development as a serious career interest. And one of the things that I did when I got to Michigan State was that, for one, I started being involved in the local game development club as soon as possible. Started participating in 48 hour game jams, and events that the club put on, to just try start to get to know people and figuring out how to work on a team and make a video game with people that had similar interests. Similar to that, I also had a really important opportunity where I got a part time job in a lab making serious video games, as a programmer mostly, which I really wanted to work in big Triple-A games as a programmer or a designer when I graduated. But just getting involved in a lab doing game development was really important for me to start learning the ropes. As I went through college I started taking more and more computer science classes, working on games. I started realizing that I was frustrated that when I finally got to classes where I was working on games as one of my central projects as a component of my grade, that our games didn't look as good as the latest Triple-A game that had come out and I was trying to figure out how to solve that problem. I started learning more and more about computer graphics and rendering and engine programming as a result of that and figuring out how to do what the cutting edge techniques were. And I started to realize that that was actually what I enjoyed more than anything else. So I started seriously looking at that as a career. I had a chance to go to the Game Developers Conference my sophomore year and saw some talks that were really inspirational to me from other engine graphics programmers and started following that as a hard line. And then in 2011 I started looking for internships, applied to a whole bunch of places, got a few interviews. I also started blogging a lot just trying to practice talking and communicating my ideas about game development. And the CEO of Iron Galaxy actually happened to read one of my blog posts and reached out to me. I'd been interviewing at a few different places at the time. But Iron Galaxy ended up being a really good fit for me. I accept an internship, came out, started working on Ms. Splosion Man for iOS for the course of my internship. And then in 2012, when I graduated, I came back to Iron Galaxy full time as a graphics engineer. And I've been with the company for three years now. Currently, I'm working as the rendering lead on Killer Instinct. I've just become more and more involved in graphics and rendering over the course of the time that I've been here. So a little bit about what engine programming is as a career. So this is a job that you're basically trying to get at the most difficult core systems problems that you need to handle for shipping your video game. This is almost always going to be a job that involves working in native C++ code. I very rarely touch scripting languages like C# and Unity would be an example of a very robust scripting language. On Killer Instinct, we used all of the game play programming code and the technical design code happens in Lua. C++ layer is below that. And everything from file IO to rendering to core networking calls happens in the C++ part of the engine. And the way to think about this is that we build the systems that content developers making the game use. More specifically on the engine team, I'm a graphics programmer, which means that most of my time is spent specifically supporting artists. Because just because a company might spend a lot of money on a rendering team at like EA or Activision or whatever to make their games look good. The real secret to having a good looking video game is to have a team of amazing artists that are well supported by the programmers. So we spend a lot of time on investigation and optimization of things that are limiting to artists, like if they need to be able to have more triangles in their models. Or they need some sort of custom shader for rendering water. And that kind of ties into some of my time is spent on R&D for new visual effects for artists to use, or just overall quality improvements to how our games look. And something to realize about graphics programming compared to other fields in engine programming is that it actually requires a lot of specialized knowledge as a sub discipline that can be a little bit tricky to get into. Just like if you go and get a job and expect to get tasked out with things that will make you better at rendering programming, you really gotta have the drive to start looking at it on your own be like yes, this is something that I actually have a lot of interest in and enjoy. And then things will start to fall in place behind that. So if you're interested in either of these two things, I've got some advice. For one, definitely read this book. Game Engine Architecture by Jason Gregory. Jason Gregory was an engine program at Naughty Dog working on the Uncharted games. And it's not a perfect book, but it is legitimately the best practical primer for getting into engine programming in Triple-A video games. So if you're interested in rendering programming as a discipline, there's another book that you should read after you finish reading Game Engine Architecture. And that's Real Time Rendering. It's a little bit updated but probably due for a fourth edition sometime soon. But both of these books I read cover to cover while I was in school and it was one of the best decisions I ever made. The advice in each of these books is very relevant to the sub disciplines. So beyond those two main pieces of advice, definitely, in your own personal studies, and if you're taking classes in university, try to tackle some difficult subjects involved in the core skills that you would need to succeed on an engine team working on Triple-A games. Things like low-level computer architecture, being able to understand how a computer chip works on a very fundamental level so that way you can write code that's optimized for it specifically. Same thing with just learning about general C++ optimization strategies for modern computers. And another more recent one is multi-threaded programming is becoming very very important to be able to thread your systems to run in parallel across all of the cores on a CPU. Additionally, it's very useful to be able to understand each of the main components that makes up a game engine. So that way, whatever you get thrown at as a problem, you can work through it and figure it out. A big thing is that if you can write your own toy engine in your spare time, that's a huge boost to your knowledge about how all of these things will fit together and work. The other big piece of advice that I have is to get involved. I mentioned I got involved in the student club at my university, I started doing game jams, those were both excellent things that I did before I even really started taking serious courses leading me down the path towards engine programming. Another thing is I spent a lot of time on Twitter. I started really trying to pay attention to what the experts in my field were saying. A lot of people like to tweet out advice of hey, like this is a new paper that just came out. Or like new blog posts on ideas or just argue about even smaller things on optimization or features. And once you start identifying these experts in the field, read their blogs, start writing your own blogs. I mention that's how Iron Galaxy found me to actually start my interview process. And another thing is consider attending professional conferences. Game Developer's Conference has lots of great content and so does Siggraph for rendering. And that can be expensive. In college, I started spending a lot of time saving all of my money that I could to make sure that I could afford to go to GDC each year. But if that's not really feasible, make sure you just pay attention to the Internet. There's lots of slides and presentations that are available for free after these finish. For example, the advances in real time rendering course from Siggraph always posts an extensive selection of slides and course notes that are incredibly useful even if you didn't attend. A little bit about getting a job. Start a list of companies early on that you think might be looking for entry level people, at any level, that you would be interested in working for. And then once you're actually at the point where you're ready to be applying, you can start going through that list and seeing who's hiring or cold contacting them with resumes. Just seeing who might be interested. Plan on getting lots of rejection. I know a lot of people that had to go through at least 50 applications before they even got an interview. But when you do get interviews try to learn as much as possible from them to prepare for the next ones. I definitely flopped my first several interviews just because I wasn't familiar with the type of questions. I went to a presentation at my university about programming interviews, but the games industry has a lot more specialized questions than a generic programming job will. And definitely, in the midst of all of your job hunt, try to keep improving the quality of your work. The number one thing amongst my peers that I've noticed that I graduated with, was that the people that got jobs were the people that were persistent in making sure that even if they didn't get an interview or a job offer right away, they just stayed persistent at it and kept hunting. Kept working their work on the side, or finding a job in a related field, continuing to work their way towards their goal. And they got there eventually. So yeah, I guess that's my advice. Stay hungry, keep trying to learn. That's especially important in the path of my career, to just keep learning as much as possible. Even after I got my job at Iron Galaxy. Thanks for listening.