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).
Context (current ship)
Section titled “Context (current ship)”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.
Components (build order)
Section titled “Components (build order)”- Ship-preview harness (
tools/ship_preview/) — a WINDOWED Godot scene (real GPU, not--headlesswhose 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 totools/ship_preview/out/. - 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.
- 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 aWorldEnvironmentwith bloom + ambient + reflections. Its texture composites at the player position and rotates to facing. On the ATV that’s the Metal/Mobile renderer. - 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.
- 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.
Constraints / invariants
Section titled “Constraints / invariants”- Render-side only → determinism untouched by construction (the determinism test builds
Sim.newand binds no render nodes). No/simchanges. - 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.
Out of scope (for the spike)
Section titled “Out of scope (for the spike)”Final ship choice, shipping decision, the actual icon asset pipeline (export/resize) — all deferred to after Chris sees the renders + perf numbers.