During the 2019 spring semester, I took a semester off of my junior year to intern with the Build 3D team in NYC. As a computer graphics student, I had worked with topics like the OpenGL pipeline and physically-based rendering, but had no practice implementing them in a professional environment. This was my first real internship, and I had almost no idea what to expect of it.
My first couple weeks were packed with planned activities with coworkers and meetings about different CBRE Build products and their history. The operations team was very helpful as I settled in, from reminding me about events to making sure I had a tissue box on my desk at all times (I conveniently caught a bad cold right before my first day at work). In between meetings and lunches, I was eager to start coding as soon as possible, but a lot of my early “programming” involved asking others on the team for help with even the simplest questions. I was assigned a "buddy" at the start of my internship, similarly to what other companies might call a mentor, but everyone was always there to provide answers when I needed them. After a couple of braindumps with different teammates I was right on track to dive into the codebase.
Although these braindumps covered topics largely new to me, I felt comfortable tackling unfamiliar territory by the time I started writing code. Teammates were always able and excited to help me out as needed. My technical contributions touched engine/shader code, debug tooling, and artist-facing features. I learned about:
One of the great aspects of working with such a small team was that each of us could question preexisting code, and rewrite it as we saw fit - no file was ever off limits. Even “core” functionality that I assumed “just works” was fair game for edits, which exposed never-ending avenues of exploration. For example, my manager and team tech lead (Won) noticed that the shadow sampling logic looked erroneous while investigating some visual artifacts in our engine.
Left: before (note the horizontal seam and general blurriness), Right: after (no more seam! crisper shadows!)
Though I had fiddled with the shadow code in an earlier feature, it never occurred to me that something as fundamental as shadows could be wrong! I paired with Won on a task to overhaul the suspect code, and after just two days of work we achieved faster and nicer-looking shadows, and uncovered several new areas due for improvement that were not visible before. I followed up on the initial work I did with Won that I never would have considered without our first pass at shadows, and the process was extremely rewarding.
Thanks to the close-knit supportive environment at work, I found my skills in programming, workflow efficiency, and communication were growing naturally each day I came in. At each step of my internship, I was surrounded by opportunities to improve at writing, reading, and reviewing code (both my own and others' - I was included in the code review process pretty early on!), and being as good of a teammate as I could. Everyone I met in the office was open about their successes and roadblocks, and it was super nice to hear the same people bring up their ideas and concerns during meetings. Being part of a team where everyone was excited about each other's progress was an amazing experience, and I could not have chosen a better place to spend my semester.
Special thank you's:
Eli Bogomolny is a senior at the University of Pennsylvania studying computer graphics. He gets excited about creative graphics programming and chicken over rice.