top of page

Restitched - Trixel Creative

  • Team: 15-20 people 

  • Unity, C#, .NET

  • Role: Programmer/Engineer​

  • In development (joined February 2025, ongoing)

Restitched is a community-driven 2.5D platformer featuring robust level and costume creation tools. My role focuses on engineering scalable gameplay systems and editor tools designed for a networked multiplayer environment, ensuring that players can create, share, and play content seamlessly.​

As of now, I can only share what has already been published by Trixel Creative. Therefore, I am limited in what I can present here.

Wardrobe

I engineered tools for the character customization architecture for the upcoming Wardrobe Demo. This standalone release is designed to populate the Steam Workshop and stress-test our deployment pipelines. Importantly, all assets created & uploaded during this phase are fully forward-compatible with the main game launch.

​

One of my focuses was the Stamping System, a feature allowing players to project and layer decals onto 3D character meshes. Ensuring precision and compatibility across hundreds of costume pieces, with virtually an infinite amount of combinations, presented unique technical challenges.

  • Pixel-Perfect Selection (GPU ID Buffers):

    • The Challenge: Standard raycasting was insufficient for selecting specific stamps, especially when they overlapped or had complex shapes. Initially, clicking a stamp often selected its square UV bounding box rather than the visible pixels, making it impossible to click "through" the transparency of one stamp to select another behind it.

    • The Solution: I implemented a GPU-based selection system using Multiple Render Targets (MRT). This allowed me to generate a unique ID map in parallel with the visual render without incurring the cost of a second geometry pass. However, standard shaders drew the entire quad to the ID buffer. I modified the fragment shader to apply a hard alpha clip to the ID output (discarding transparent pixels) while preserving smooth alpha blending for the visual color output. This ensured click detection matched the visual shape perfectly.​

Wardrobe Overview by Plush Piney

  • Optimizing GPU Readbacks:

    • The Challenge: To identify which stamp the user was hovering over, the system needed to read the pixel color from the ID texture on the GPU. Doing this every frame (Texture2D.ReadPixels) would cause significant CPU-GPU synchronization stalls, killing performance.

    • The Solution: I implemented texture caching. Instead of reading from the GPU every frame, the system pulls a readable copy of the texture to the CPU only when the user switches cosmetic targets. Subsequent hover checks are done via a fast array lookup on the CPU. I further optimized this by throttling the detection logic to run only when necessary (e.g., on stamping changes, mouse movement), rather than inside the Update loop.

  • Data Integrity & Serialization:

    • The Challenge: Managing the lifecycle of stamps (adding, removing, re-indexing) often led to desynchronization between the visual render and the underlying data structure, particularly when stamps were deleted from the middle of the stack.

    • The Solution: I designed a robust management system that ensures the "Runtime ID" (used for GPU picking) always maps correctly to the stamp's index in the underlying data collection, auto-correcting IDs whenever the stack is modified or loaded from a save file.

Level Editor Architecture

During my work on Restitched, I have focused on the level creation tools and gameplay systems, with an emphasis on stability and network compatibility. Modularity is key, since Restitched is made of a wide variety of placeable objects, the tools must be flexible, easy to use and work reliably in a networked environment. To support this, I designed datasets where designers can easily create new data with unique properties. For example, I implemented a lethal dataset that allows designers to easily define lethals (property that makes objects dangerous). Once defined, these automatically appear in the level editor, giving players immediate access without additional engineering work.

Video of applying lethality to object.

Copy Lethals.gif

Shortcut to copy and paste the lethal type just by clicking on other objects.

I'm currently developing the joint and connector system for Restitched's level creator. These tools allow players to link objects together with physics-driven behaviors such as pistons, strings, bolts, and motors. The system is designed to support a wide variety of connectors within a shared framework, making it straightforward to expand with new types in the future.

​

Since Restitched supports multiplayer creation, an additional challenge is ensuring physics-based interactions remain deterministic, stable and synchronized across the network. The goal is to provide designers and players with responsive and reliable building blocks that enable the creation of complex contraptions and mechanics. Joints and connectors aim is to make levels feel more alive as they interact and manipulate physics. This feature is still in development and has not yet been showcased publicly. 

Level Editor Polish

Additionally, I work on smaller tidbits, that overall polish the use of the level editor, and give player more options for their levels.

Some include:

  • Layer changing camera: gives the creator a better perspective when changing layers of an object

  • Flat camera toggle: a 2D camera settings. Helpful for moving objects precisely.

  • Double-jump: Allows the player to double jump. This is a toggle that can be disabled globally in the level.

  • Depth Movement toggle: If disabled, player can only strictly move right and left (not back and forth), great for 2D levels. 

  • Camera settings: Set default camera angles, offset, and depth of field in the level.

  • Hookshot: Quickly launches the player to an object. This settings can be enabled for any object.

Flat & layer change camera

Hookshot & double jumping

Adjusting global level settings.

Wanna know more about my projects? Read more here:

MainCapsule_BB.png

Linus Ekberg

bottom of page