
Project: Bubble Busters – Pixel Pie Games
Role: Senior Technical Artist
April 2024 – August 2026
Bubble Busters is a turn-based PvP bubble shooter developed by PixelPie Games.
As Senior Tech Artist I worked on art asset pipelines, Unity and Blender tools for artists and designers, runtime systems and custom shaders.
Scroll down for an overview of some of the projects and tasks I have worked on.
Map Editor
I initially ported an existing browser-based map editor to Unity. The tool then morphed and evolved to accommodate the game designers’ needs and desires over the course of two years.
The map editor made it easy to create and test new maps for the game and it gave designers immediate feedback on what a map would look like in game even before play-testing it.
The editor is written directly on top of Unity’s ImGUI Editor APIs and uses the Graphics APIs to render an interactive preview of the map to a render texture.

Screenshot Tool
The Screenshot Tool was initially developed to assist the character artists with capturing turnaround screenshots of their characters for feedback, but then started to get used to capture character poses for in-game UI and got eventually adopted by the marketing team to capture higher-quality screenshots for marketing purposes.
The tool allowed artists to focus on a character via automatic and live framing and allowed them to manually set the camera position via a controllable spring arm.
The tool came with session config files that the artist would use to store both camera settings and character poses for easy re-export.

Custom Lit Shader
This is an HLSL ubershader I wrote to shade the characters in the game. It initially started as a humble unlit shader with 2 rimlights but we soon ended up adding additional optional features to both improve the lighting of the characters and to support custom effects on characters skins.
The shader ended up including 10 toggleable features, all implemented as shader local fragment features. To reduce the combinatorial explosion of shader variants I made sure to only include those variant combinations that were actually used in-game.
To help artists author materials with the shader I created a custom GUI for it with intuitive parameters and where only enabled features would be visible.
Although I was responsible for the authoring of the shader the previz work by Tau Kazlauskas and the feedback from Anne Goossens was instrumental in my work of making this the best shader it could be.
Below you can see some of the amazing skins Anne and Tau managed to create with their great texturing work and this custom shader, but make sure to check their Artstation pages to see more!






Texture Projection
The texture projection is a tech art solution I implemented together with our 3D Art Director to animate mouth expressions on our characters so that we didn’t have to come up with a complicated rigging solution in Blender.
This solution is made of 2 main components:
– a custom projection shader that, given an orthographic projection matrix and a texture array index, can project a texture sample onto any mesh.
– a custom Monobehaviour called TextureProjectionSocket that, given a socket and a controller bone, can generate a projection matrix and a texture array index and send them to the material with the projection shader.
The TextureProjectionSocket script runs on LateUpdate to wait for the skeleton of the character to be animated, so ensuring that mouth expressions and animation frames are in sync.
I also extended this solution to support characters with multiple projections as in the case of Pixel for whom we’ve projected both eyes and mouth shapes. You can see it in action on Anne’s Artstation, who is the character artist that worked on Pixel.

Bubbles Pipeline
I lead the team responsible for moving our bubbles pipeline from 3D to 2D to meet the new artistic vision for the game.
My main responsibility was to come up with a proposal for a working production pipeline for animated 2D bubbles.
The work started with researching existing games that had the same visual appeal of the concept we were basing our work on. After this research phase Tau Kazlauskas and I came up with a Blender to Unity pipeline and worked on some key bubbles to showcase to the rest of the team.
The pipeline consisted of 3D modelling, shading and animating in Blender. The animations would then be exported via a custom Blender plugin I developed into animated image sequences. These images were then imported as spritesheets and animated into Unity animation clips.
I also extended the game to support multiple animation states to reach the desired level of polish and feel. Most bubbles support idle, anticipation, active and destroy animation states.
The proposed pipeline was approved by product and we managed to migrate all existing bubbles in the span of only 3 months, while the game was live and we were actively releasing new content and features.






UI Gradient Image
This is a custom UI Image component and shader that I developed to avoid the need of creating and adding a new image to the game every time we wanted to add a new gradient to the UI.
The component inherits from Unity’s default UI Image and extends it with extra controls to allow the creation of custom gradients with the following features:
– 6-color linear and radial gradients
– 360-degree gradient rotation
– horizontal and vertical offset for radial gradients
– custom aspect ratio for radial gradients
– halftone pattern gradient
Another goal for this new component was to keep batching working and so all gradient images had to share the same material. To allow for that I opted to pack all the data for a UI Gradient Image into the generated UI mesh. You can see how the data is packed into the mesh from the screenshot below.

Here is a quick video to showcase what the UI Gradient Image can do.