3D Content Pipeline
Modelling, UV mapping, rigging and the scripting that automates it — getting assets out of authoring tools and into something that runs in real time.
Technologies: 3ds Max, MAXScript, Blender, PyTorch
Building indie games gets you very close to 3D authoring tools. Shipping them teaches you about optimisation. All of it paid off later, when I was overseeing large projects for Fortune 500 companies.
As an indie developer you often find yourself modelling and texturing assets for your games. You gain enough experience to be able to talk to professional artists, understand the challenges and value talent. I believe it is the kind of experience that allows project leads to get the best out of a team.
Somebody AI (2025)
Somebody AI delivers ultra-realistic conversational avatars, rendered in real time in the browser.
Gaussian Splatting handles the visuals — a model reconstructed from a single photo. During creation the splats are bound to a FLAME face model — a parametric head rig whose expression parameters have a known correspondence to Apple's ARKit blendshapes.
That binding is what makes the avatar animatable afterwards — the runtime side is in Real-time 3D on the web.
The avatar production pipeline runs on PyTorch, on a high-end GPU VM on GCP. A pre-trained reconstruction model takes the photo and predicts the Gaussians directly — position, scale, orientation and colour — anchored to the FLAME geometry in a single forward pass. The result is a relatively light avatar, around 20k splats, since it has to render in the browser through Three.js — a good balance between performance and realism.
I deployed the pipeline, produced 20 avatars for our product and designed the customer-facing architecture so a user can upload a photo and create a digital clone of themselves.
Hyperspace (2014)
The company started as a single web serious game built in Three.js. It evolved into a large platform allowing corporate clients to build their metaverses, have events and VR meetings in them.
Because it ran in a browser, assets needed to be very optimised, from their poly count to the size of their textures. We had to create a pipeline for integration and placement. Assets had to carry metadata, like anchor points, colliders and other logic values. As the platform grew we started allowing users to create their own experiences, which meant letting them upload their own 3D models.
3D authoring meant I had to allow the user to upload, place and modify objects in a scene. I created the flow, the rails, and the tools to translate, rotate and scale them while checking for collisions with other elements. I added drag-drop mechanics so objects would default to sticking to walls, as the user moved them around the room.
We produced digital twins for many clients. They were realistic reproductions of real offices and venues. Among them the New York Life headquarters, an iconic 100-year-old building in New York. Our artists had to recreate every detail from a database of pictures and blueprints. Such high detail exceeded the capabilities of the target hardware they were using, Oculus Quest 1. I built a benchmark tool to measure how different approaches performed on the headset. We had to be precise and replace geometry with billboards where we could afford to — geometry far from the camera — and provide higher detail where the visitor could get closer. It required coordinated planning with the experience design team so the experience would look as good as possible on such limited hardware.
Avatars play a crucial part in immersive experiences, as they allow participants to engage with others. We had thousands of clothing items and personalisation options for hair, face, skin, body weight and height. That level of customisation required very detailed specifications, tight naming conventions and well-defined workflows.
I created scripts for both exporting and importing models and textures. I designed and implemented our own asset loader and manager for Three.js, our own set of shaders and a custom animation system. The full process was documented, from drafting a new piece of clothing through modelling, rigging and UV mapping, to exporting from the authoring tool, uploading to our database and deploying to our production environments. I wrote guides for new artists to become familiar with our workflows, and for developers to maintain the pipeline.
Working with environments was also very interesting. Consumer hardware, and especially VR devices, is limited, and environments tend to use a big portion of memory for textures. Over the years I learned and applied many different optimisation techniques. I developed a tool for reducing geometry where it's not visible to users. We used material channels to encode shadow maps and tiled textures separately to reduce texture size. I've also experimented with point clouds, Gaussian Splatting and Matterport scans.
Spirit Fencer Arena (2013)
This was one of my first serious attempts at production-ready 3D assets for real-time rendering.
The game featured 16 animated characters, each with its own set of animations (idle, attack skills...), and it was the first time I had to think about nomenclature, pivot points, animation blending, and many other complexities that arise when you have two characters fighting.
Designing, producing, integrating and giving life to the characters required planning and coordination. I learned to design clear specs that would allow the team to work together. I had to account for the design of the state machine before scheduling the animations. Animations had to have a consistent duration and some markers to allow me to trigger effects (like particles) at the appropriate time in the game. Character props (helmets, weapons...) had to be taken into account so we wouldn't have clipping (a sword going through the arm while swinging it, for example, or a shield going through a leg).
Utility tools helped streamline the workflow. I created several of them, like a thumbnail generator, which would load a piece of inventory (weapon, artefact or armour), render it and generate a 2D image as a thumbnail for the game UI. Utilities for automating cutscenes, for visual inspection, for QA. A production of any size is much more than making the game itself.
Where I've used it
- Somebody AI (2025)
- Hyperspace (2014)
- Virtual Home Visit (2014)
- Spirit Fencer Arena (2013)