Internship Recap - Eli’s Time at Build

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:

  • Real-time rendering paradigms, including deferred rendering and shadow maps, in order to implement visual and performance improvements
  • Some WebGL plumbing to build shader debugging tools, which were used to validate future rendering improvements
  • A bit of front-end web development to create the artist-facing features, such as an array tool to clone 3D models along their local axes

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.

before (note the horizontal seam and general blurriness) after (no more seam! crisper shadows!)

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:

  • Ben: being an amazing buddy: answered literally any tiny question I had within seconds, regardless of how uninteresting the question was or when I asked it. Also for being a great example of approachability and friendship!
  • Sam: taking time to provide clarification about rendering engine things whenever I needed it, and for frequently making sure that non-graphics people could see why some of the stuff I worked on was exciting (and thanks for getting excited about it with me!)
  • Won: making sure I was always in a good position to work with new and interesting graphics concepts, and for being open about your long-term vision for me and the Build3D product
  • Emma: always being supportive of other team members' work and making it easy to reciprocate by being transparent about your own progress/hurdles
  • Devin: consistently making sure I had everything I needed, especially as I was settling in during my first couple weeks
  • Lars: kindly pressuring me to drop out of school in order to keep working at Build on several occasions

Eli Bogomolny is a senior at the University of Pennsylvania studying computer graphics. He gets excited about creative graphics programming and chicken over rice.