A Reflection of My Experience at BGI

by Debbie Liknes 3 min read
Personal Career

What does BGI stand for? That's easy...BGI.

The phrase above was said with a laugh by one of my coworkers when I asked what BGI stood for. Legend says it once stood for “Best Group Incorporated”, but no one with any authority on the matter has actually confirmed this for me.

Technical Retrospective

For over three years I worked on the rendering side of a real-time threat simulator. This section covers the kinds of technical problems I found most interesting. Please note I cannot discuss in detail some of the solutions.

Vulkan Scene Graph

When I joined, the renderer was hand-written Vulkan built on Sascha Willems’ bloom example. That was a good starting point, since we needed bloom, but everything else was hard. The render objects were heavily generalized, yet any new effect still required changes to the core renderer. Getting outlines working, for example, meant a series of edits to the renderer itself rather than to the objects being outlined.

We moved to Vulkan Scene Graph to get scene management, state sorting, and resource lifetime handling without giving up control. The hard part was preserving our custom piepline layouts, which I implemented as custom vsg::Commands. The command itself was simple. Fitting it into the architecture was not. Our render objects were deliberately backend-agnostic, pure metadata describing what to draw. VSG’s model is the opposite. You have pipelines, descriptors, and draw commands that live directly in the scene graph as nodes.

Mercator Projection

This was one my favorite bugs I saw. We supported a 2d Mercator map, the problem being that objects in the world around us are 3d.

Mercator stretches everything as you move toward the poles. The scale factor grows with latitude and goes to infinity at the poles themselves. Strictly speaking, an aircraft near the pole should look enormous. That’s correct, but it’s useless, so the design decision was to render objects at a uniform scale regardless of latitude.

For planes or ships, that’s the right call. But what about radar volumes? Measurement lines? Those exist to show the user something true about distance and coverage, and correctness matters more there than appearance. The issue might seem like a simple bug to the user, but the solution must be architectural. We added metadata to the object to allow requesting the scale type.

Personal Reflection

The office, which I went to about once a week, is a two-story building near Akron. It was usually largely empty, save for the handful of regulars who came in every day. It’s a strange building. There are wine refrigerators scattered throughout from its previous life as a marketing agency, giant umbrellas propped up to shield computer monitors from the sun-bathed wall of windows, a banner that says “Don’t Give Up the Ship,” and a picture of John McClane from Die Hard crawling through the HVAC system pasted near a vent. My cubicle had a fortune taped to the wall from the last occupant, it said “Your talents will be recognized and suitably rewarded.”

I spent many hours debugging issues in what I can only describe as a boardroom for supervillains. It was very dim, even with all the lights on, and contained a long wooden table surrounded by enormous black leather chairs. It was also the only room on the second floor with a whiteboard.

Today I gave my 2 weeks’ notice at BGI, my employer for the last 3.5 years. BGI was my first real job, after doing mobile freelance jobs post college. I didn’t really know what I wanted to do, but I was pretty sure I wanted to work on a video game. BGI isn’t a video game company, but they offered something incredibly similar, with a big impact on the world: a threat simulator. Basically, a military video game.

I’m incredibly grateful for my time at BGI. It helped me find a more specific love of graphics and engine development, which is not a path I had ever considered for myself. I was able to give back to a project that makes a difference in the world. The project I was on offered a unique set of opportunities. The project was incredibly young, so there was usually some amount of chaos, but that allowed us flexibility to dig into really cool and interesting problems.

I had some incredible mentors and team leads. My team lead’s first challenge to me during my onboarding was to complete the vulkan tutorial and then use our system to render a tetrahedron. That led to Dear ImGui adventures, and digging into our engine architecture. I documented the entire flow of how we put pixels on the screen. I spoke with real potential customers at IITSEC in Orlando, and inspired real change in our renderer with the migration to Vulkan Scene Graph.

Starting any new chapter is bittersweet. I wish I had gotten to know my fellow Akron coworkers better. I’ll miss the flexibility of being a contractor. But I’ll remember this time for the growth, the weird little office, the interesting problems, and the personal and professional connections I made.