Faction Packed Mobile Low-Spec Rendering Stack

Before and after view of 3D items replaced by impostor cards.

Project information

  • Category: Mobile Rendering, Optimization, Technical Art
  • Project date: 2026
  • Role: Technical Artist & Engineer
  • Built for: Faction Packed

Overview

This was a mobile performance recovery stack for Faction Packed: replacing dense runtime item rendering with impostor cards, adding an ultra-low fallback path, and giving weak devices dynamic resolution and post-processing controls.

The goal was not to make a separate low quality game. It was to keep the same readable board language while scaling rendering cost down aggressively on weaker hardware.

Problem

Faction Packed can show many animated 3D items at once. On low-end mobile devices, that means a lot of meshes, materials, transparent effects, post-processing, and UI composition fighting for the same small frame budget.

The expensive part was that visual quality and gameplay readability were tightly coupled. Items needed to remain recognizable, sortable, rotatable, and animated enough to feel alive, even when the rendering path had to get much cheaper.

What I Built

  • Item impostor renderer: A runtime proxy path that swaps full item renderers for lightweight card meshes using packed baked views.
  • Texture2DArray packing: Baked item atlases are packed into shared arrays so each impostor can select its slice through material property data.
  • Ultra-low fallback: Devices without the right feature support can fall back to atlas cards using a simpler shader target.
  • Low-resolution variants: The bake pipeline supports lower resolution atlases for devices with tighter memory budgets.
  • Device auto-detection: The quality layer evaluates memory, shader support, platform, GPU class, and CPU characteristics.
  • Dynamic resolution: Render scale responds to smoothed frame time and recovers when performance stabilizes.
  • Post-processing controls: HDR, lens flare, and camera post-processing can be disabled automatically or by player preference.
Diagram of impostor bake data feeding low spec runtime rendering.
Raw baked impostor slice for Frost Queen's Mantle.

Raw bake for Frost Queen's Mantle. This exact card is placed into a Texture2DArray as a slice, then sampled by the impostor material.

Baked impostor slice sheet showing perspective changes across several items.

Complementary slice sheet showing four item examples and how the baked perspectives shift across each impostor set.

Technical Notes

The impostor path uses shared materials, cached material property blocks, and explicit database entries so every item can resolve the right slice, UV transform, tint, and fallback mode without allocating every frame.

Dynamic resolution uses a conservative recovery model. It scales down quickly during major frame drops, then climbs back more slowly after stable performance, avoiding constant visual pulsing.

The post-processing layer stores camera and pipeline state before disabling features, so the game can restore the original rendering setup when the player or device state changes.

Portfolio Takeaway

This piece shows the technical artist role at the boundary between rendering, tooling, content, and UX. The work required shader fallbacks, editor baking, runtime quality policy, player-facing settings, and enough art judgment to preserve item readability under much harder constraints.

Everything shown here is rendered as simple quad meshes; each item uses a four-tile impostor setup to preserve the sense of depth.