About Me
Interests
-
Computer Graphics Programming
- Real-time Rendering
- Ray Tracing
-
Robotics
- Automation
- Computer Vision
-
Financial Markets
- Algorithmic Trading
Experience
- Graphics Developer at Chromium (Google Summer of Code)
- Worked on Chromium’s WebGPU implementation - Dawn
- Proposed Static Samplers for WebGPU Standard
- Analyzed the performance of Static Samplers - Negligible Gain
- Added Multi Draw Indirect feature to Dawn
- Implemented in MacOS, Linux, and Windows
- Highly requested feature, enabling GPU driven rendering in WebGPU
- Graphics Developer at Nail & Crescent
- Worked on Quake 2 RTX Engine
- Texture Compression
- VRAM usage declined by ~25%
- Disk space usage declined by ~50%
- Retro Clouds
- Implemented curving 2D clouds for a retro look
- Highly customizable and performant
- Other small features and bug fixes
Projects
- Vulray
- Vulkan Library for Ray Tracing
- Provides an abstraction to build new Vulkan ray tracing applications
- FastVoxels
- Renderer to test the performance of Hardware Accelerated Voxel Ray Tracing
- Uses Direct3D 12, and handles more than 10 million voxels in real-time
- Basic Lambertian diffuse shading with multiple bounces
Google Summer of Code 2024 Project
I got into Google Summer of Code 2024 with the project Implement Multi Draw Indirect for Chromium’s WebGPU implementation - Dawn. The organization that I worked with was Chromium. The original project that I proposed was implementing Static Samplers for Dawn, but it was changed to Multi Draw Indirect because it was more valuable and requested by the community. My work on the Dawn project can be found here.
There is no demo for this project as it is a low-level API feature and it is not directly visible, however this feature was requested by the community and it is a valuable addition to the WebGPU API. Hopefully, someone will make a cool demo/game using this feature because it is extremely powerful in modern rendering where GPU based rendering is becoming more and more popular.
Road to Google Summer of Code
Searching for Projects
I first learned about Google Summer of Code (GSoC) on Reddit. Intrigued, I explored the project listings of various organizations. Unfortunately, none of the projects initially captured my interest. Many required learning new technologies or seemed unappealing. Some organization required a coding challenge before applying, which I deemed unnecessary given my lack of interest in their projects. I decided it was not worth the effort for something I was not passionate about.
I aimed to work on something related to graphics or low-level programming, such as Vulkan, DirectX, OpenGL, or WebGPU. While some organizations offered low-level projects, they often required expertise in areas I was unfamiliar with, such as LLVM. Despite finding LLVM projects interesting, I lacked experience in compiler technology and was not inclined to learn it at that time since I was also studying whilst applying for GSoC.
VLC
Eventually, I discovered VLC, which had several intriguing projects related to video rendering. Although their GSoC page contained outdated project listings, I was unaware of this initially. Upon contacting a mentor, I learned that some projects were already completed, and the mentor suggested new project ideas that were not listed. If I was to draft a proposal for a project that was already completed, it would have been a waste of time.
Lesson Learned: Always contact the mentor before proposing a project.
I selected the most compelling project offered by the mentor and completed the proposal with their assistance. Engaging with the mentor allowed me to ask questions and receive feedback on my proposal. Mentors are generally eager to help, because us as volunteers contribute to the improvement of their projects.
Despite my efforts, I remained uncertain about my acceptance, given the competition and other appealing projects at VLC. Thus, my search continued.
Chromium
I then explored Chromium. Although their listings did not initially interest me, they allowed applicants to propose their own projects. Having previously developed ray-tracing libraries for DirectX and Vulkan, I proposed enabling games to leverage ray-tracing in Chromium by implementing it in Dawn, Chromium’s WebGPU implementation. Although someone had already worked on this, it was not officially recognized or supported in Dawn. Therefore, I proposed formalizing and adding it to the API.
I reached out to Dawn contributors to inquire about mentorship. They informed me that the project was too ambitious, as WebGPU was still under development, and their focus was on core features. Understandably, ray-tracing was not a priority at that moment. Understanding their position, I accepted their alternative project suggestions. I chose Static Samplers, a feature I had experience with and which was missing in WebGPU.
After drafting my proposal, I sent it to the mentor for feedback. Their constructive feedback helped me refine my proposal. With the final proposal submitted, I awaited the results.
Results
To my surprise, I was accepted by both VLC and Chromium. The GSoC team requested that I choose one. I opted for Chromium, as I felt more confident in my ability to complete the project. VLC’s project, while interesting, was more challenging and outside my expertise in video rendering. Additionally, contributing to Chromium aligned better with my career goals and interests.
Key takeaways from my experience include:
- Contact mentors before proposing a project. They can clarify doubts and provide valuable feedback, increasing your chances of acceptance.
- Do not hesitate to ask questions or propose your own project ideas. There is no harm in inquiring.