Skip to content

Art Direction and Asset Pipeline ​

Status: draft v0.1, 2026-11-09. Pipeline verification in docs/research/blender-pipeline-proof.md.


1. The governing idea ​

This is a game about information. The art's first job is to carry data, and its second job is to be beautiful. A screenshot should tell you where you are, whether you are safe, and who owns what, before you read a single word.

That is why there are no decorative assets in this plan. Every visual property is bound to game state:

Visual channelEncodes
Colour temperature of a systemImperial Core, taxed, or untaxed — cold blue/white where the navy answers, red-shifted where nobody is coming
SaturationHow settled a region is. The frontier literally desaturates.
LightInfrastructure. Lit lanes are maintained lanes; a dead gate goes dark.
SilhouetteShip role — you must be able to name a hull class from its outline at thumbnail size
Emblem and hue accentOwnership

The lapse map (SECURITY-AND-SOVEREIGNTY.md §3) is therefore not a UI overlay — it is what the galaxy looks like. A dying empire visibly goes dark. That is worth more than any amount of texture detail.

2. Direction ​

Clean hard sci-fi. Not grimy, not cartoon, not retro. Think orbital mechanics diagrams and deep-space photography rather than space opera.

  • Space is dark and mostly empty, and we do not fight that. Emptiness is the theme.
  • Light is the only luxury. Strong rim lighting, high contrast, bloom used sparingly and with intent.
  • Low-poly with smooth shading and good materials, not faceted. Silhouette and lighting do the work; polygon count does not.
  • UI is luminous and thin over the dark: hairline rules, generous spacing, one accent colour per context.
  • Readable at arm's length, on a phone, in daylight. This constraint kills more ideas than any other and it wins every argument.

Explicitly rejected: pixel art (Jonathan's call — reads as low effort for this genre), photoreal (we cannot afford it and it does not serve information), heavy UI chrome and skeuomorphic panels.

3. Space is generated, never authored ​

Stars, nebulae, planets and the galaxy itself are GLSL shaders fed by the same seed as the simulation (ARCHITECTURE.md §1.1).

  • A planet is a noise function plus a colour ramp plus a seed — tens of lines, kilobytes on the wire, infinite variety.
  • The view is the data. What you see is literally generated from the same function the server uses to decide what is there, so it cannot drift from the fiction.
  • No artist, no export, no asset budget, and it scales to a galaxy of any size for free.

This half of the art is code, lives in the repo, and is iterated by agents directly.

4. Things are generated too ​

Ships, stations, gates, structures and drones are parametric Blender Python scripts, not hand-modelled files.

hull class + fitted modules  →  build_ship.py  →  GLB (meshopt + KTX2)
  • A ship's appearance is a function of what it actually is in the simulation. Fit a bigger engine and the nacelles change. Visual truth comes free.
  • The whole fleet regenerates from source on any commit — no binary assets in git history, no stale models, no export step.
  • Scripted means agents author art the same way they author code: diffs, review, iteration, no human in the loop.

Toolchain: Blender 5.2.3 LTS headless, in a container → GLB → gltfpack -cc -tc → meshopt + KTX2/Basis.

This is verified, not planned (docs/research/blender-pipeline-proof.md): it runs with no GPU and no display, a parametric ship takes 0.3 s end to end, and a finished hull lands at 8.8 KB and parses cleanly under three.js 0.187. A twenty-ship fleet regenerates from source in about six seconds, which means the whole fleet can be rebuilt on every commit and no binary asset ever enters git.

Two traps are recorded there: Blender needs libGL and six X client libraries present even in --background, and the glTF exporter's gltfpack options are inert unless the addon preference points at a real gltfpack binary.

Budgets for a mid-range Android with ~20 ships on screen (from docs/research/client-stack.md §6): keep hulls in the low thousands of triangles, textures at 1024² or below, and favour shared materials over unique ones. Draw calls are the real budget; instance aggressively.

Blender MCP (the stdio bridge to a running Blender on Jonathan's Mac) is not the pipeline — it needs the app open and a human present. It stays available as an inspection door when someone wants to eyeball or nudge a model interactively.

5. UI comes from claude.ai, and here is how it stays in sync ​

Jonathan designs UI in claude.ai because that is where he is effective. The problem to solve is that he must never become an asset courier.

The protocol:

  1. He designs a screen in claude.ai as a React + Tailwind artifact. Code, not an image.
  2. He saves the artifact file into art/ui-inbound/<screen>.tsx and says it's there.
  3. An agent adapts it: wires real data, real state, real components, moves it into the client, and deletes the inbound file.

One drop, no export, no binary, no back-and-forth. Because the artifact is code in the same language and the same CSS framework as the client, "adapting" it is a mechanical job for a worker agent, not a reinterpretation.

The other direction, which saves him more time: for any screen he does not want to design himself, an agent builds a static preview and he reacts to it. Describing what is wrong with something in front of you is far cheaper than designing it from nothing, and it keeps the loop inside this repo.

The design system — colours, spacing, type scale, the information-encoding rules of §1 — lives in the Tailwind config and is the contract both directions agree on. It gets written before the first screen, not after the fifth.

6. Sound ​

Out of scope until the game is playable. When it matters: the music-studio MCP is already configured on this machine and ambient space music is one of the few things generative tooling is genuinely good at. Noted so nobody buys a library.

7. Open questions ​

  • [ ] Does the galaxy map render in 3D or as a stylised 2D projection on mobile? 3D is prettier; 2D is far more readable for a game whose map is a graph of roads. Probably 2D-with-depth.
  • [ ] How much of the ship's fitted modules should be visible? Full visual truth is expensive in draw calls.
  • [ ] Do we need a 2D icon set for resources and modules, or can everything be a small rendered 3D thumbnail? Thumbnails are free given we already have the models.
  • [ ] Nebula and galactic-core rendering cost on a mid-range phone is unmeasured. Needs a spike before it becomes a pillar of the look.

Changelog ​

  • 2026-11-09 — v0.1. Information-first direction, clean hard sci-fi, procedural shaders for space, parametric headless Blender for objects, claude.ai artifact drop protocol for UI. Pixel art rejected per Jonathan.

Galaxy design documentation. Nothing here is implemented yet.