CityEngine – GIS jeszcze bardziej przestrzenny

CityEngine – GIS jeszcze bardziej przestrzenny

Program CityEngine jest jednym z najnowszych produktów oferowanych przez firmę Esri. Dostarcza on rozwiązań pozwalających na tworzenie oraz edycję danych przestrzennych i prezentację ich w przestrzeni 3D. Efekty pracy tego programu mogą być naprawdę spektakularne, dlatego warto poznać jego możliwości.

Podstawy

Zasady działania CityEngine są zbliżone do innych aplikacji służących tworzeniu danych 3D. Interfejs programu w jego standardowej konfiguracji obejmuje cztery podstawowe elementy:

  • menu w pasku górnym zawierające najistotniejsze funkcje oraz narzędzia,
  • okno służące do nawigacji i ułatwiające pracę nad edytowanym obiektem, pozwalające na szybkie przeglądanie danych znajdujących się w katalogu projektu i umożliwiające również podgląd edytowanego obiektu (zawiera ono dodatkowe okno edycji reguł CGA),
  • zakładkę Inspector służącą do podglądu atrybutów wskazanego obiektu,
  • główne okno z zestawem narzędzi służących do tworzenia i edycji obiektów. Liczba okien widoku oraz spersonalizowanie każdego z nich są możliwe dzięki użyciu zakładki Window  Layout w głównym menu.
Rys. 1. Wygląd głównego okna programu.

Rys. 1. Wygląd głównego okna programu.

Dodatkowymi oknami przydatnymi przy tworzeniu obiektów są Show Model Hierarchy, Show Problems oraz Show Facade Wizard, domyślnie wyłączone (należy je uruchomić przez menu Window). Pierwsze dwa służą do ułatwienia edycji i wskazywania błędów na poziomie projektowania, a ich przydatność zauważalna jest zwłaszcza przy bardziej skomplikowanych obiektach oraz przy tworzeniu reguł CGA. Show Facade Wizard ułatwia przygotowanie ściany budynku do naniesienia tekstur.

Import danych

Program CityEngine pozwala na łatwe i szybkie zaimportowanie plików .shp i danych z geobazy. Przed rozpoczęciem importu danych zalecane jest dołączenie (skopiowanie) danych do folderu projektu CityEngine. Przy tworzeniu projektu zostaje założony specjalny podkatalog „Data”, służący do przechowywania takiego rodzaju danych zewnętrznych. Posiadanie takiej kopii danych wewnątrz projektu zapewnia bezpieczeństwo oraz porządek edycyjny. Po przygotowaniu danych wybieramy opcję File z menu głównego, a następnie Import. W oknie wyboru wskazujemy, jakiego rodzaju dane chcemy dołączyć do projektu. Rozwijamy folder „CityEngine Layers” i wybieramy opcję File GDB Import lub ShapeFile Import. Następnym krokiem jest wskazanie pliku .shp lub .gdb. Program automatycznie odczyta, czy układ współrzędnych został już określony oraz (jeśli importujemy geobazę) jakiego typu warstwy znajdują się wewnątrz. Jeśli dane nie posiadają zdefiniowanego układu współrzędnych, program poprosi o jego wybór z dostępnej listy.

Rys. 2. Przykład importu danych z geobazy plikowej.

Rys. 2. Przykład importu danych z geobazy plikowej.

Edycja – użycie narzędzi typu shape creator

Tworzenie obiektów lub ich edycja mogą być przeprowadzone w oparciu o narzędzia shape creator. Działają one z wykorzystaniem metody edycji dynamicznej, pozwalającej decydować o wyglądzie danej bryły, np. poprzez wyrysowanie okien czy drzwi.
Jak wykonać szybką edycję warstwy poligonowej budynku jednorodzinnego?
Po zaimportowaniu danych poligonowych z geobazy wybieramy narzędzie Polygon Shape Creation (górne menu, jedna z ikon w pasku narzędzi).
Po ustawieniu kursora na edytowanym obiekcie zostanie on podświetlony. Oznacza to, że edycja będzie dotyczyć tylko zaznaczonej powierzchni (może to być cała bryła, konkretna ściana lub krawędź).

Aby wypiętrzyć dany obiekt, należy wybrać pomarańczową kulę, która pojawiła się wraz z zaznaczeniem. Klikamy ją lewym przyciskiem myszki. Następnie, nie puszczając przycisku, przesuwamy myszkę do przodu. W wyniku tej operacji poligon nabiera cech bryły.

Kolejną operacją, którą wykonamy, używając narzędzia Polygon Shape Creation, jest utworzenie spadzistego dachu. W tym celu wybieramy krawędź pomiędzy ścianą boczną a górną.
Na podświetlonej kolorem pomarańczowym krawędzi wybieramy miejsce przecięcia i klikamy lewym przyciskiem myszy, a następnie prowadzimy linię do przeciwnej krawędzi. Program wyświetli pomocniczą przerywaną linię oraz informację o zachowaniu kąta prostego, jak i o możliwych przecięciach prostopadłych – poprzez wyświetlenie przerywanej prostej odchodzącej pod kątem 90°. Kończymy linię na drugiej krawędzi, zgodnie z linią przerywaną.

Powierzchnia dachu została przedzielona na dwie równe części. Teraz nie pozostaje nam nic innego, jak wyciągnąć nową linię tak, aby powstał spadzisty dach. W tym celu najeżdżamy na nowo utworzoną linię i klikamy pomarańczową kulę. Podobnie jak w przypadku wcześniejszej edycji tak i teraz nie puszczamy przycisku i przesuwamy myszkę zgodnie z zieloną strzałką.
Bryła domu jest już gotowa, pozostaje utworzyć miejsce na okna oraz drzwi. W tym celu uruchamiamy narzędzie Rectangular Shape Creation. Działanie tego narzędzia jest podobne do wcześniej używanego Polygon Shape Creation z tą różnicą, że zamiast na liniach pracujemy na prostokątach.

Rys. 3. Przykład wykorzystania linii pomocniczych narzędzia typu shape creation.

Rys. 3. Przykład wykorzystania linii pomocniczych narzędzia typu shape creation.

Tworzenie nowej reguły CGA – wypiętrzamy poligon

Powyżej zaprezentowano edycję typową dla programów graficznych. CityEngine oferuje również drugą możliwość – edycję przy użyciu reguł CGA. Pozwalają one na kontrolowanie tworzenia dużej liczby obiektów, zarządzania ich geometrią, proporcjami i teksturami.

Utworzymy teraz regułę CGA, która pozwoli nam na zbudowanie podobnego domu jednorodzinnego z tą różnicą, że wszystko będzie „dynamiczne” (w każdym momencie będziemy mieli możliwość naniesienia zmian), jak i „mobilne” (reguła przez nas napisana będzie mogła być wykorzystana do tworzenia wielu obiektów i zastosowania w różnych projektach).
Najpierw należy utworzyć nowy plik .CGA. W tym celu używamy okna Navigator zawierającego nasz projekt. Podobnie jak w przypadku danych zewnętrznych (folder „Data”), także dla reguł utworzony został specjalny podkatalog „Rules”. Klikamy prawym przyciskiem myszki, wybieramy opcję New i wskazujemy CGA Rule file. Nowy plik zostanie dodany do podkatalogu i będzie można przystąpić do tworzenia pierwszej reguły CGA.

Okno edycyjne CGA znajduje się pod oknem Navigator (u dołu z lewej strony). Istnieje możliwość otworzenia kilku plików jednocześnie – są one umieszczane w poszczególnych zakładkach. Reguły można tworzyć na dwa sposoby. Pierwszy z nich wykorzystuje tryb tekstowy – zbliżony do pisania skryptów czy np. używania HTML przy tworzeniu stron www. Drugi sposób przypomina działanie programów „węzłowych”, takich jak np. ModelBuilder wbudowany w program ArcMap. Idea węzłów polega na definiowaniu poszczególnych etapów tworzenia projektu oraz ich odpowiedniego łączenia. Zalecane jest stosowanie obu, aby jak najlepiej wykorzystywać możliwości oferowane przez CGA.

Teraz można przystąpić do kształtowania budynku. Pierwszą istotną rzeczą, którą musimy zdefiniować, jest wysokość. Ponieważ reguła będzie wykorzystywana również w późniejszych projektach, nie wprowadzamy jednej wartości, ale określamy przedział. Definiujemy dwie zmienne i wprowadzamy ich wartości (jednostki dostosowują się do zdefiniowanego układu całego projektu).
attr Min_wysokosc = 4
attr Maks_wysokosc = 15
Następnie musimy nazwać naszą bryłę. W tym przypadku będzie się ona odnosić do całego budynku ze wszystkimi jego elementami.
Budynek –>
Gdy mamy już zdefiniowane wartości oraz określony przedział, pozostaje nam tylko wpisanie odpowiedniego polecenia – extrude, realizującego „wypiętrzanie” obiektów. Dodatkowo na końcu zostanie dodana wartość, która będzie wynikiem całej operacji i posłuży w kolejnych krokach. Nazwiemy ją „Podział”. Całość zapisu wygląda tak:

Version „2012.1”
Attr Min_wysokosc = 4
Attr Maks_wysokosc = 15
@StartRule
Budynek –> extrude(rand(Min_wysokosc, Maks_wysokosc)) Podzial

Polecenie rand powoduje, że przy większej liczbie obiektów wysokość zostanie dobrana losowo. Oczywiście, w każdej chwili można wprowadzić konkretną wartość, używając okna Inspector.
Możemy też sprawdzić, jak nasza reguła prezentuje się w praktyce. Wystarczy przeciągnąć zapisaną regułę z okna Nawigatora (folder „Rules”) do okna głównego i „opuścić” ją na wybrany poligon. Reguła automatycznie zostanie dopisana i wygenerowana.

Tworzenie nowej reguły CGA – dodajemy dach

Kolejną czynnością, którą wykonamy, będzie wymodelowanie odpowiedniego kształtu dachu.

Najpierw musimy odpowiednio podzielić naszą bryłę. Program nie odczyta bez naszej pomocy, w którym miejscu znajdują się dach, front czy tył budynku. Przy pomocy reguł CGA możemy to wykonać szybko, uwzględniając różne czynniki. Możemy posiłkować się zdefiniowanym przez nas układem współrzędnych, istniejącym już obiektem (przód budynku to ściana najbliżej innej, już istniejącej bryły), kierunkami świata lub wykorzystywać np. horyzont.

Użyjemy polecenia „podziel obiekt – comp” i wykorzystamy lokalny układ współrzędnych (f).
Zapis będzie wyglądać następująco:

comp(f) {front: przod | back:tyl | side:boki |top:dach}

Aby całość była czytelna i byśmy mieli pewność, że program poprawnie zinterpretował nasze polecenia, pokolorujemy poszczególne ściany, używając prostego polecenia color oraz określając podstawowe kolory RGB (zakres od 0 do 1).

przod –>color(1,0,0)
boki–>color(1,1,0)
tyl–>color(1,1,1)
dach–>color(0.3,0.2,0)

W ten sposób otrzymaliśmy odpowiednio przygotowaną bryłę. Mamy zasymbolizowane ściany i program prawidłowo je odczytał, zgodnie z naszymi wytycznymi. Teraz możemy przystąpić do tworzenia dachu.

Najpierw wskazujemy do edycji płaszczyznę, która będzie służyć nam za dach (top:dach), a następnie użyjemy bardzo prostego polecenia roofGable. Służy ono do tworzenia odpowiednio nachylonego i ukształtowanego dachu. Definiujemy w nim kąt nachylenia dachu, opcjonalnie możemy również wskazać wysunięcie dachu poza obrys budynku.

Cały zapis wygląda tak:
dach–>color(0.3,0.2,0)
roofGable(30, 1, 3, false)

Utworzony został dach o kącie nachylenia 30°, wysunięciu o jedną jednostkę po bokach i trzy na przodzie. Opcja false powoduje, że dach zostanie wypiętrzony, bazując na centralnym punkcie płaszczyzny.

Rys. 4. Wykorzystanie gotowej reguły CGA przy generowaniu dużej liczby obiektów.

Rys. 4. Wykorzystanie gotowej reguły CGA przy generowaniu dużej liczby obiektów.

Dalsza część projektu dotyczy osadzenia elementów takich jak drzwi czy okna. W tym celu należy podzielić front budynku na kilka części, używając polecenia split.
Narzędzie to pozwala dzielić wybraną powierzchnię (w naszym przypadku front budynku) poziomo oraz pionowo. Zakładamy, że potrzebujemy wyznaczyć miejsce na przyszłe drzwi. W tym celu podzielimy przednią ścianę budynku na trzy części, dwie większe po prawej i lewej stronie oraz jedną mniejszą pośrodku.

Przod –>color(0.2,0.2,0)
split(x) {‘0.4:Z |’0.2:Y |’0.4:X}
Y –>color(0.2,0.3,0)

Polecenie to oznacza: podziel warstwę Przod poziomo (zgodnie ze współrzędną x). Dokonaj podziału na trzy części – X, Y, Z. Prawa i lewa część mają zajmować po 0.4 całości (40 proc.) a środkowa 0.2 (20 proc.). W wyniku realizacji tego polecenia otrzymujemy trzy części tworzące ścianę Przod.

Podobnie dzielimy ścianę Przod pionowo (zgodnie ze współrzędną y). W wyniku obu podziałów otrzymujemy miejsce na wstawienie drzwi. Najprostszym sposobem dodania ich do projektu będzie odpowiednie nałożenie tekstur. W tym celu zostanie użyty drugi widok, dostępny przy tworzeniu CGA. W oknie, w którym znajduje się tekstowy zapis naszej reguły, należy wybrać ikonę Visual. Przybliżmy się do naszego projektu, używając ikony lupy. Aby sprawnie odszukać projekt, można wykorzystać opcje Frame selection lub wcisnąć klawisz F – nasza reguła zostanie dopasowana rozmiarowo i wyświetlona w oknie edycji. Odszukajmy teraz ostatni węzeł Y i rozwińmy go, klikając strzałkę. Wewnątrz znajduje się zdefiniowany kolor [color] danej płaszczyzny. Możemy zmienić wartości i po odświeżeniu (przycisk w głównym menu programu – Update Seed and Generate Models lub skrót klawiszowy ctr+shift+G) zmieni się kolor w edytowanym przez nas obiekcie.
Kliknijmy prawym przyciskiem myszki wartość Y i wybierzmy z menu opcję Add Operation, a następnie Asset i texture (TexturePath). Do węzła Y obok opcji color została dodana wartość texture. Wystarczy teraz ją kliknąć i wskazać w katalogu obraz, który posłuży za teksturę drzwi. Po odświeżeniu kolor zostanie zastąpiony teksturą. W identyczny sposób utworzone zostaną okna.

Podsumowanie projektu

Budynek został wstępnie wymodelowany. Wszystkie ściany są zdefiniowane, dach utworzony. W dalszych krokach można dodać atrybut losowy do kształtu i koloru dachu, co zróżnicuje ogólny projekt. Również pozostałe ściany czekają na bardziej precyzyjną edycję. Dzięki temu, że wszystkie atrybuty zostały zdefiniowane przy użyciu reguły CGA, możemy wykorzystać ją dla innych obiektów – zaznaczając interesujące nas obiekty, a następnie przeciągając regułę z okna Navigator bezpośrednio na zaznaczone poligony.

Cała reguła CGA ma następującą postać:

version „2012.1”
attr Min_wysokosc = 4
attr Maks_wysokosc = 15

Budynek –> extrude(rand(Min_wysokosc, Maks_wysokosc))Podzial
comp(f) {front: przod | back: tyl | side: boki | top: dach}

dach–>color(0.3,0.2,0)
roofGable(30, 1, 3, false)
przod–>color(0.2,0.2,0)
split(x) {‚0.4:Z |’0.2:Y |’0.4:x}
Y–>color(0.9,07,0.6)
texture(“image/drzwi.jpg”)

Poznaj Esri CityEngine

Powyżej przedstawiona została tylko drobna część z bardzo szerokich możliwości programu Esri CityEngine. Obok budowania modeli lub definiowania ich przy użyciu reguł CGA możliwe jest wyeksportowanie projektu do pliku zewnętrznego, wyświetlenie go w przeglądarce lub dalsze prace nad nim, np. wykorzystanie go przy produkcji filmów, gier, prezentacji. Istnieje możliwość przetestowania 30-dniowej wersji programu Esri CityEngine (strona www.esri.com/software/cityengine, należy posiadać konto Global Account). Znaleźć tam można również przykłady projektów i przewodniki po głównych zagadnieniach programu.

Czy zainteresował Cię ten materiał?