Kapitola 5: Lekce 2 - Generování budov


V této lekci využijeme model vytvořený v předchozí kapitole.


Generování budov – modelování odvozením

Pokud bychom chtěli generovat větší množství budov, které by byli všechny architektonicky podobné a odvozené z jednoho zdroje, lze k tomu využít několik funkcí používaných v CityEngine. Na podobné příklady je dobré nemít architekturu příliš detailní, resp. RuleFile příliš komplexní, protože generování celých měst je náročné na výkon počítače a pro obecný výklad není potřeba vytvářet modely v co nejrealističtější podobě.


Praktické příklady

Pokud budeme vycházet z námi již modelované budovy, můžeme si vytvořit odvozenou architekturu náhodným generováním atributů. Toho docílíme pomocí již zmiňované funkce „rand()“. Ta nám zaručí vybrání náhodné hodnoty v zadaném rozmezí. Pro výšku pater jsem zvolil oproti původní hodnotě 4, tři hodnoty vyjádřeny procentuálním podílem na výsledném generovaném modelu. Z 80 procent bude výška nabývat hodnot mezi 4 a 5 a ze zbývajících 20 procent budou patra velikosti 3.5, jelikož vyšší patra dodávají modelu vizuálně lepší dojem. Ostatní rozměry jsem odvodil z původního RuleFile tak, aby se náhodně vybraná hodnota pohybovala stále kolem hodnot v přecházejícím modelu.


attr vyska = rand(18, 22)
attr vyska2 = rand(26, 35)
attr vyska_prizemi = rand(3, 5.5)
attr vyska_patra = 80%: rand(4, 5) else: 3.5
attr sirka_dlazdice = rand(4, 6)
attr sirka_vylohy = rand(3, 4)
attr sirka_okna = rand(2, 3)


Mezi atributy přibila položka „vyska2“. Ta by nám může posloužit pro modely budov, které jsou obklopeny ostatními budovami a nesousedí s žádnou ulicí (Na obrázku 5.1 by byly tyto budovy generované na modře zabarvených parcelách).

Vnitřní parcely

V našem případě vnitřní budovy generovat nebudeme, protože architektura námi vytvářené budovy není esteticky vhodná do ploch obklopených dalšími budovami – pomineme-li fakt, že z praktického hlediska by v reálu ani takto umístěné budovy nemohli správně fungovat. Ukážeme si ale, jak by se problém s takto umístěnými modely řešil – například ve speciálních případech, kdy je to žádané.

Pro „vnitřní“ modely bude definováno jiné počáteční pravidlo, než bylo doposud Lot, abychom je dostatečně odlišily od modelů sousedících s ulicemi. Toto pravidlo má výchozí název LotInner. My mu tedy přiřadíme operaci „extrude()“ s parametrem „vyska2“. Vnitřní budovy budou tedy vyšší, než vnější a tím docílíme vizuálně zajímavého výsledku.


Lot -->
extrude(vyska) Budova1

LotInner -->
extrude(vyska2) Budova1


Jak již bylo zmíněno, v našem případě si vygenerujeme modely bez pravidla LotInner. Generování je poměrně náročná záležitost a pokud bychom chtěli vytvořit větší uskupení budov, než v našem případě, byl by to již se zapnutým stínováním modelů problém. I tomto případě jsou s vyššími detaily přesouvání, otáčení a další operace v okně Viewport znatelně zpomaleny.

Vygenerovaná skupina budov
Vygenerovaná skupina budov bez drátového zobrazení

Následuje ukázka vrml modelu budovy, při použití sepsaných pravidel CGA gramatiky:



Odvozením jednoho architektonického stylu, resp. jednoho vytvořeného RuleFile je možné dosáhnout modelu velkých městských částí, jejichž budovy se nebudou navzájem esteticky „rušit“, město tak bude vypadat jednotně, komplexně a přirozeně. Takto vytvořené modely měst se tudíž dají použít jako kulisy pro multimediální projekty různého charakteru, kde je vizuální složka založena z části nebo celkově na 3D grafice, ale i pro digitální zobrazení reálných městských lokalit či k vizualizaci připravovaných architektonických projektů.