Skip to content

Player-ship "ceiling" spike — design

Player-ship “ceiling” spike — design

Section titled “Player-ship “ceiling” spike — design”

Status: approved (Chris, 2026-06-30). R&D spike — build the maximum, MEASURE the perf hit on the Apple TV, then decide what ships. Performance is explicitly NOT a constraint for the exploration (“I want to know what we can achieve first and see the performance hit, then decide”).

Make the player ship stand out dramatically — potentially the source image for the logo + app icon. Explore the rendering ceiling, see it, measure the cost, then choose. “Both, staged”: an enhanced in-game ship AND a max-fidelity offline hero render for the icon (decoupled fidelity).

render/player_renderer.gd — 100% procedural, no art. Per-tier polygon silhouette (dart→flagship, evolves every 5 levels) + a faux-3D “lit hull” (CPU-generated bevel normal map shaded by a canvas shader with a fixed world-space key light) + stacked additive neon (halo, rim, breathing core, canopy, thruster, accent orbs, ascension flash) + hue identity per tier. Render-only.

Renderer split: tvOS/iOS = Mobile renderer on Metal (HDR 2D bloom + full 3D available); web = gl_compatibility (LDR, limited). The A12 Apple TV is the perf-sensitive target.

  1. Ship-preview harness (tools/ship_preview/) — a WINDOWED Godot scene (real GPU, not --headless whose dummy renderer can’t run the shaders) that renders the ship(s) in isolation on a dark field and saves PNGs (tiers + angles). How we see each iteration + capture icon candidates. Runnable from the CLI; saves to tools/ship_preview/out/.
  2. Pushed procedural ship — take the lit-hull canvas shader to its ceiling: fresnel/rim light, animated iridescence + energy flow, hard specular glints, HDR-blooming emissive trim; plus a signature hero element (reactor core / faceted crystalline hull). Stays in the current pipeline.
  3. Real 3D ship via SubViewport — a SubViewport (transparent bg) with a real 3D scene: a PROCEDURAL mesh (extrude/bevel the existing tier silhouette into a faceted 3D craft — on-brand, no art), a PBR metallic material (metallic/roughness/emission), real 3D key + rim lights, and a WorldEnvironment with bloom + ambient + reflections. Its texture composites at the player position and rotates to facing. On the ATV that’s the Metal/Mobile renderer.
  4. In-game A/B toggle + live fps readout — switch procedural ↔ 3D mid-run with an on-screen fps (reuse the measurement overlay) + telemetry capturing the hit, so the A12 cost is visible idle and under a heavy swarm.
  5. Icon/logo render — a max-fidelity still from the 3D ship (no frame budget) as the icon/logo candidate.

Then Chris decides what’s viable to ship from the look + the measured hit.

  • Render-side only → determinism untouched by construction (the determinism test builds Sim.new and binds no render nodes). No /sim changes.
  • No art assets — all meshes/materials/shaders procedural (continues the project’s no-art approach).
  • The 3D path needs the RenderingDevice (Metal on tvOS / Vulkan on the Mac for the preview); it degrades on web gl_compat — acceptable, the web demo isn’t the target for this.

Final ship choice, shipping decision, the actual icon asset pipeline (export/resize) — all deferred to after Chris sees the renders + perf numbers.