Outpost Model (#600)
Overview
All three stations (Gateway Station, Lunar Gateway, Frontier Outpost) share a single procedural mesh: a detailed, industrial/utilitarian outpost with modular construction. The design replaces the earlier hub-and-ring model with a more visually interesting structure featuring a rotating habitation section, visible fuel storage, multiple docking ports, radiator panels, and antenna arrays.
The design language matches the existing faction aesthetic (cargo hauler, fast frigate) — gray metal tones, exposed structural elements, utilitarian construction.
Scale
- Built at meter scale (1 unit = 1 m), then scaled by
SHIP_VISUAL_SCALE_TRUE - Overall extent: ~120 m vertical (Y-axis = up)
- Model Y-axis is the station’s long axis (spin axis for the hab section)
Materials
All materials use MeshStandardMaterial unless noted.
| Name | Color | Metalness | Roughness | Notes |
|---|---|---|---|---|
| hullMat | 0x666666 | 0.7 | 0.4 | Main hull panels |
| cmdMat | 0x777777 | 0.6 | 0.3 | Command module accent |
| frameMat | 0x555555 | 0.8 | 0.3 | Structural frame/trusses |
| tankMat | 0x5a5a6a | 0.6 | 0.4 | Fuel tanks |
| radiatorMat | 0x334455 | 0.3 | 0.6 | Radiator panels (DoubleSide) |
| panelMat | 0x2244aa | 0.3 | 0.7 | Solar panels |
| glassMat | 0x112244 | 0.9 | 0.1 | Viewport glass (emissive: 0x0a1828) |
| dockMat | 0x887744 | 0.5 | 0.5 | Docking port hardware |
| windowMat | MeshBasicMaterial 0x88aaff | — | — | Window strips (unlit) |
| navLightMat | MeshBasicMaterial 0xff0000 | — | — | Red nav light |
| beaconMat | MeshBasicMaterial 0x00ff88 | — | — | Green approach beacons |
Structure
A. Static Service Section (lower half, Y ≤ 10)
1. Central Spine
CylinderGeometry(8, 8, 50, 16)centered at Y=0- Main structural core connecting all modules
- Uses
hullMat
2. Docking Module
- 4 docking ports at 90° intervals around spine at Y=−10
- Each port:
CylinderGeometry(5, 5, 8, 12)extending outward along ±X and ±Z - Guide rails:
BoxGeometry(0.5, 2, 12)flanking each port - Approach beacons: green
SphereGeometry(0.8)at port entrance (self-illuminating,beaconMat)
3. Fuel Storage
- 4 spherical tanks at 45° angles between docking ports at Y=−10
SphereGeometry(8, 16, 12)at radius ~20 m from center- Cylindrical pylons connecting to spine
- Transfer pipes: thin
CylinderGeometry(0.3)to nearest docking ports
4. Radiator Panels
- 2 pairs extending ±X at Y=−20
BoxGeometry(25, 0.15, 8)with support trusses underneath- Uses
radiatorMat(DoubleSide for thin panel visibility)
5. Antenna Array
- Bottom of spine (Y < −25)
- Mast:
CylinderGeometry(0.5, 0.5, 12, 8) - Large inverted dish:
ConeGeometry(5, 3, 12)rotated π - 2 smaller side dishes on booms at ±X offsets
B. Spin Bearing (Y ≈ 10)
TorusGeometry(9, 1.5, 8, 24)— darker mechanical look- Uses
frameMat - Marks the visual boundary between static and rotating sections
C. Rotating Hab Section (Y > 10)
Contained in a THREE.Group named 'habSection' that rotates around local Y-axis in the render loop at ~1 RPM (0.105 rad/s).
1. Hab Drum
CylinderGeometry(12, 12, 20, 20)at Y=22- 3 window strips:
TorusGeometryat Y=15, 22, 29
2. Connecting Struts
- 4 radial
CylinderGeometryfrom drum exterior to inner shaft
3. Inner Shaft (zero-g corridor)
CylinderGeometry(3, 3, 20)through center of hab drum
4. Solar Panel Arms
- 2
BoxGeometry(40, 0.2, 6)extending ±X from drum top at Y=32 - Support trusses underneath
- Rotate with hab section
D. Navigation Lights
Named group 'navLight' — blinks on 2-tick/8-tick cycle (existing logic).
- Red light on antenna tip (bottom of station)
- 4 white corner lights on docking port tips
Hab Section Rotation
In the station render loop, after nav light blink logic:
if (station._habSection === undefined) station._habSection = station.getObjectByName('habSection');
if (station._habSection) {
station._habSection.rotation.y += 0.105 * cappedDt;
}
The cappedDt variable (frame delta time, already in scope) ensures smooth rotation independent of frame rate. ~1 RPM provides a subtle but visible spin effect.
Unchanged Behavior
- Nav light blink pattern (2 on / 8 off) — unchanged
- Map view cyan diamond indicators — unchanged
- Station proximity warning (50 km) — unchanged
- Station indicator CSS2D labels — unchanged
- Station physics (gravity-only, fixed attitude in physics) — unchanged