Firas Hosn, AI Game Programmer and Mentor at CG Spectrum, shares his experience of working on games in large teams and self-aware AI development as well as gives his tips to those who want to join Ubisoft's technical team.
My name is Firas Hosn, I'm an AI Game Developer currently working at Build A Rocket Boy.
I've been playing games most of my life, well over a quarter of a century now. As a kid, I always wanted to get involved in whatever was presented to me. From sports to science experiments, I loved immersing myself in any subject and really feeling like a part of it to better understand how it works. I would always put myself in that mindspace to figure out how it would feel if I was in the media I was watching and how I could change the narrative if I was the main character. The day that my parents got me an Atari, I finally got to interact with the medium the way I always envisioned in my head. I would move the character on the screen and control the narrative. That immersion got me hooked on games.
As much as I love art, I've no talent in drawing or animating or anything of that nature. Luckily, I love math, science and problem-solving. This led me to take computer science at university, for the sole purpose of creating a Nintendo game one day. At the time there wasn't a focus on gaming, the course was based on traditional computer science and software engineering. My passion for games led me to take an OpenGl class and begin to learn more about rendering and existing game renderers and libraries. Right after graduation, I began to work on a solo project, a multiplayer robot fighting game. That project helped me build confidence to apply for game dev jobs. Within a month of sending out CVs, I got hired as an AI programmer at Silicon Knights. Unfortunately, the game I was working on at SK got canceled, but while there, I did get to work on Too Human which earned me my first game credit. After two years at SK, I moved on to Ubisoft as an AI programmer on FarCry 3. While at Ubisoft, I helped ship Assassins Creed 3, FarCry 4, Your Shape, Splinter Cell Blacklist, FarCry Primal, and WatchDogs 2.
While at Ubisoft, I was fortunate to work on large teams with many developers across the world, and communicating with teammates from different disciplines or within my core team always came naturally. I've been fortunate to have worked with a lot of great developers, and I've absorbed a lot of knowledge throughout my years. Being a mentor allows me to give back to the community by passing on the tricks of the trade as well as utilizing something that I have been praised for over the years – my communication skills. I think game development is a collaborative project, and the best games are ones where the whole team is on board. Sometimes, while demonstrating something to another teammate you can actually learn a better approach to solving a problem or see things in a different way that in turn makes you a better developer.
Communication in Large Projects
Generally, the most difficult part of working on a large project that has a big team is communication. The vision of the project has to be communicated to everybody and the work has to be spread out in such a way that people aren't working on the same thing and the amount of time spent waiting/being blocked by a feature is minimal. The stakes are high when there is a large team depending on your work, any regressions can cause a lot of teammates to lose time. As a result, it becomes much more stressful to get features in, and due to the size of the project, testing takes more time as well. It also comes back to communication, as sometimes you may not know that a feature you are working on affects another feature and so you may inadvertently create a bug in somebody else's work.
Personally, I'm fortunate that I am optimistic and enjoy communicating with the team. Building good relationships with teammates reduces stress and makes it feel less as pressure and more like being a part of a team and building something amazing together. It might be coming from playing sports my whole life, but the joy of seeing a team playing together pushes any stress I should be feeling aside.
Self-Aware AI in Games
The idea of a self-aware agent is great in theory but when it comes to games that are trying to provide this experience, tuning and designing such an AI becomes rather difficult. There are great uses for this kind of AI, such as when a player disconnects, AI can continue playing as though it was the player. This would work great for multiplayer gaming and allow people to not change their playstyle because their human teammate has been replaced by AI or worse, disconnected and removed from the game.
The environment for open-world games is so large that training an AI to be self-aware and assess the situation to act in a believable way is very difficult to evaluate. At the moment, the AI knows of all the actions available to it and the best action is chosen in the given context. This can be done through behavior trees, goal-oriented action planning, simple state machines, or utility theory along with a few other techniques. The common theme to all those techniques is that all the actions are defined and the logic of the AI is more or less tuned in such a way that there aren't too many surprises. Again, there are times in which we want to create what is fun which isn't always necessarily what is real.
Programmers in the Industry
A lot of candidates are really interested in machine learning at the moment. Unfortunately, it still hasn't taken off in the industry, so it is difficult hiring mid to senior AI programmers as they may want a new challenge of ML over traditional systems of behavior trees and state machines. The good news is, there is a lot of content out there, from game developer talks to general AI and machine learning. The main thing is to not just know the buzz words, but rather have experience in creating and using AI systems. Unreal Engine comes with an AI library that allows any programmer to play around and create data-driven AI that can mimic what can be found in games. When interviewing, we look for programmers who will talk us through their experiences of building an AI, what approach was taken and why. That allows us to know if the candidate can immediately contribute to the project and adapt to any existing systems in place. We use hiring agencies and in-house recruiters.
If You Like Programming
If you like AI programming, the best thing to do is to go out and apply techniques in an engine like Unreal. There is a lot of documentation out there and the online community is great at posting examples and how-to articles. Much like work conditions, having a mentor to ask questions and bounce ideas off can help a lot and speed up the process of becoming more confident in your skillset. While it is great that there is so much content available, it can be overwhelming and difficult to know which tutorial or article to take on. Having somebody who can narrow that down and provide guidance is a huge benefit.
Interested in becoming a game programmer? Check out CG Spectrum's online game programming course and have an industry expert like Firas as your mentor! The job-focused curriculum is designed to get you industry-ready sooner. Log in each week to meet with your mentor, network while you learn, and get hands-on experience bringing your game ideas to life!