AstrOS Engine: orbity satelitów w przeglądarce
Konsola misji z katalogiem satelitów krążących wokół Ziemi: całą scenę liczy Twoja karta graficzna, wprost w przeglądarce, bez instalacji.
Dziesiątki tysięcy ruchomych obiektów na żywo, bez instalacji
Tysiące ruchomych obiektów naraz zwykle zabijają płynność: procesor i gotowe biblioteki nie nadążają z liczeniem pozycji klatka po klatce. Chcieliśmy udowodnić, że przeglądarka udźwignie całą populację, jeśli obliczenia przejmie karta graficzna. Bez instalacji, w lekkiej paczce, bez gubienia klatek.
Cała praca na GPU, zero kosztu CPU na obiekt
- Seed raz
- Elementy orbitalne 50 000 obiektów trafiają do bufora GPU jednorazowo: około 16 500 z realnego katalogu CelesTrak, reszta z generatora proceduralnego.
- Compute co klatkę
- Shader WGSL propaguje wszystkie obiekty równolegle (Kepler + J2 + drag). CPU nie dotyka pojedynczego satelity.
- Render bez kopii
- Render pass czyta pozycje wprost z bufora (vertex pulling): jeden draw call na warstwę, bez przepisywania danych na CPU.
Silnik jest neutralny względem platformy: ten sam kod buduje realne potoki na natywnym urządzeniu Metal lub Vulkan, co pozwala testować je w headless CI bez przeglądarki.
Konsola telemetrii NASA i NOAA
Nad sceną 3D wisi panel, który myśli jak dyżurny lotów. Zamiast pięciu tabel dostajesz gotowy wniosek, np. „ELEVATED: NOAA WARNING G2”. Suwak czasu (×0,125-×4096, skala logarytmiczna) przyspiesza symulację, a zorza na globusie reaguje na rzeczywisty wskaźnik Kp, czyli miarę burz geomagnetycznych. Całość działa też na telefonie.
- NOAA SWPC
- Planetarny Kp, wiatr słoneczny, alerty pogody kosmicznej
- NASA NeoWs
- Planetoidy bliskie Ziemi, flagi zagrożenia, najbliższe przeloty
- NASA EONET
- Zdarzenia naturalne: pożary, burze, wulkany, powodzie
- APOD / EPIC / GIBS
- Zdjęcie dnia, Ziemia z DSCOVR, dzienne obrazy satelitarne
- Launch Library 2
- Nadchodzące starty orbitalne z odliczaniem
Mierzona, nie deklarowana
- ~16 500
- realnych obiektów z katalogu CelesTrak wypełnia scenę (16 563 we wdrożeniu z 13.09.2026; katalog jest pobierany na nowo przy każdym wdrożeniu, więc liczba rośnie). Resztę do 50 000 dopełnia flota syntetyczna, liczona na GPU tak samo.
- 25k-1M
- obiektów na suwaku: sam wybierasz skalę sceny, a płynność jest mierzona na żywo, nie deklarowana.
- ~1100×
- szybciej wczytuje się zapieczony katalog niż te same dane w JSON: 9,2 µs wobec 10,2 ms dla 10 tys. obiektów, benchmark criterion na maszynie CI x86-64. To stosunek, nie czas na twoim sprzęcie.
- 211 KB
- waży sam silnik przesyłany łączem (527 KB po rozpakowaniu); całe pierwsze wczytanie strony to 1,4 MB. Zmierzone na wdrożeniu 13.09.2026.
Zapieczony blob jest tablicą elementów GPU: dekodowanie to praktycznie kopia, bez matematyki na obiekt. Realizm jedzie tą samą ścieżką zero-kosztu CPU co reszta silnika. Sam czytnik SGP4 (czysty Rust) trzyma się referencyjnej implementacji CelesTrak z dokładnością poniżej 2×10⁻⁷ km.
Projekt własny. Zbudowaliśmy go i utrzymujemy sami. Scenę wypełnia katalog realnych obiektów i flota syntetyczna, obie liczone tak samo.
Każdy wybór ma powód
| Warstwa | Wybór | Co to daje |
|---|---|---|
| Język | Rust, kompilowany do WebAssembly | Silnik przychodzi jako mała paczka i startuje zaraz po wejściu na stronę. |
| Grafika | wgpu (WebGPU) | Scena rysuje się na Twojej karcie graficznej, bez warstwy pośredniej. |
| Fizyka | Shader compute (WGSL) | Orbity liczą się równolegle, więc procesor zostaje wolny na resztę strony. |
| Render | Vertex pulling | Pozycje idą z pamięci karty wprost na ekran, bez kopiowania w obie strony. |
| Dane | Katalog CelesTrak (SGP4) | Orbity biorą się z publicznego katalogu obiektów, nie z wymyślonych liczb. |
