https://sol.d9ng.co.kr SOLBIT is a WebGPU-first solar system simulation project built with Three.js, with a synchronized server clock, cinematic rendering controls, and interactive camera modes for exploration.
SOLBIT combines:
- physically-inspired orbital simulation (shared astronomy layer)
- a real-time rendering client (WebGPU + node materials)
- a sync server (REST + Socket.IO)
It is designed for both visual quality and developer extensibility.
- Real-time Sun/planet/satellite simulation
- Cinematic and Galactic frame modes
- Planet focus workflow with auto-slow pacing
- Idle focus viewing mode (slow reverse-spin camera orbit)
- WebGPU-based post-processing (bloom + exposure control)
- Planet shading pipeline with day/night lighting inputs
- Optional first-person landing mode (experimental)
- Primary interaction path: planet focus and free viewing
- Landing mode: Experimental
- accessible via keyboard shortcuts only (no dedicated UI entry)
- keys:
1,2,3,4,0for Mercury/Venus/Earth/Mars/Moon - disabled in Galactic mode
solbit/
├─ packages/
│ ├─ client/ # Vite + Three.js (WebGPU), camera/input/UI/simulation
│ └─ server/ # Fastify + Socket.IO (time pulse + planet API)
├─ shared/ # Orbital constants and astronomy math
├─ docs/ # Internal technical docs for developers/AI agents
├─ tests/ # Root tests
└─ scripts/ # Asset/texture helper scripts
- TypeScript
- pnpm workspaces
- Three.js (
three/webgpu,three/tsl) - Fastify + Socket.IO
- Redis (optional server state persistence)
pnpm installTextures are intentionally excluded from Git history to keep the repository lightweight and GitHub-friendly.
Run:
./scripts/fetch_planet_textures.sh
node ./scripts/fetch_usgs_landing_assets.mjsNotes:
fetch_planet_textures.shexpectscurl; for 4K resize steps it also needs ImageMagick (magickorconvert).- If you skip this step, the app still runs but many planets will render with missing/limited texture detail.
pnpm dev:server
pnpm dev:clientDefault URLs:
- Server:
http://localhost:3001 - Client:
http://localhost:5173
pnpm build
pnpm typecheck
pnpm testNotes:
- Client-only typecheck:
pnpm --filter @solbit/client typecheck - If a root test fails, verify whether it is an existing baseline issue vs. your change scope.
packages/client/src/main.tsloadsApp.tsEngineinitializes renderer, controls, post-processing- Sun and scene systems are created
- Planets/satellites are loaded from
/api/planets(with shared fallback) SolarSyncstarts clock synchronization- Main simulation tick (
registerSimulationTick) is attached - Focus/landing/helper tickers and input handlers are registered
GET /api/planets: orbital payloadGET /api/system-start: system start timestamp- Socket events:
solar-pulse(server time pulse)client-ping/client-pong(latency estimation)
- orbital data and units (
AU, epoch) - orbital position solver (
getOrbitPosition)
- Focus entry uses animated camera framing around the selected body
- Active focus maintenance and viewing behavior is handled by auxiliary focus ticker logic
- Mode constraints:
- Cinematic speed presets:
UL/L/M/H - Galactic speed presets:
M/H/UH
- Cinematic speed presets:
- Mouse click: focus target body
- HUD Speed button: cycle speed preset
- HUD Mode button: toggle Cinematic/Galactic
- Keyboard shortcuts:
1..4: experimental landing entry (Mercury/Venus/Earth/Mars)5..9: focus outer planets (Jupiter/Saturn/Uranus/Neptune/Pluto)0: experimental landing entry (Moon)Esc: exit landing mode
HOST(default0.0.0.0)PORT(default3001)REDIS_URL(defaultredis://127.0.0.1:6379)USE_REDIS(falsedisables Redis)
VITE_SOLAR_SERVER- default dev target:
http://localhost:3001
- default dev target:
Use in browser console:
window.__DEBUG_FOCUS__window.__DEBUG_PLANET_LIGHT__window.__DEBUG_PLANET_NDOTL__window.__DEBUG_SPACE_BG__window.__DEBUG_BINARY_BARYCENTER__window.__SOLBIT_RENDER_BACKEND__
docs/DOCS_INDEX.mddocs/BASIC.mddocs/PROJECT_TECHNICAL_HANDOFF.mddocs/AI_REFACTOR_GUIDE.mddocs/GALACTIC_MODE_MODEL.md
When making non-trivial simulation/camera changes:
- run client typecheck
- verify focus mode behavior
- verify cinematic/galactic transitions
- verify trail continuity during mode/speed changes
