Fast Frigate Model Specification
Issue: #598
Status: Draft
Ship class: fast_frigate
Builder method: _createFastFrigateMesh() in cockpitView.js
Design Intent
Sleek angular warship from the same shipyard as the cargo hauler — sharing materials, structural language (exposed trusses, torus accents, modular mounting), and engine design — while being distinctly smaller, faster, and more aggressive.
Immutable Constraints
| Constraint | Value |
|---|---|
| RCS pod positions | [±3.5, ±3.5, ±6] (physics-dependent) |
| Engine plume group name | 'enginePlume' (single plume at X=0) |
| Nav lights group name | 'navLights' |
_addRCSPods() params |
positions, 0.8, 0.6, 0.2, 1.5, 0.4 |
| Forward axis | +Y |
| Build scale | 1 unit = 1 meter, scaled by shipVisualScale |
| Ship envelope | ~18 m long × 12 m wide × 10 m tall |
Materials (12)
Identical palette to cargo hauler for faction consistency.
| Name | Color | Metalness | Roughness | Notes |
|---|---|---|---|---|
hullMat |
0x666666 | 0.7 | 0.4 | Main hull plates |
hullDarkMat |
0x555555 | 0.7 | 0.5 | Recessed/worn panels |
cmdMat |
0x777777 | 0.6 | 0.3 | Bridge/cockpit |
frameMat |
0x555555 | 0.8 | 0.3 | Structural trusses |
podMat |
0x887744 | 0.5 | 0.5 | Weapon hardpoint housings (= hauler cargo pod) |
doorMat |
0x776633 | 0.5 | 0.6 | Weapon bay doors |
tankMat |
0x5a5a6a | 0.6 | 0.4 | Fuel tanks |
radiatorMat |
0x334455 | 0.3 | 0.6 | Radiator panels (DoubleSide) |
pipeMat |
0x5a5a5a | 0.6 | 0.4 | Fuel/coolant piping |
nozzleMat |
0x333333 | 0.9 | 0.2 | Engine internals |
glassMat |
0x112244 | 0.9 | 0.1 | Viewports (emissive 0x0a1828) |
armorMat |
0x887744 | 0.5 | 0.5 | Armor plate accents (= hauler dockMat) |
Geometry Sections (~170 meshes)
A. Structural Spine (Y = −7 to +7) — 16 meshes
Shorter, tighter version of hauler’s open-frame truss — the key faction unifier.
- 4 longitudinal rails:
BoxGeometry(0.4, 14, 0.4)at[±2.5, 0, ±2.5]— frameMat - 4 rib rings at Y = −5, −1, +3, +7:
- Outer frame:
BoxGeometry(5.5, 0.3, 5.5)— hullDarkMat - X cross-member:
BoxGeometry(5, 0.25, 0.25)— frameMat - Z cross-member:
BoxGeometry(0.25, 0.25, 5)— frameMat
- Outer frame:
B. Forward Hull Plates (Y = +3 to +9) — 8 meshes
Angular/faceted plates forming a tapered wedge — military look distinct from hauler’s boxy modules.
- 4 main hull plates (dorsal pair, ventral pair): trapezoidal
BoxGeometrysections — hullMat/hullDarkMat- Dorsal plates:
BoxGeometry(5, 6, 0.2)at Z = +2.5, angled inward - Ventral plates:
BoxGeometry(5, 6, 0.2)at Z = −2.5, angled inward
- Dorsal plates:
- 2 side plates:
BoxGeometry(0.2, 6, 5)at X = ±2.5 — hullMat - Nose cap:
ConeGeometry(2.0, 3, 6)at (0, 10.5, 0) — cmdMat (6-sided = faceted) - Nose accent ring:
TorusGeometry(2.0, 0.15, 6, 24)at Y = +9, rotated π/2 on X — frameMat
C. Bridge/Cockpit (Y = +6 to +9, dorsal offset Z = +2.2) — 6 meshes
Small angular cockpit on dorsal surface — asymmetric like hauler’s command module.
- Bridge housing:
BoxGeometry(3.5, 3, 2.5)at (0, 7.5, 2.2) — cmdMat - 2 side accent plates:
BoxGeometry(0.1, 2.5, 2)at X = ±1.8 — hullDarkMat - 2 viewport strips:
BoxGeometry(2.5, 0.15, 0.6)at Y = 8.0 and 7.0, Z = 3.5 — glassMat - Torus accent:
TorusGeometry(1.5, 0.1, 6, 16)at Y = 6, Z = 2.2 — frameMat
D. Aft Engineering (Y = −5 to −7) — 9 meshes
Compact engineering hull — same structural language as hauler aft section.
- Hull:
BoxGeometry(4.5, 4, 4.5)at (0, −5.5, 0) — hullMat - Reactor housing (dorsal):
CylinderGeometry(1.2, 1.2, 4, 8)at (0, −5.5, 2.8) — tankMat - Mount frame:
BoxGeometry(5.5, 0.4, 2)at (0, −3.5, 0) — frameMat - 2 stiffener struts:
BoxGeometry(0.2, 3, 0.2)flanking — frameMat - 4 equipment box greebles:
BoxGeometry(0.8, 0.8, 0.6)— hullDarkMat
E. Engine Bell (single) — 3 meshes
Same design language as hauler (truncated cone + inner nozzle + lip ring) but single and smaller.
- Outer bell:
CylinderGeometry(1.2, 2.5, 4, 12)at (0, −9.5, 0) — frameMat - Inner nozzle:
CylinderGeometry(0.8, 2.0, 3.2, 10)at (0, −9.7, 0) — nozzleMat - Lip ring:
TorusGeometry(2.5, 0.2, 6, 16)at Y = −11.5 — nozzleMat
F. Fuel Tanks (2, flanking aft) — 12 meshes
Same visual language as hauler: cylinders + squished sphere end caps + torus mounting straps.
Per tank (at X = ±2.2):
- Tank body:
CylinderGeometry(1.0, 1.0, 8, 8)— tankMat - 2 end caps:
SphereGeometry(1.0, 8, 6)scaled (1, 0.4, 1) — tankMat - 2 mounting straps:
TorusGeometry(1.1, 0.1, 4, 12)— frameMat - Transfer pipe:
CylinderGeometry(0.15, 0.15, 3, 6)angled to engine — pipeMat
G. Weapon Hardpoints (port/stbd, Y = +1 to +4) — 12 meshes
Military distinction — podMat/doorMat (= hauler cargo accent colors) for faction-consistent weapon mounts with same “pylon + modular pod” language.
Per hardpoint (at X = ±4.5):
- Mount pylon:
BoxGeometry(1.5, 0.3, 0.3)— frameMat - Weapon pod:
BoxGeometry(1.2, 3, 1.2)— podMat - Door panel:
BoxGeometry(0.15, 2, 1)outward-facing — doorMat - 2 latch bars:
BoxGeometry(0.8, 0.1, 0.1)— frameMat - Mounting strap:
TorusGeometry(0.7, 0.08, 4, 8)— frameMat
H. Swept Fins (structurally connected) — 8 meshes
Larger than current, connected to spine rails via visible struts — no more floating.
Per fin (port at X = −5, stbd at X = +5):
- Fin body:
BoxGeometry(4, 0.15, 2.5)at Y ≈ −2, rotated ±20° on Z — hullMat - Root strut:
BoxGeometry(0.2, 0.2, 2)from spine rail to fin root — frameMat - Tip strut:
BoxGeometry(0.2, 0.2, 1.5)at fin tip — frameMat - Leading-edge accent:
BoxGeometry(4, 0.08, 0.15)on leading edge — hullDarkMat
I. Radiator Panels (short booms) — 10 meshes
Smaller version of hauler radiators: thin panel + subdivision lines + boom + hinge joint.
Per radiator (at X = ±5.5):
- Panel:
BoxGeometry(0.08, 6, 4)— radiatorMat (DoubleSide) - 2 subdivision lines:
BoxGeometry(0.1, 0.05, 4)— frameMat - Boom:
CylinderGeometry(0.15, 0.15, 3, 6)rotated π/2 on Z — frameMat - Hinge sphere:
SphereGeometry(0.2, 6, 4)— frameMat
J. Ventral Sensor/Targeting Array (Z = −3.5) — 8 meshes
Warship distinction — replaces hauler’s docking port with targeting sensors.
- Housing:
BoxGeometry(2.5, 3, 1.5)at (0, 1.5, −3.5) — hullMat - Primary lens:
SphereGeometry(0.5, 8, 6)— glassMat - 2 secondary lenses:
SphereGeometry(0.3, 6, 4)— glassMat - 3 scanner bars:
BoxGeometry(0.1, 0.1, 1.5)— frameMat - Mounting bracket:
BoxGeometry(0.2, 2, 0.2)— frameMat
K. Antennas & Sensors — 9 meshes
Same design elements as hauler: dorsal sensor dome, comm dish, whip antenna, sensor housings.
- Sensor dome:
SphereGeometry(0.6, 8, 6, 0, 2π, 0, π/2)(hemisphere) at (0, 9, 3.5) — cmdMat - Dome mast:
CylinderGeometry(0.1, 0.1, 1.5, 6)— frameMat - Antenna mast:
CylinderGeometry(0.08, 0.08, 3, 6)at (0, 12.5, 0) — frameMat - Comm dish:
ConeGeometry(0.6, 0.4, 8)inverted at mast top — cmdMat - Aft whip:
CylinderGeometry(0.05, 0.05, 2, 4)at (0, −7, −2.5) — frameMat - 2 sensor housings:
BoxGeometry(0.5, 0.5, 0.4)flanking bridge — hullMat - 2 sensor lenses:
SphereGeometry(0.15, 6, 4)— glassMat
L. Ventral Keel — 4 meshes
- Keel beam:
BoxGeometry(0.8, 12, 0.4)at (0, 0, −3.2) — frameMat - 3 ribs:
BoxGeometry(2.5, 0.2, 0.3)at Y = −4, 0, +4 — frameMat
M. RCS Integration Struts — 8 meshes
Each pod gets a strut connecting it to the nearest spine rail corner.
- 8 struts:
BoxGeometry(0.15, 0.15, length)computed from pod position to nearest spine rail corner at[±2.5, ±2.5]— frameMat
N. Surface Greebles — 16 meshes
- 4 panel lines on dorsal hull:
BoxGeometry(3, 0.05, 0.05)— hullDarkMat - 4 equipment boxes on engineering hull:
BoxGeometry(0.6, 0.6, 0.4)— hullDarkMat - 4 fuel conduits:
CylinderGeometry(0.1, 0.1, 2, 4)— pipeMat - 4 armor plate accents on bridge:
BoxGeometry(1.2, 0.6, 0.08)— armorMat
O. Navigation Lights — 6 meshes
All using SphereGeometry(0.4, 8, 8) with MeshBasicMaterial({ toneMapped: false }):
| Light | Color | Position | Location |
|---|---|---|---|
| Port | 0xff0000 | (−7, −2, 1) | Port fin tip |
| Starboard | 0x00ff00 | (7, −2, 1) | Stbd fin tip |
| Forward | 0xffffff | (0, 13.5, 0) | Antenna mast tip |
| Aft | 0xffaa00 | (0, −12, 0) | Below engine bell |
| Dorsal strobe | 0xffffff | (0, 10, 3.5) | Dome mast tip |
| Ventral strobe | 0xffffff | (0, 1.5, −4.5) | Below sensor array |
P. Engine Plume (triple-layer, single) — 3 meshes
Same hauler plume colors, single nozzle.
| Layer | Color | Opacity | Radius scale | Height scale |
|---|---|---|---|---|
| Outer | 0x4488ff | 0.70 | 1.0× | 1.0× |
| Inner | 0xaaddff | 0.80 | 0.6× | 0.6× |
| Core | 0xddffff | 0.90 | 0.3× | 0.35× |
Base radius = bell bottom (2.5 m), plume height = 12 m. Group positioned at bell bottom: Y = −11.5 − 6 = −17.5.
Q. RCS Pods — ~56 meshes
Via _addRCSPods(), unchanged. Positions: [±3.5, ±3.5, ±6].
Total Estimated Mesh Count
~170 meshes (excluding RCS ~56) = ~226 total.
Verification Checklist
- RCS pods visibly attached to hull (struts, no floating)
- Toggle thrust: single plume with 3-layer glow
- Nav lights blink correctly (6 lights)
- Faction consistency: same color palette, truss spine, torus accents, engine design as cargo hauler
- Distinct silhouette: angular wedge vs hauler’s boxy frame
- No console errors from missing group names (
enginePlume,navLights,rcsPods) - Ship envelope within ~18 m × 12 m × 10 m