Jak powstało Widnokrąg: Jura i Śląsk z lotu ptaka
Darmowy symulator lotu w przeglądarce, w którym całe Śląskie, Jura po Kraków i kawałek Czech i Słowacji są zbudowane z prawdziwych zdjęć lotniczych, lidaru i państwowych modeli 3D budynków. Opowiadam, skąd wziął się pomysł, jak z otwartych danych powstał świat 172 × 212 km i co było najtrudniejsze.

Skąd wziął się pomysł na tę grę?
Pochodzę z Jury Krakowsko-Częstochowskiej i przez lata latałem dronem nad moją okolicą. Zdjęcia z tych lotów wrzucałem do sieci i regularnie słyszałem, że inni też chcieliby zobaczyć swoje strony z góry, ale dron to spory wydatek i nie każdy ma czas czy warunki, żeby nim latać. Pomyślałem, że skoro potrafię programować, mogę zrobić coś, co trafi do każdego: widok z lotu ptaka dla każdego, za darmo, na zwykłym telefonie.
Punktem wyjścia nie była żadna konkretna gra, tylko pytanie, czy da się zbudować prawdziwy kawałek Polski wyłącznie z otwartych danych publicznych. Okazało się, że Polska ma pod tym względem świetne zasoby: Geoportal udostępnia ortofotomapę, lotnicze skanowanie laserowe terenu i modele 3D budynków na licencji CC BY 4.0, a OpenStreetMap dokłada drogi, tory, rzeki i nazwy. Moment "to jest to" przyszedł, kiedy pierwszy raz przeleciałem w przeglądarce nad zamkiem Ogrodzieniec i rozpoznałem każdy dom w Podzamczu.
Jak wyglądał pierwszy grywalny prototyp?
Pierwsza wersja wrzucona do repozytorium 21 października 2026, była grywalna: Cessna startowała z trawiastego lądowiska Niegowoniczki (gmina Łazy), pod nią leżał teren z lidaru pokryty ortofotomapą, stały budynki 3D z Geoportalu, były drogi z jeżdżącymi samochodami, jazda autem i zmiana pór roku. Obszar obejmował wtedy tylko okolice Jury.
Od tego momentu wszystko szło bardzo szybko: w kolejnych dniach doszły drzewa z prawdziwą wysokością koron z lidaru, chmury i pogoda, kolejne maszyny, misje, radio lotnicze, a świat urósł do całego województwa śląskiego, Jury po Kraków i pasa Czech i Słowacji przy granicy.
Na czym zbudowana jest gra i dlaczego?
- Babylon.js 9 i WebGL2: gra działa w przeglądarce, bez instalacji i bez konta, na komputerze, tablecie i telefonie. Dla mnie to był warunek, bo celem było "pod strzechy", a nie dla posiadaczy mocnego PC. Babylon ma dojrzałe cienie kaskadowe, postprocessing i dobrą wydajność na telefonach.
- Vite do budowania, JavaScript w grze, Python i Node.js w skryptach przygotowujących dane.
- Cloudflare Pages: statyczne pliki na sieci CDN, bez serwera gry i bez kosztów. Ograniczenia (20 tys. plików, 25 MiB na plik) mocno wpłynęły na architekturę danych.
- Dane: ortofotomapa, lidar, modele 3D budynków (LoD2) i BDOT10k z GUGiK, OpenStreetMap, rejestr zabytków NID, Copernicus, pogoda na żywo z Open-Meteo, za granicą zdjęcia ČÚZK i GKÚ.
- Dźwięk i radio: komunikaty lotnicze wygenerowane syntezą mowy Piper i sprawdzone rozpoznawaniem mowy whisper.cpp, dźwięki otoczenia z wolnych licencji.
Fizyka lotu jest własna: bryła sztywna z sześcioma stopniami swobody, osobne parametry dla każdej z kilkunastu maszyn, od Cessny przez szybowiec i śmigłowce po balon i drona FPV.
Jaką rolę odegrało AI?
Ogromną i nie ukrywam tego. Kod pisałem razem z asystentem AI (Claude): ja decydowałem, co i jak ma działać, testowałem, latałem, porównywałem ze zdjęciami i z rzeczywistością, a AI pisało sporą część kodu, skrypty do przetwarzania danych i pomagało szukać źródeł danych i licencji.
Co AI robiło dobrze: szybkie przekładanie pomysłu na działający kod, łączenie wielu formatów danych (CityGML, GeoTIFF, GeoPackage, kafle map), pisanie shaderów, tłumaczenia na angielski, czeski i słowacki, a nawet przegląd własnej pracy na zrzutach ekranu.
Gdzie trzeba było poprawiać: AI nie zna okolicy. To ja wiedziałem, że wieżowiec przy Spodku wygląda jak trzy różne klocki, że w tunelu w Katowicach coś migocze, a bazylika w Zawierciu ma zielone hełmy z miedzi. Bez tego oka z miejsca świat byłby poprawny technicznie, ale nie "nasz". Grafika w grze nie jest generowana przez AI: to prawdziwe zdjęcia lotnicze i dane pomiarowe.
Co było najtrudniejsze?
Zmieszczenie prawdziwego świata w przeglądarce telefonu i na darmowym hostingu.
Sama ortofotomapa dla obszaru 172 × 212 km to około 2,3 miliona kafli zdjęć. Cloudflare Pages przyjmuje najwyżej 20 tysięcy plików, a telefon ma ograniczoną pamięć. Rozwiązaniem okazały się duże paczki: kafle zdjęć są sklejone w kilkaset plików z tabelą przesunięć na początku, a gra pobiera z nich tylko potrzebne fragmenty zapytaniami HTTP Range. Pod samolotem są zdjęcia najwyższej rozdzielczości (ok. 0,4 m na piksel), dalej coraz mniej szczegółowe, aż po horyzont 30 km za granicą świata. Budynki, drogi i drzewa wczytują się kaflami 4 × 4 km wokół kamery i są zwalniane, gdy samolot odleci.
Drugą stroną tego samego problemu było łączenie danych. Każdy zbiór powstawał w innych latach i z inną dokładnością: państwowe modele budynków potrafią być sprzed przebudowy, mapa nie mówi, jak wysoki jest nowy budynek, a lidar widzi drzewo nad domem jako dach. Dużo pracy poszło w reguły, które to godzą, np. wysokości 31 tysięcy budynków z nowszego skanowania z odrzuceniem koron drzew na podstawie starszego.
Co wypadło z gry?
- Opisy drzewostanów z Lasów Państwowych: dostępne tylko na zamówienie dla każdego nadleśnictwa, więc rodzaj lasu bierze się z danych Copernicusa.
- Pierwotna nazwa i zasięg: na początku był to symulator lotu nad samą Jurą, pod inną nazwą i adresem. Gdy świat objął cały Śląsk, zmieniłem nazwę na Widnokrąg, a stare linki przekierowują na nowy adres.
Ile to trwało i kto nad tym pracował?
Ekipa: solo, z asystentem AI.Wersja 0.5.3 wyszła 29 października: po drodze było niemal 390 zmian i osiemnaście wydanych wersji, a kod gry i skryptów danych to ponad 33 tysiące linii. Do tego godziny obliczeń: pobieranie milionów kafli zdjęć, przetwarzanie lidaru i budowanie świata, które często trwały całe noce.
Co dziś zrobiłoby się inaczej?
Od pierwszego dnia projektowałbym dane pod ograniczenia hostingu i telefonów, a nie dopiero wtedy, gdy przestało się mieścić. Paczki zdjęć, limit plików i pamięć telefonu wymusiły kilka przebudów, których dałoby się uniknąć. Mapę wysokości od początku zrobiłbym w kafelkach wczytywanych wokół samolotu, bo jeden prostokąt na cały świat rośnie z każdym rozszerzeniem i obciąża każdy telefon.
Druga rada: wcześniej pokazać grę ludziom z konkretnych miejscowości. Najlepsze poprawki przyszły od mieszkańców i urzędów, którzy wiedzą, jak naprawdę wygląda ich kościół, szyb czy tunel.
Co dalej z grą?
Najbliższa wersja 0.5.4 to Podhale, Tatry, Poprad i Pieniny ze Szczawnicą. Po słowackiej stronie Tatr dokładam słowacki lidar (ÚGKK SR), żeby góry były równie dokładne po obu stronach granicy, a na lotnisku Poprad-Tatry pojawi się radio, także po słowacku. Do tego kamera z pierwszej osoby i sterowanie myszą w dronie FPV oraz realistyczne pułapy maszyn.
Dalej: większe paczki danych i mapa wysokości w kafelkach, co otworzy drogę do kolejnych regionów. Nowe miejsca w dużej mierze dodaję na podstawie zgłoszeń: urzędy z Milówki, Pszowa i Zawiercia przysłały listy atrakcji i zdjęcia, z których powstały nowe modele. Zapraszam na Discorda projektu: https://discord.gg/CwH8XKRnpz
Widnokrąg jest bezpłatny, bez reklam i bez rejestracji: https://widnokrag.net. Ma na dzień dzisiejszy 749 miejsc do odwiedzenia, każde z linkiem, który od razu startuje lot nad nim, lekcję pierwszego lotu dla osób, które nigdy nie grały, i działa po polsku, angielsku, czesku i słowacku. Jeśli brakuje czegoś z Twojej okolicy, napisz: kontakt@widnokrag.net.

