Drogi w Cities: Skylines
Inaugurację tematu o miastach rozpoczynamy od gry Cities: Skylines i rozważań nad optymalizacją sieci drogowej.
niedziela, 31 grudnia 2017
W gry komputerowe nie gram obecnie zbyt często, ale jeśli już gram, to preferuję tytuły, gdzie można coś zbudować; innymi słowy takie, które byłyby nie tylko rozrywką, ale i ciekawym wyzwaniem intelektualnym. Od ponad 2 lat niekwestionowanym liderem jest fińska gra Cities: Skylines, w której naszym celem jest budowanie współczesnego miasta. Gdy ujrzałem ją po raz pierwszy i pograłem chwilę, od razu stwierdziłem: muszę ją mieć. Gra jest zaiste, wybitna. Fińskiemu studiu Colossal Order udało się zdetronizować dotychczasowego króla gatunku, serię SimCity. C:S pozwala tworzyć bardzo realistyczne miasta, a jego szczególnie mocną stroną jest rewelacyjna mechanika transportu w mieście: począwszy od ruchu pieszych, poprzez samochody, aż po komunikację miejską. O jej realiźmie świadczy kilka faktów. Władze Sztokholmu wykorzystały grę do optymalizacji sieci transportu w szwedzkiej stolicy. Innym razem jeden z graczy stworzył wirtualne San Francisco w skali 1:1,5 i okazało się, że korki tworzyły się w podobnych miejscach, co w rzeczywistości. I właśnie tematowi transportu poświęcony będzie ten wpis. Pragnę przedstawić kilka pomysłów na to, jak zrobić to dobrze.
Słowo o mechanice ruchu drogowego
W C:S system transportu odgrywa ważną rolę w życiu miasta i jego efektywność przekłada się zarówno na zadowolenie mieszkańców, jak i wpływy do budżetu. Aby działały sklepy, muszą do nich dojechać zarówno ciężarówki z zaopatrzeniem, jak i mieszkańcy. Aby działały fabryki, muszą do nich dojechać surowce. Służby miejskie muszą dojechać do miejsc, gdzie są potrzebne oraz patrolować ulice. Aby uzyskać realistyczne warunki ruchu, gra osobno symuluje każdy pojazd i każdego przemieszczającego się człowieka. Wszyscy mają jasny cel podróży i aby do niego dotrzeć, mogą wykorzystać wszystkie dostępne środki: komunikację miejską, rower, samochód czy własne nogi. Ważne jest, że pojazdy i ludzie starają się dotrzeć do celu najkrótszą możliwą drogą, przy czym nie jest tutaj brane pod uwagę natężenie ruchu na wybranej trasie. Jest to pewien kompromis pomiędzy dokładnością symulacji, a szybkością działania gry. O ile mi wiadomo, istniejące mody transportowe pozwalają to zmienić (bodajże Traffic Manager posiada opcję Zaawansowana SI pojazdów), jednak z moich testów wynika, że przy miastach liczących kilkaset tysięcy mieszkańców znacząco spowalnia to grę. Drugi kompromis to ograniczenie liczby poruszających się po mieście agentów do 65 tysięcy, co również przy dużych miastach objawi się tym, że od pewnego momentu dodawanie nowych dzielnic nie będzie już powodowało wzrostu natężenia ruchu na drogach. Po tym krótkim wstępie technicznym przejdźmy zatem do budowania miasta marzeń :).
Rozplanowanie miasta
W radzeniu sobie z ruchem ulicznym niebagatelną rolę odgrywa sam układ przestrzenny miasta. Niektóre uwarunkowania, jak choćby ukształtowanie terenu, są nam dane z góry - nie mamy tu wiele do gadania i musimy jakoś sobie poradzić z tym, co jest. Mamy jednak pełną kontrolę nad tym, co się gdzie w mieście buduje. Spośród czterech dostępnych rodzajów stref największymi generatorami ruchu są sklepy oraz fabryki. Tereny przemysłowe mają tendencję do wysyłania w świat ogromnej liczby ciężarówek. Ich miejscami docelowymi są inne miasta, inne fabryki lub sklepy. Do stref handlowych tłumnie ciągną też spragnieni zakupów mieszkańcy. To właśnie od prawidłowego rozmieszczenia tych dwóch rodzajów stref zależy czy odniesiesz sukces. Strefy mieszkaniowe oraz biurowe można spokojnie pominąć.
Podstawowy błąd, jaki można popełnić w planowaniu przestrzennym miasta, to wyznaczenie trzech ogromnych obszarów: na domy, na sklepy oraz na fabryki. Przy takim podejściu praktycznie nie występują podróże lokalne. Cokolwiek by się chciało załatwić, trzeba udać się do innej dzielnicy. Cały ruch w mieście oprze się na siatce połączeń międzydzielnicowych i nie istnieje taki układ drogowy, który byłby w stanie wytrzymać to obciążenie. Wprowadzenie pojazdów na autostradę nie jest jeszcze aż tak trudne. Prawdziwe korki pojawiają się na zjazdach, gdzie fala pojazdów wpada na drogi o mniejszej przepustowości, z ruchem kolizyjnym. Na poniższym obrazku pokazane jest moje najnowsze, zimowe miasto Westfield, które ilustruje problem. Miasto składa się z dwóch części położonych po przeciwnych stronach jeziora. Połączone są one autostradą oraz dwoma drogami lokalnymi:
Problemy z ruchem drogowym wystąpiły już na samym początku budowy odizolowanej dzielnicy, gdy mieszkało w niej zaledwie 3 tysiące mieszkańców (w drugiej części - ok. 60 tysięcy). Było tam dużo sklepów i na zjeździe z autostrady błyskawicznie utworzył się ogromny sznur samochodów ciągnący się aż do rynku. W późniejszej fazie gry dobudowałem kilka dodatkowych dróg, kolej jednoszynową, połączenia autobusowe, pociąg, a od strony wjazdu sznur samochodów był rozprowadzany przez kilka bezkolizyjnych węzłów. Pomimo tego wciąż potrafią utworzyć się tam korki.
Miasto radzi sobie o wiele lepiej, kiedy mamy do czynienia ze zwartą zabudową, a poszczególne strefy są przemieszane. Zamiast jednej, dużej dzielnicy ze sklepami mam kilka, kilkanaście mniejszych. Podobnie rzecz ma się z osiedlami i fabrykami. Taki układ zwiększa prawdopodobieństwo, że mieszkańcy będą załatwiać swoje sprawy w pobliżu (mniej dalekich podróży » mniejsze obciążenie głównych dróg). Ponadto z każdej strefy samochody będą wyjeżdżać w kilku różnych kierunkach - zamiast jednej ogromnie obciążonej drogi, będziemy mieć dużo mniejszych, które łatwiej jest zoptymalizować. Takie miasta również ładniej wyglądają i są bardziej zbliżone do rozwiązań stosowanych w rzeczywistości.
Ronda i skrzyżowania
Niestety nigdy nie uda nam się uniknąć powstawania drobnych barier komunikacyjnych, które będą prowadziły do kumulacji ruchu na jednym, określonym węźle. Nie możemy też z góry przewidzieć, jaki dokładnie wpływ dodanie nowej dzielnicy będzie miało na istniejący układ drogowy. Dlatego co pewien czas przyglądam się skrzyżowaniom w zbudowanych wcześniej dzielnicach i dokonuję optymalizacji tam, gdzie pojawiają się problemy. Aby wykonać ją sprawnie, tak naprawdę wystarczy opanować sztukę budowania kilku najważniejszych typów węzłów i dokonywać rozbudowy wtedy, gdy to jest potrzebne.
Pierwszym przykładem będzie rozładowanie korka na jednym z rond w Zakrzynie:
Gdy miasto dopiero powstawało, wokół ronda było niewielkie osiedle domków jednorodzinnych oraz farmy. Biegnąca droga w lewo prowadziła również do osiedla domków jednorodzinnych po drugiej stronie rzeki. Ponieważ była to jednak ostatnia przeprawa przez rzekę przed jej ujściem do morza, wraz z pojawianiem się nowych osiedli coraz więcej samochodów wykorzystywało ją do tranzytu. Nagle farmy, które kiedyś leżały na obrzeżach, znalazły się idealnie w centrum miasta. Najstarsze dzielnice przeszły rewitalizację - pojawiła się nowa starówka (hehehe :)), a na miejscu gospodarstw rolnych i dymiących fabryk wyrosły nowoczesne dzielnice biurowe. Droga biegnąca w prawo z ronda, kiedyś będąca wyjazdem z pól, teraz nagle stała się szeroką aleją prowadzącą do kolejnego osiedla. To było przysłowiowym gwoździem do trumny. Sznury aut i tramwajów miały po kilkaset metrów długości.
Biorąc pod uwagę kluczowe znaczenie tego węzła dla układu komunikacyjnego w mieście, zdecydowałem się na zbudowanie bezkolizyjnego węzła typu "koniczynka":
Ponieważ węzeł znajdował się na drogach miejskich, nie chciałem używać do budowy odcinków autostradowych (nie można przy nich wyznaczać stref). Oto, jak zrobiłem "koniczynkę" z dróg miejskich:
- Pociągnąłem dwupasmową drogę z tramwajem górą,
- Pociągnąłem trójpasmową drogę tunelem pod pierwszą drogą,
- we wszystkich czterech rogach wybudowałem zjazdy, używając zwykłej jednopasmowej drogi dwukierunkowej,
- używając edytora pasów ruchu z modu Traffic Manager, zlikwidowałem wszystkie lewoskręty,
- następnie na zjazdach zlikwidowałem też przejazdy "na wprost", zostawiając same prawoskręty,
- używając edytora pierwszeństwa przejazdu z tego samego modu, zlikwidowałem sygnalizacje świetlne i ze zjazdów zrobiłem drogi podporządkowane.
Po otwarciu większość korków zniknęła. Pozostałych pozbyłem się, optymalizując skrzyżowania w okolicach węzła tak, aby zlikwidować wąskie gardła. Pokażę je w kolejnym rozdziale.
Oto inny przykład przebudowy układu drogowego, tym razem polegający na likwidacji przeszkody terenowej. Gdy zaczynałem budować Zakrzyn, przez mapę ciągnęła się gigantyczna autostrada, która w pobliżu miejsca startowego krzyżowała się z kolejną autostradą biegnącą z głębi lądu. Po autorze planszy odziedziczyłem epicki węzeł drogowy, który znakomicie rozprowadzał ruch we wszystkich kierunkach.... jednak stanowił też dużą przeszkodę w komunikacji międzydzielnicowej. Istniało tylko parę zbiorczych dróg leżących po obu stronach autostrady, na których notorycznie tworzyły się korki.
Gdy moje miasto stało się już dostatecznie bogate, postanowiłem rozwiązać problem poprzez ukrycie fragmentu autostrady pod ziemią. Zacząłem od zburzenia starej drogi i fragmentu widocznego u góry węzła, a następnie odbudowy jej w postaci tunelu pod ziemią.
Zyskałem w ten sposób na powierzchni sporo wolnego miejsca w środku miasta, które mogłem zagospodarować. Niestety układ zabudowy po obu stronach był dostosowany do istniejącej w tym miejscu dotąd przeszkody; innymi słowy, nie bardzo było skąd wyprowadzić nowych dróg łączących. Konieczne było wyburzenie kilku budynków tak, aby poszerzyć istniejące wąskie uliczki i zbudować nowe, szerokie aleje. Dopiero po ich wytyczeniu zorganizowałem wokół układ dróg lokalnych i wyznaczyłem strefy zabudowy. Część odzyskanych terenów przeznaczyłem na założenie parku dla mieszkańców.
Sygnalizacja świetlna
W kilku miejscach wspomniałem już o modzie Traffic Manager. Jest to wg mnie jeden z absolutnie niezbędnych modów, przynajmniej jeśli faktycznie zależy nam na optymalizacji ruchu ulicznego. Wiemy już, że pozwala on na robienie kilku ciekawych sztuczek ze skrzyżowaniami. Kolejną jego funkcjonalnością jest edytor sygnalizacji świetlnych. Światła drogowe są niezbyt lubiane przez kierowców. Ich złe ustawienie przyczyna się do powstawania korków, jednak gra C:S idealnie pokazuje, że sygnalizacja świetlna jest czymś niezbędnym w dużym mieście.
Zadaniem świateł jest zapewnienie bardziej uczciwego dostępu do przepustowości dla wszystkich uczestników ruchu tam, gdzie nie ma możliwości stworzenia bardziej rozbudowanego układu drogowego. Widać to w C:S na przykładzie rond. Standardowo buduję je na początku bez żadnej sygnalizacji świetlnej, co jest bardzo dobrym rozwiązaniem przy mniejszym natężeniu ruchu. Jednak wyobraźmy sobie, że na dwóch sąsiadujących ze sobą wlotach 1 i 2 ruch rośnie. Ponieważ pierwszeństwo mają pojazdy, które już są na rondzie, w praktyce okazuje się, że sznur samochodów z kierunku 1 niemal całkowicie uniemożliwia wjazd samochodom z kierunku 2. Wcześniej przedstawiłem przykład rozładowania tego ruchu poprzez budowę węzła bezkolizyjnego. Możemy też jednak dodać sygnalizację świetlną. Jeśli prawidłowo ją wyregulujemy, możemy rozładować korek.
Standardowo gra dodaje na większych skrzyżowaniach sygnalizację z fazami o równej długości. Przy pomocy narzędzia Edytor czasowej sygnalizacji świetlnej możemy zaprojektować własny cykl świateł dla pojedynczego skrzyżowania lub całej ich grupy:
Działanie edytora jest proste, kiedy już połapiemy się w zestawie przycisków:
- wybierz skrzyżowanie lub grupę skrzyżowań,
- kliknij na "Ustaw czasową sygnalizację świetlną",
- kliknij "Stop", aby zatrzymać bieżący cykl,
- wtedy możesz przejść do edytora.
Gdy jesteśmy już w edytorze, możemy dodawać poszczególne fazy. Klikamy na ikonki świateł wokół skrzyżowania, aby wybrać ustawienie poszczególnych świateł w danej fazie. Możliwe jest też dodawanie oddzielnych sygnalizatorów dla poszczególnych kierunków ruchu - innymi słowy, możemy np. dać zielone na lewoskręcie, lecz zablokować jazdę na wprost. Ostatnim krokiem jest wybranie długości trwania fazy. Wpisujemy dwie liczby: min oraz max. Dzięki temu gra będzie mogła automatycznie dostosować długość fazy w podanym zakresie w zależności od natężenia ruchu.
Na powyższym obrazku przedstawiłem skrzyżowanie, które znajdowało się tuż obok zaprezentowanego wcześniej węzła bezkolizyjnego. Okazało się, że standardowy cykl świateł zupełnie się tu nie sprawdzał, a korek na tej drodze przeniósł się z dawnego ronda na to jedno skrzyżowanie. Miałem do czynienia z klasycznym wąskim gardłem. W tym miejscu oczywiście nie chciałem budować bezkolizyjnego węzła - drogi boczne były zwykłymi wjazdami na osiedle. Dlatego po prostu wziąłem się za obserwację, dokąd ci wszyscy ludzie jadą. Okazało się, że wiele samochodów postanowiło "skrócić" sobie drogę - zamiast jechać na mój piękny, bezkolizyjny węzeł, próbowali skręcać w lewo w osiedlową uliczkę. Ostateczny rezultat był następujący:
- zamiana problematycznego wlotu na drogę jednokierunkową,
- zakazanie ruchu ciężarówek po osiedlu,
- znaczne wydłużenie fazy świateł do jazdy na wprost, główną drogą,
- dodanie dedykowanych faz na lewoskręt w osiedle,
- dodanie warunkowego prawoskrętu.
Te działania znacznie podniosły płynność ruchu i po pewnym czasie korki zaczęły znikać.
Zakończenie
Mam nadzieję, że powyższe rady okażą się pomocne przy budowaniu Waszych miast. Moja ostatnia rada dotycząca ruchu drogowego to wprowadzenie komunikacji miejskiej. Jednak o niej napiszę za jakiś czas zupełnie oddzielny wpis.
zobacz inne wpisy w temacie
Komentarze (0)