Hello, my name is Erica and I’m a master’s student (soon to gratuate!) in computer science with specialization in computer graphics and visualization at KTH Royal Institute of Technology. I’ve worked with C++, Unity using C# and HLSL, as well as Java and Python. Welcome to my portfolio! I have gathered some of the most important things I’ve done in computer graphics and game development. Take a look:)
Contact information
Email: ericat@telia.com
Links: LinkedIn
Master’s thesis: Exploring global illumination with radiance caching and glossy reflections
Using AMD’s graphics testing framework Capsaicin (C++ and GLSL), I’ve been exploring GI-1.1 and looking into improving the infinite bounce lighting approximation with the goal to improve the glossy reflections in particular. I call their original implementation singlebounce, and the improved version multibounce.
- Worked with a codebase with an existing probe-based GI implementation
- Communicated with AMD about getting access to a work-in-progress version of multibounce that I improved
- Combined theory and application by taking the rendering equation into account when improving multibounce
- Gotten used to working with PBR, path-tracing, and compute shaders
- Used PIX and RenderDoc for debugging
- Created a tool for debugging reflections by creating a reflection-only view in the path-tracer
- Tested different scenes to evaluate the impact on visual quality of multibounce compared to singlebounce (with path-tracer as ground truth), using NVIDIA’s FLIP
A screenshot from Capsaicin with the improved multibounce.
A video showing the difference between singlebounce and the improved multibounce.
Real-Time Volumetric Clouds in Unity URP
I made these clouds for a sailing game. The clouds are based on Real-time rendering of volumetric clouds by Fredrik Häggström, which is based on the work of Andrew Schneider for Horizon Forbidden West. Things I did in the project:
- Created a custom render pass in Unity
- Created tool to easily create, view, debug, and update 3D noise texture assets using a compute shader and Unity’s scripted importer feature
- Implemented ray-marching in a shader for density evaluation and lighting contribution
- Considered real-life lighting phenomena such as in/out scattering with the Henyey-Greenstein phase function, and attentuation using Beer’s law
- Did a parameter study where I varied the step size to balance visual quality and performance
A screenshot of the clouds with “maximal” visual quality settings
A video showcasing the clouds with a day-and-night cycle to show how the light affects the clouds.
VR asymetric collaboration maze game in Unity URP: “Hedged-in”
Together with a team, I created this asymetric collaboration VR game. The person in VR needs to escape from the maze, and their partner needs to guide them out by opening and closing certain walls, and luring away monsters. In this project I focused on creating the material for the hedge with shell texturing.
- Implemented GPU instancing to group the “shells” (layers) to improve performance
- Adapted the shader to work for stereo rendering (VR)
A picture of a play test of the game. Although it’s a bit blurry, the hedge and the shell texturing which gives it its bushy look can be seen on the TV screen.
Shell texturing bunny
I have also used shell texturing to create fur. Click the link above if you want to read more about it and try out the interactive demo! The project included:
- Fur placement and length based on grayscale texture created in Blender
- Fur color based on any texture
- Strands that move when the bunny moves through vertex displacement
- Blinn-Phong shading
- Simple controls to move and rotate bunny
A screenshot of a bunny with shell textured fur. Note the lack of fur on the eyes and in the ears.
A screenshot where the layered nature of the technique is visible.
A video from the interactive demo where it can be seen that the fur strands move when the bunny is moved back and forth.
Path-tracer in Unity
I implemented a simple GPU path-tracer using a shader with:
- An axis-aligned bounding volume hierarchy (BVH) to make ray traversal more efficient and improve performance
- Temporal accumulation, denoising the render over time
A screenshot of Cornell Box rendered with my path-tracer. Note the bounce-lighting.
A screenshot of how the BVH works.
Bachelor’s thesis: “Comparison between Smoothed-Particle Hydrodynamics and Position Based Dynamics for real-time water simulation”
My bachelor’s thesis was centered around comparing two implementations of two particle-based fluid simulations, in regard to performance and stability. With a partner, I ported existing implementations into Unity to make a more valid comparison.
A screenshot from one of the simulations where water from two directions has crashed into each other.
A video of one of the simulations where it can be seen how water from two directions crashes into each other and dissipates.