Jerry Chen, a Technical Artist at Ubisoft Toronto, talked about participating in the Challenge of Ubisoft Toronto NEXT and discussed transitioning from programming to technical art.
Hello everyone! I'm Jerry, a Technical Artist at Ubisoft Toronto. I studied at the University of Western Ontario, where I majored in computer science and English language/literature.
At Ubisoft Toronto, our tech art team supports all parts of the art pipeline for our games. This includes VFX, 3D modeling, lighting, environments, shaders/materials, and more. As for me specifically, I mostly focus on supporting our workflow for creating environments in collaboration with level artists.
I started this role around a year ago when I won the tech art category in the 2022 Ubisoft Toronto's NEXT. Before that, I was a software engineer.
One cool project I worked on as an intern was a holographic cell visualizer for cancer researchers, which you can read more about here.
I also helped develop two games as a game design research assistant at Wilfrid Laurier University to see if video games could promote environmental sustainability, as part of a partnership with the Ontario Ministry of Environment and Climate Change.
The Challenge of Ubisoft Toronto NEXT
We had Ubisoft Toronto representatives come to our campus and faculty emails about it over the years, so I was aware of the challenge early on. I was always interested in participating, but the timing just never worked out. Years went by with me only reading the briefs and checking out the finalists’ entries. When COVID-19 happened, however, I was suddenly stuck at home with a bunch of free time. I finally took the opportunity to jump in and give it a shot.
I actually participated in NEXT twice. In my first entry in 2021, the challenge was to create a spaceship bridge. I created editor scripts in Unity and C# to generate random layouts and place assets like desks and chairs. As you can probably tell from the screenshots, I was still new to 3D modeling, so my assets were basically programmer art. In spite of that, I was able to place third because the judges were impressed by my understanding and execution of the technical side of things. And even though I didn't win, I enjoyed it so much that I knew I was going to try again the next year.
In my second attempt in 2022, the challenge brief was to create an attic. I created a flexible real-time system to generate random layouts and asset variations (e.g. dirt masks, dimensions, organic stacks of objects, etc.). My approach to procedural generation was similar to my Unity C# scripts from the previous year, except the logic was converted into Unreal blueprints. This time around I invested some time into properly learning 3D modeling with Blender. I also took the chance to pick up new engine techniques in Unreal.
Transitioning From Programming to Technical Art
I've always been interested in games and game development since I was a kid. In high school, I first learned to program by making games with friends. Here are some old examples I dug up, including an online multiplayer gardening game I made at a hackathon and a "Super Hexagon" clone I made in high school:
I think the biggest thing that held me back from making game development a career was that I didn't think there was a role that really fit me. I found game programming too technically intensive. Working on things with a visual result was personally very rewarding, but being a pure artist didn't quite suit me either. It wasn't until I discovered the existence of tech art that I found there was a perfect middle ground.
Over the years, more videos and articles started popping up online as “tech art” started to become more of an official role. One of those videos was this GDC talk on procedural generation in Far Cry (fun fact, I now work on the same team as Étienne, who gave that talk all those years ago!):
After seeing how much fun I had with the NEXT projects, I knew it was the right career for me. I remember comparing it to my day job at the time and realizing how much more interesting and rewarding it was. Looking back now, I'm very glad to have made the leap.
I'm lucky that I’m part of an extremely talented and knowledgeable team. My teammates are constantly discussing new developments in the industry. I often hear about interesting techniques used in some new game or exciting features coming in a new version of a tool we use. Just being a part of the Ubisoft community helps me stay updated on what going on.
My teammates have also been generous in sharing their expertise. I often pester them with questions about their specialization or ask them to point me to any useful resources. These topics have ranged from shaders to 3D modeling, profiling, and even animation. I think game development is an industry where people are naturally enthusiastic about sharing their passion with others. Noticeably more so than the other industries I've worked in.
In addition, I often try to tinker with new tech whenever given the opportunity. For example, I tried new tools for each of my NEXT submissions. In the first year, I learned how to use Substance Designer and investigated different approaches to procedural generation (i.e., Houdini, l-systems, shape grammars, and wave function collapse). In my second attempt, I picked up Unreal Engine and Blender. A major benefit to trying lots of different tech is that you learn to evaluate the strengths and weaknesses between them. I've found that in production there are often multiple solutions to a problem. And as a tech artist, it's important to be able to evaluate which one best fits the situation.
At my university, I took some relevant courses like graphics and game design. The knowledge I picked up in my computer science courses (e.g., code organization, data structures, algorithms) has also been useful in understanding the more technical side of my role.
Other than some internship experience, where I worked with engines like Unity and Construct 2, most of my experience prior to joining Ubisoft has been through personal projects. I find that I'm more motivated when my learning is put under a greater context, which is why I usually try to learn things by making games or projects that require those skills. For example, one time I wanted to learn network programming, so my friends and I decided to make an online co-op game for a hackathon. Hackathons, game jams, class projects, and NEXT were all great excuses for me to experiment with new ideas and tools by cobbling together small games.
For NEXT specifically, I remember reaching out to previous participants for advice. They were very kind in giving me tips and resources. The Ubisoft judges also gave great feedback on my first submission, which helped me prioritize what I wanted to focus on for my second try.
Common Elements Between Programming and Technical Art
I guess one obvious element is that tech artists often do some programming too. Granted, a lot of our code is on the simpler, scripty-er side of things. We often use higher-level languages like Python or visual scripting systems (which have become common nowadays for engines and tools). Although it's not as technically deep as what a game programmer would do, a lot of similar principles apply. For instance: maintainability, documentation, efficiency, etc.
Another skill I carried between the two roles is keeping the end users in mind. When I was a programmer, the users were the people who would open our website or app. As a Tech Artist, the users are the artists. I think that when coming up with new tools or solutions, it’s important to understand how these fit into the artists’ lives. Are there any aspects that might be unintuitive or frustrating? Does it fit well into the rest of the workflow?
Programmers and tech artists also both need to have a certain amount of technical understanding. Although tech artists might not need to know the exact code that's running, we should at least know key details like the general implementation, limitations, performance cost, and pros and cons compared to alternatives. This is so we can communicate with programmers effectively and create accurate guidelines for artists.
I'm proud that I was part of the Far Cry 6: Lost Between Worlds team, which was released late last year. When I joined, I didn’t expect to have something I worked on be released so soon. I learned a lot about many things like performance profiling, rendering, and how levels are put together.
Fostering a Culture of Learning and Growth
The most common way that I help our team learn is by keeping artists (and other tech artists) informed about our guidelines and processes. This includes making sure our documentation is clear, easy to find, and communicated well in emails or messages. I've also done tutorial calls to help in that effect.
When reviewing areas or levels for potential issues, I try to embody a curious mindset. I often poke artists with questions to better understand their process of doing things. I suppose that's one other thing I carried over from my programming experience with doing code reviews.
I think Ubisoft itself also has a healthy culture of sharing knowledge. I (and my teammates) often speak with members of other projects in the Toronto studio, and even with other studios within Ubisoft. We share new tools and processes with each other, which is helpful. It felt very natural for me to participate in keeping updated on things and asking/answering questions. New members are always coming on to our projects too, so I also try to help guide them when I can or point them in the right direction.