Brunswick CES 2023


CES image

An immersive boat simulator exhibited at the global showcase

Technology

  • Unreal Engine 5
  • Perforce
  • C++
  • Python
  • Blender

About

I had a blast making this thing. Over the summer and through the fall semester, I built a photorealistic, realtime boat simulator. Displayed to tens of thousands of people at the 2023 Consumer Electronics Show, the simulator, called the Future Helm, let people drive a boat with a 140 degree screen displaying their surroundings. It demonstrated new boating technologies Brunswick is developing, such as auto-docking and collision avoidance. Additionally, Brunswick is able to easily mock up and test out new MFD UIs and other features, without having to implement them on an actual boat.

This has definitely my favorite project I've done so far in my career. I learned an awful lot during this experience. Obviously there was a lot of cool technical stuff like different aspects realtime graphics development and virtual production. But I also got a better sense of how to effectively collaborate with people from all different backgrounds on a large project, whether they be executives or designers giving us feedback on how better to achieve Brunswick's business goals at CES, long-time boaters who helped us get the physics feeling realistic, mechanical and electrical engineers when we had hardware questions, and of course within the graphics team implementing all this. We were doing new things and coming up with creative solutions, and that's the essence of why I love this field.

Development

I wore a variety of hats as we were building the project, including gameplay programming, architecture design, procedural asset creation, sound design, and UI implementation. Basically, whatever needed done, I was happy to find a way to do.

Me, four other interns, and our full-time lead started implementing the design team's vision for the project in early May. We worked well together and quickly blew past our goals for the summer. We'd brainstorm together to solve challenges we were facing from both a technical and design perspecitive, and regularly met up with people from across the organization to pick their brains. We also conducted biweekly user tests to get a gauge of our progress and how people responded to it. At the end of the summer, our team of interns was recognized as a finalist for "Most Competentent and Collaborative Team" at UIUC's Research Park, and Brunswick's executives were blown away by our progress.

Throughout the fall semester, we kept refining and improving the project, spending a lot of late nights at the office to get it prepped and bug-free for the show. At the end of the semester, we shipped it off after a final build.

Technical Details

The helm itself is built much like an actual boat is. It has a real throttle, joystick, and steering wheel, which send CAN messages that we then decoded with a Python script. From there, we could use that as input into Unreal Engine 5, the game engine we were running the project off of. We chose Unreal for its massive library of free assets, the astonishing advancements in rendering that come with Nanite and Lumen, and its ability to do virtual production with nDisplay.

There were two main displays: the wraparound, 140 degree screen, and the MFD, which displayed notifications and info like speed, direction, and battery life much like a car. Both of these displays ran off of a separate computer connected by Ethernet.

One of my favorite subprojects was creating procedural assets for the project. As we were designing our environment, we realized we would need hundreds of custom assets. I used Blender and Python to create an extensive tool to procedurally model and texture game-ready assets, with minimal manual labor needed.

Response

The response to the Future Helm was an overwhelming success, from attendees to the media. A few journalists listed the Future Helm as one of the top things to see at the show. NBC opened their coverage of all CES at Brunswick's exhibit. It was so realistic that a few people thought we installed actuators in the floor to simulate the bobbing motion of a boat. Our graphics team was particularly happy that people from Epic Games kept coming over to check out what we accomplished with their game engine. The U.S. Secretary of Energy even took it out for a spin. The Future Helm was the centerpiece of the Brunswick exhibit, and it helped establish the company as a major player not just in the boating world, but in the tech industry as a whole.

Synthetic Data Generation with CARLA


CARLA image

Training machine learning models with the power of Unreal Engine

Today's artificial intelligence systems require a lot of data to train on. As Brunswick develops its autonomous boating capabilities, we find ourselves in need of more and more training data. This data is often hard to collect, as many of the situations we want to test for may be too dangerous for human drivers, or too rare to test too often. I explored CARLA as a potential solution to this problem. CARLA is an open-source plugin for Unreal, originally intended for virtually training autonomous cars and other land vehicles. I adapted the system for a marine environment. With this modified version, we could control boat traffic, the weather, time of day, the environment, and even more, while recording simulated sensor data like RGB cameras, stereocameras, and LiDAR sensors.

Technologies

  • Unreal Engine 4
  • CARLA
  • Python
  • Numpy
  • OpenCV

NodeToPython


NodeToPython

Converting Geometry Node groups to add-ons

Blender's procedural node systems are great, but they are't all powerful. I've created a Blender add-on that analyzes Geometry Node or Material networks and creates a Python script to replicate them. Artists and add-on creators can now contribute to Blender's ecosystem and easily share their work and add onto their work without needing to recreate an entire node network by hand.

Technologies

  • Python
  • Blender
  • bpy

Block On


GIF of a voxelized monkey head constructing itself

Procedural voxelization in Blender

Blender's native voxelization is clunky. It's a slow and destructive process, one that I wanted to improve. I created a Python add-on that allows artists to quickly voxelize their 3D models without needing to retexture their models. The plugin gives the artist more control and to find new ways of expressing ideas in the style. With Geometry Nodes, the plugin is completely procedural, allowing for quick variations and expansions.

Technologies

  • Python
  • Blender
  • bpy

CS 124


CS 124 Logo

Tutoring the fundamentals of computer science with Java and Kotlin

I was a course assistant for CS 124, UIUC's introductory computer science course. During tutoring hours I helped the software engineers of tomorrow learn the fundamentals of programming. I taught Android app development, clarified concepts about data structures and algorithms, and got to meet a lot of interesting students.

Technologies

  • Java
  • Kotlin
  • Android Studio
  • Android SDK

Discord Bot


Discord Bot

Learning Practical Software Development

One of my first projects, my simple Discord bot taught me a lot about practical software development. I learned how to host a bot and interact with APIs. As I added features, I was introduced to concepts like asynchronous programming and regular expressions, as well as how to write and maintain easily extendable code.

Technologies

  • Python
  • Git
  • Heroku