Mendelova univerzita v Brně Provozně ekonomická fakulta
Tvorba interaktivních průchodů v programu Blender Bakalářská práce
Vedoucí práce:
Vypracovala:
Ing. Jaromír Landa
Michaela Portlová
Brno 2013
Děkuji vedoucímu mé práce Ing. Jaromíru Landovi za cenné připomínky při vedení mé práce. Také bych ráda poděkovala Lukáši Portlovi, za rady a psychickou podporu a Janu Sedlačíkovi za uţitečné doporučení. Také chci poděkovat Ing. Davidu Junkovi za poskytnuté informace a podklady o objektu.
Prohlašuji, ţe jsem tuto práci vypracovala samostatně s pomocí informačních zdrojů uvedených v seznamu literatury. V Brně dne 22. 5. 2013
__________________
Abstract Portlová, M. Creating interactive walkthrough in Blender. Bachelor thesis. Brno, 2013. This thesis deals with interactive walkthrough of the art gallery located in a historical town hall in Polička. The town hall was modeled using Blender. For complete functionality was used scripting language Python and user interface for running and managing was created in the programming language Java. Keywords Blender, Python, Game Engine, open source, Java.
Abstrakt Portlová, M. Tvorba interaktivních průchodů v programu Blender. Bakalářská práce. Brno, 2013. Tato práce se zabývá interaktivní průchodem galerie, která se nachází v historické poličské radnici, které byla vymodelována pomocí programu Blender. K její plné funkčnosti byl vyuţit skriptovací jazyk Python a uţivatelské rozhraní pro spuštění a správování bylo vytvořeno v programovacím jazyku Java. Klíčová slova Blender, Python, Game Engine, open source, Java.
Obsah
6
Obsah 1
2
Úvod a cíl práce 1.1
Úvod .......................................................................................................... 9
1.2
Cíl práce .................................................................................................... 9
Přehled literatury a pramenů 2.1
11
Základní pojmy ........................................................................................ 11
2.1.1
Křivky, plochy a tělesa ..................................................................... 11
2.1.2
Světlo ................................................................................................ 12
2.1.3
Textury ............................................................................................. 13
2.1.4
Interaktivita a interaktivní průchody .............................................. 14
2.1.5
Reprezentace scény a kolize ............................................................. 14
2.2
Programy pro tvorbu 3D ..........................................................................18
2.2.1
Rhinoceros .......................................................................................18
2.2.2
3ds Max ............................................................................................18
2.2.3
Blender ............................................................................................. 19
2.2.4
Výběr ................................................................................................ 19
2.3
3
9
Blender .................................................................................................... 20
2.3.1
Historie............................................................................................ 20
2.3.2
Starší verze ....................................................................................... 21
2.3.3
Novější verze .................................................................................... 21
2.3.4
Prostředí Blenderu ........................................................................... 21
2.4
Game Engine ........................................................................................... 26
2.5
Python ..................................................................................................... 27
2.6
Java ......................................................................................................... 28
Výsledky
29
3.1
Základní informace o modelovaném objektu ......................................... 29
3.2
Samotné modelování .............................................................................. 29
3.2.1
Tvorba zdí........................................................................................ 29
3.2.2
Stropy ............................................................................................... 31
Obsah
3.2.3
Schody .............................................................................................. 31
3.2.4
Okna a dveře ................................................................................... 32
3.2.5
Textury ............................................................................................ 32
3.2.6
Světelné zdroje ................................................................................ 33
3.3
Interaktivní průchod............................................................................... 33
3.3.1
Nastavení kamery ........................................................................... 33
3.3.2
Logic Editor ..................................................................................... 34
3.3.3
Implementace pomocí Pythonu ...................................................... 34
3.4
4
7
Další Vyuţití Pythonu ..............................................................................37
3.4.1
Načtení informací do pole (modul Pole) ........................................ 38
3.4.2
Načítání obrazů (modul Obr) ......................................................... 39
3.4.3
Informace o obraze (modul Text) ................................................... 42
3.5
Export...................................................................................................... 43
3.6
Hlavní menu ........................................................................................... 44
3.6.1
Spustit průchod ............................................................................... 45
3.6.2
Rozhraní pro správce ...................................................................... 45
Diskuze
48
4.1
Vyuţitelnost a přínos .............................................................................. 48
4.2
Budoucí rozšíření .................................................................................... 49
4.3
Připomínky ............................................................................................. 49
5
Závěr
50
6
Literatura
51
A
Tab. 1: Klávesové zkratky
54
B
Radnice
55
C
Obrazy a popisky
56
Seznam obrázků
8
Seznam obrázků Obr. 1: Obálky – koule a osově zarovnaný kvádr ..............................15 Obr. 2: Tři nejčastěji používané způsoby dělení prostoru ............... 16 Obr. 3: Reakce na kolize .................................................................. 17 Obr. 4: Default - základní rozložení oken pro modelování .............. 22 Obr. 5: Game Logic - rozložení pracovních oken pro tvorbu her ..... 23 Obr. 6: Tvorba základů stěn budovy ............................................... 30 Obr. 7: Model schodů ..................................................................... 31 Obr. 8: Propojení sensorů a regulátorů v Logic Bricks ................... 37 Obr. 9: Hlavní menu při spuštění programu a okno pro přihlašení 44 Obr. 10: Informace pro uživatele, při spouštění průchodu ............. 45 Obr. 11: Základní rozhraní pro správce........................................... 46 Obr. 12: Okno určené pro výběr obrazu v dané místnosti ................ 46 Obr. 13: Editační okno a okno pro výběr nového obrazu ................. 47 Obr. 14: Místnost v radnici ............................................................. 55 Obr. 15: Druhé patro ...................................................................... 55 Obr. 16: Obraz na stěně .................................................................. 56 Obr. 17: Obraz s daným titulkem .................................................... 56
Úvod a cíl práce
9
1 Úvod a cíl práce 1.1
Úvod
Dnešní doba je dobou plnou technologií, které nás stále obklopují a neustále se vyvíjí. Především dochází k velkému vývoji informačních technologií, programů, systémů a v neposlední řadě počítačové grafiky. Grafika jako taková nás obklopuje, jiţ od nepaměti. Pokud je ale řeč o grafice počítačové, tak její vývoj začíná okolo padesátých let minulého století. Tento obor se velmi vyvíjel a v dnešní době je vyuţívána v nejrůznějších oblastech. Obvykle doprovází a pomáhá k lepšímu pochopení, ale zároveň například v případě reklamy slouţí jako silná zbraň. V dnešní době se velmi uplatňuje 3D počítačová grafika. Například v konstrukčních návrzích, ale také v počítačových hrách a v neposlední řáde ve filmovém průmyslu. Se zvyšováním výkonu počítače se zvyšuje jak vyuţitelnost, tak funkčnost různých počítačových grafik. Důleţité je, ţe s vývojem počítačů se zároveň vyvíjí také 3D grafiky. Na tvorbu 3D grafiky existuje nemalé mnoţství komerčních i nekomerčních programů. Některé jsou lepší kvality, některé slouţí spíše jen k základním tvorbám a pro lepší kvalitu práce je třeba vyuţít i jiných programů. Mezi komerční programy patří například Rhinoceros 3D, 3Ds Max nebo Maya. Mezi open source, neboli nekomerční a tedy programy zdarma, patří například Blender, který i kdyţ je volně staţitelný, je znám pro své velké moţnosti, ovšem i sloţitější počítačové rozhraní. Tento program se často vyuţívá pro svou moţnost interaktivity, která uţivateli umoţnuje s programem komunikovat. Také je moţné vyuţívat interaktivních průchodů, díky kterým je moţné procházet různá místa pomocí klávesnice a počítačové obrazovky. Samotná interaktivita je v dnešní době čím dál častější a oblíbenější. A proto i její vyuţití v průchodu je čím dál častější. Dnešní generace obyvatelstva z velké části „leniví“, a proto je pro ně velmi zajímavé a přitaţlivé jen tak si sedět u počítače a zároveň si prohlédnout celý svět, jako by tam člověk skutečně byl.
1.2 Cíl práce Cílem této práce je přiblíţit lidem galerii nacházející se v historické poličské radnici, aniţ by ji museli navštívit, ale zároveň je tímto nalákat k opravdové návštěvě. Za tímto účelem je vytvořen 3D model budovy v programu Blender a s pomocí programovacího jazyku Python jsou doplněny potřebné funkce a přívětivé úvodní prostředí a moţnost zjištění bliţších informací o obraze.
Úvod a cíl práce
10
Při tvorbě práce je brán zřetel nejen na uţivatele a správný a funkční interaktivní model, ale také na správce modelu, kterým bude poličské muzeum. Pro něj bude důleţitá, bez sloţité manipulace s kódem nebo jinými funkčními částmi, výměna obrazů v prostorách galerie. Pro tento účel bude vytvořeno rozhraní pro výměnu obrazů a přidávání případných popisků k obrazu v programovacím jazyku Java.
Přehled literatury a pramenů
11
2 Přehled literatury a pramenů Pro správnou orientaci v této práci a celé problematice je uvedeno a popsáno několik pojmů. Nejprve z hlediska počítačové grafiky a poté také pojmy jako interaktivitu, interaktivní průchod a detekce kolizí. Poté se zhodnocují výhody a nevýhody různých 3D modelovacích programů a podrobně se probere vybraná aplikace, její uţivatelské rozhraní, funkce a v neposlední řadě Game Engine a programovací a skriptovací jazyk Python, který bude v práci vyuţíván. Také je uvedeno několik málo informací o programovacím jazyku Java, ve kterém je vytvořeno rozhraní pro správce pro výměnu obrazů a pro uţivatele, který si v tomto rozhraní bude moci aplikaci spustit.
2.1 Základní pojmy Počítačová grafika se neustále vyvíjí, a zatímco dříve existovaly pouze 2D obrazy, které byly znázorňovány ve dvou rozměrech a to výšce a šířce. Později byl přidán třetí rozměr a to hloubka a začalo se pracovat na 3 osách, tedy ve třech dimenzích (3D). 3 rozměr je v počítačové grafice zastoupen pouze matematicky. Jeho reprezentace v digitálním prostoru se nazývá 3D model. Pokud by chtěl člověk nahlédnout do hloubky této problematiky, potýkal by se s kartézským souřadným systémem, který obsahuje tisíce aţ miliony datových bodů. Pro „lajka“ postačí naučit se pracovat s jiţ předem definovaným 3D softwarem, který problematiku řeší sám a modely jsou automaticky vizuálně reprezentovány v geometrických objektech sloţených z hran, vrcholů a polygonálních ploch. Obvykle se vyuţívá realtime rendrování pro okamţité zobrazování (Slick, 2013). 2.1.1
Křivky, plochy a tělesa
Křivky Křivky se vyuţívají ve dvou i tří rozměrném modelování. V počítači bývají reprezentovány jako soustava parametrů nějaké rovnice, která je posléze generativně zobrazována. V počítačové grafice se nejčastěji vyuţívá parametrický typ křivek, který dovoluje postupný výpočet křivky. Základním druhem parametrických křivek jsou křivky polynomiální, které se snadno vyčíslují. Jsou tvořeny pomocí definovaných řídících bodů. Existují 2 druhy křivek a to interpolační, kde křivka prochází přímo zadanými body a křivka aproximační, kde je sice tvořena definovanými body, ale křivka jimi přímo neprochází. Mezi aproximační křivky patří například Bezierovy křivky, Spline křivky a NURBS (Ţára, 2004, s. 177).
Přehled literatury a pramenů
12
Plochy Plochy se nejčastěji pouţívají v trojrozměrné grafice. Vyuţívají stejně jako křivky interpolace a aproximace. Interpolační plochy jsou ale sloţité na výpočet, a proto se raději vyuţívají aproximační. Plochy se také dají získávat šablonováním, kde se jedná například o potahování (Ţára, 2004, s. 199). Tělesa Tělesa vytvářená v trojrozměrném prostoru mají podobu hmotných předmětů, které v prostoru zaujímají určitý objem. Jedná se o celek sloţený mnoţinou bodů. Trojrozměrný objekt obsahuje body hraniční i vnitřní. Naopak body, křivky nebo plochy jsou tvořeny pouze hraničními body a vnitřní body neobsahují, proto nejsou povaţovány za trojrozměrné. Tělesa mohou být reprezentována trojúhelníky a sítí trojúhelníků. Také existuje hraniční reprezentace těles, která je nejběţnější a k popisu hranic tělesa se mohou pouţívat základní prostorové prvky, jako jsou body, úsečky a rovinné plochy. Také je moţné tělesa modelovat pomocí deformací (Ţára, 2004, s. 237). 2.1.2
Světlo
Světlo a světelné odrazy Pro práci se světlem je důleţité uvědomit si jeho interakci s povrchy tělesa. Světlo je základem pro zobrazování scén. V počítačové grafice se pouţívá převáţně geometrická optika, která modeluje světlo jako nezávislé paprsky, které putují prostorem. Nejdůleţitější veličinou globálního osvětlování je radiance. Pro charakteristiku odrazových schopností povrchu materiálu v určitém bodě se pouţívá Dvourozměrná odrazová distribuční funkce (BRDF), která dává barvu objektům pomocí vlastností povrchu daného tělesa, a spektrální charakteristikou světla, která na ně dopadá. Odrazy světla jsou rozdělovány na Difůzní, který rozptyluje odraz vstupní radiance rovnoměrně do všech směrů. Dále existuje odraz zrcadlový, který se nejvíce podobá dokonale vyleštěným kovům, sklu anebo vodě. Posledním je lesklý odraz, který je na propočet nejsloţitější z důvodu předpokladu, ţe se objekt skládá z mnoha překrývajících se mikroplošek (Ţára, 2004, s. 319-332). Světelné zdroje Světelné zdroje se mohou stejně jako jiná tělesa stát tělesem světlo odráţejícím nebo i pohlcujícím. Rozdíl je pouze v tom, ţe dokáţí s určitou intenzitou světlo také vytvářet. Nejjednodušším světelným zdrojem je bodové světlo. Dále existují rovnoběţný a plošný světelný zdroj, reflektor atd. (Ţára, 2004, s. 336).
Přehled literatury a pramenů
13
Stíny Jsou důleţité pro prostorové vnímání člověka. Stíny nám pomáhají pochopit, kde se na scéně nacházejí světelné zdroje a jiné objekty. Pouţívají se pro zvýšení věrohodnosti a realističnosti. Výpočet věrohodného stínu je náročný a proto pokud chceme vyuţívat stíny v reálném čase (pouţíváno ve hrách), dává se přednost podstatně rychlejším samostatným technikám pro generování stínů. Tyto metody obvykle převádějí problém nalezení stínu na problém geometrický, nejčastěji na algoritmus řešení viditelnosti (Ţára, 2004, s. 367). 2.1.3
Textury
Textura v 3D grafice znázorňuje materiálové vlastnosti skutečného objektu, jako je například struktura a barva. Textura je ve většině programů oddělována od materiálu, který se nachází pod texturou a určuje její jednoznačný popis. Jednotka textury se nazývá texel. Textura se pouţívá pro zvýšení vizuální kvality objektu. Na objektu určuje nejen barvu povrchu, ale také její budoucí odrazové schopnosti světla nebo průhlednost povrchu. Existují také hypertextury, které určují optické vlastnosti. Vyuţívají se při tvorbě textur, které mají přesné hranice, jako jsou vlasy, srst a tráva, nebo textur, které nemají přesné hranice jako oheň, kouř apod. (Ţára, 2004, s. 379). Nanášení textur Nanášení textur záleţí na několika aspektech. Prvním je, o kolika rozměrnou texturu se jedná. Jednorozměrné se pouţívají na základní povrchy a při opakování podélných vzorků. Dvourozměrné pro mapování na povrchu tělesa a trojrozměrné textury se vyuţívají, pokud chceme, aby objekt vypadal jako vyrobený z jednoho kusu. Dále se rozdělují podle reprezentace. Buď se jedná o textury procedurální, kde je celá textura uloţená jako jedna procedura, při jejímţ zavolání získáme hodnotu textury v daném bodě nebo se jedná o texturu tabulkovou, která má velké omezení v podobě velkého prostoru, který zabírá. Mapování textur je nanášení textury na objekt, který probíhá podle předem definovaného postupu. Pomocí textur je moţné vytvářet i dojem nerovnoměrnosti nebo hrbolaté plochy (vodní hladina), bez zásahu do geometrie tělesa. Tento vjem vytváří především odraz světla od povrchu tělesa. Stejně tak je za pomocí textur a odlesků světla moţné získat odlesky okolního světa na určitém předmětu, jako je například lesklá sklenice (Ţára, 2004, s. 381-388).
Přehled literatury a pramenů
2.1.4
14
Interaktivita a interaktivní průchody
Interaktivita je zapojení účastníka do určité akce. Vyuţívá se v nejrůznějších odvětvích, od informatiky a vědy aţ k domácím zálibám, kde se jedná o interaktivní televize, tabule nebo interaktivní filmy. Z pohledu informatiky se jedná o software, který přijímá vstupy od uţivatelů a reaguje na ně. Opakem jsou statické neinteraktivní aplikace, které fungují po zpuštění plně bez zásahu uţivatele (Webopedia, 2013). Interaktivita je také obsaţena v kaţdé počítačové nebo jiné hře, kde hra komunikuje s uţivatelem. S tím se také spojují moţnosti umělé inteligence. Pro tuto práci je důleţité, ţe nám interaktivita také umoţňuje vytváření interaktivních průchodů, které jsou zaměřeny na to, aby si uţivatel sám mohl projít budovu, park nebo jakékoliv místo k tomu připravené z pohodlí domova a podle svých představ. Na rozdíl od statického videa má moţnost sám určovat cestu průchodu. Interaktivní průchod bývá spojován buď s modelem vytvořeným za pomoci fotografií nebo částí videa, nebo modelem, který byl vytvořen v některé z aplikací zaměřených na 3D modelování. Jedním z takových programů, které jiţ v základu umoţnují programovat interaktivitu nebo dokonce celé funkční hry, je Blender. Tento program vyuţívá skriptovacího jazyka Python, který umoţnuje interaktivitu ještě více rozvinout. Existují také programy, jako je například Unity, které modelům dodávají základní moţnost interaktivního průchodu. Další moţnou interaktivitu a jiné funkce je moţné doprogramovat některým ze skriptovacích jazyků podporovaných programem (např. JavaScripty). Za pomocí těchto programů se dají tvořit jiţ plně funkční hry na vysoké úrovni. 2.1.5
Reprezentace scény a kolize
Dobrá reprezentace scény, neboli efektivní zorganizování grafu scény a vyuţívání prostorových hierarchií, slouţí k urychlení často prováděných operací a pomáhají například k lepší funkčnosti detekce kolizí. Pokud je scéna sestavena neefektivně, můţe být velmi náročná na grafické zpracování (Ţára, 2004, s. 397). Hierarchie obálek Pro urychlení výpočtu se často pouţívá ohraničení objektu obálkou neboli tělesem s jednoduchou geometrií. V takovémto případě poté není nutné řešit skutečný tvar objektu. Díky obálce je moţné provádět text kolize mnohem rychleji, pokud totiţ neproběhne kolize se základní obálkou, není nutné provádět přesnější detekci se samotným objektem. Existují různé druhy obálek a kaţdé mají své klady, přesto není lehké určit, která z nich je nejlepší. Obálky jsou typu koule, u které nezáleţí na rotaci objektu, osově zarovnaného kvádru, který je vţdy kolmý na souřadnicové osy, orientovaného kvádru, který se snaţí, aby jeho ob-
Přehled literatury a pramenů
15
jem byl co nejmenší, a nakonec orientovaného rovnoběžnostěnu. Obálku tvaru koule a osově zarovnaného kvádru je moţné vidět na obrázku (Obr. 1).
Obr. 1: Obálky – koule1 a osově zarovnaný kvádr2
Pro efektivnější vyuţití je třeba obálky seskupovat do hierarchické stromové struktury, nazývané hierarchie obálek. Pokud objekty leţí v takové vzájemné blízkosti, ţe se dotýkají, shlukují se do dalších společných obálek. Poté není nutné, aby kaţdá obálka prováděla samostatný test. Test je vţdy prováděn nejvyšší obálkou. Toto shlukování probíhá například pomocí stromové struktury (Ţára, 2004, s. 402). Dělení prostoru Jiným urychlením výpočtu, je rozdělení prostoru scény (Scene partitioning). Prostor můţe být dělen různými způsoby, mezi nejznámější patří pravidelná mřížka, oktanový strom, strom BSP (Obr. 2).
Zdroj: http://mathforum.org/mathimages/imgUpload/thumb/Tighter_bounding_sphere.png /530px-Tighter_bounding_sphere.png 2Zdroj:http://mathforum.org/mathimages/imgUpload/thumb/Bounding_box.png/400pxBounding_box.png 1
Přehled literatury a pramenů
16
Obr. 2: Tři nejčastěji používané způsoby dělení prostoru3
U pravidelné mříţky se nejedná o hierarchii, pouze dělí rovinami prostor na stejné části. Oktanový strom a strom BSP patří mezi hierarchické dělení prostoru, které prostor rozděluje na několik podprostorů, které jsou jednodušší na propočet. Kaţdý tento podprostor je dále moţné dělit. Oktanový strom dělí prostor vţdy třemi řezy kolmými na souřadnicové osy a umístěnými v polovině daného prostoru. Strom BSP je binární strom s obecně umístěnými řezy (Ţára, 2004, s. 405). Kolize Kolize, jak uţ vyplývá z názvu, je střet dvou nebo více objektů. S kolizemi se v reálném ţivotě setkáváme neustále, ať se jedná o naraţení do zavřených dveří nebo mnohem prostší chůzi po nerovném terénu. Při kaţdé takové „sráţce“ vzniká fyzikální jev, který je třeba při převodu do virtuální reality převést pomocí algoritmů. Vţdy se musí brát ohled na druh a samotný povrch tělesa. Kolize se vyuţívají při tvorbě většiny 2D a 3D her. Kdyby nebylo moţno takovou detekci vyuţívat, docházelo by k průchodu jednoho objektu objektem jiným a zároveň by nebylo moţné spouštět reakce na určité objekty v dané chvíli. Detekce kolizí Při vyuţívání detekce kolizí záleţí na daném případě. Například v animacích nezáleţí na době výpočtů, ale bere se v potaz co nejpřesvědčivější výsledek. Proto je moţné vyuţívat přesnějších algoritmů, jako je třeba výpočet pomocí trojúhelníků. Pokud se ale bude jednat o detekci kolizí ve hrách nebo podobných aplikacích, bude se vyţadovat okamţitá kontrola, aby nedocházelo k neţádoucímu „lagování“, a to i za předpokladu drobných nepřesností ve výpočtu. V těchto případech se vyuţívají například hierarchické obklopující obálky tvaru koule nebo kvádru. Výpočet je prováděn ve dvou krocích. Po proběhnutí detekce kolize nastává druhý výpočet v podobě generování odezvy na kolizi. Detekce kolize je vnímána objektem při středu s objektem jiným. Pro detekci se vyuţívají jiţ předem zmi3
Zdroj: Ţára, 2004
Přehled literatury a pramenů
17
ňované hierarchické obálky, které pomáhají lehčímu výpočtu, a tak není třeba řešit samotný tvar tělesa (Ţára, 2004, s. 410). Poté mohou nastat dva případy. Buď se jedná o vyloučení kolize, kdy ke kolizi nedošlo. Tento případ je častější. Pokud dojde ke kolizi mezi danými objekty, mohou nastat následující situace, podle nastavené reakce: neprojevení ţádné fyzikální reakce – jedno těleso druhým projde bez jakékoli reakce, kolize proběhne v podobě nárazu do druhého tělesa, od které se odrazí, kolize proběhne v podobě nárazu do druhého tělesa, o které se zastaví a následně po něm „sklouzne“. Příklad můţeme vidět na obrázku (Obr. 3). Jedná se o dopad tělesa na šikmou plochu, kde první těleso nemá nastaveny ţádné vlastnosti, a tedy nemění svou polohu. Druhé těleso má nastavenou gravitaci bez detekce kolizí, tedy dojde k propadnutí tělesa. V dalším případě se jedná o detekci kolize s hlavním zaměřením na gravitaci, těleso tedy po hraně „sklouzne“ v původní poloze. Čtvrté a poslední těleso má k reálnému chování tělesa nejblíţe. Těleso dopadne na povrch, pomocí detekce kolizí nepropadne a s pomocí rotace se skutálí po svahu.
Obr. 3: Reakce na kolize4
Záběr reakce na kolize byl inspirován videem na http://upload.wikimedia.org/wikipedia/ commons/transcoded/e/ec/PhysicsEngine.ogg/PhysicsEngine.ogg.360p.webm a následně znovu vytvořen. 4
Přehled literatury a pramenů
18
2.2 Programy pro tvorbu 3D Existuje velké mnoţství programů zaměřených na tvorbu 3D modelů. U převáţné většiny programů se jedná o komerční produkty, které slouţí na vyšší úrovni, například pro výrobu kvalitních filmů nebo profesionální práci. Takové produkty se cenově pohybují i v řádu několika set tisíc korun. Mezi takové produkty se řadí například Rhinoceros, 3Ds Max a Maya. Mezi nejpouţívanější volně staţitelné programy pro tvorbu 3D modelů se řadí Blender. Přestoţe je tento program zdarma a běţného uţivatele zprvu můţe odradit jeho sloţitější uţivatelské prostředí, skrývá pro trpělivějšího uţivatele velké moţnosti a zajímavé funkce, které budou probrány níţe. Nyní si podrobněji probereme určité vybrané programy. . 2.2.1
Rhinoceros
Rhinoceros je, jak jiţ bylo zmíněno výše, komerční program na tvorbu 3D modelů od firmy McNeel&Associates. Jedná se o jeden z nejpouţívanějších nástrojů pro tvorbu 3D modelů. Často je vyuţíván k vytváření nových designových výrobků kvůli jeho moţnosti reprezentace dokonale hladkých křivek a ploch, kterých dosahuje vyuţíváním NURBS geometrie místo polygonální reprezentace. Program sám je spustitelný na jakémkoliv stolním počítači a nevyţaduje ţádné sloţité parametry. Rhinoceros je populární také kvůli svému jednoduchému rozhraní, které se kaţdý naučí snadno ovládat, coţ mu pomůţe nebojovat s programem, ale věnovat se plně své kreativitě. Z tohoto důvodu je také ve velké míře vyuţíván ve školách jako učební prostředek pro tvorbu 3D grafiky. Nejnovější verze je Rhinoceros 5.0 a jeho prodejní cena za základní balíček bez přidaných zásuvných modulů se pohybuje kolem 25 000 Kč. Základní balíček obsahuje pouze základní funkce, pro případné rozšíření je nutné zakoupení jiţ zmíněných zásuvných modulů, kterých výrobce nabízí velké mnoţství. Například za pomoci modulu Bongo, je moţné vytvářet profesionální animace. Další rozšíření a vyuţití funkcí je moţné za pomoci skriptovacího jazyku, kterým je v tomto programu RhinoScript neboli vbScript (postaven na Visual Basicu). Dále je moţné vyuţití například i C++ pluginů a IronPython. Má také velké moţnosti importu nebo exportu. Poradí si s formáty jako je například DGN, DXF, VDA, AI, OBJ, 3ds a mnoho dalších (Dimensio, 2013; McNeel, 2012). 2.2.2
3ds Max
Základní informace byly čerpány z (Autodesk, 2013; CAD studio, 2013). 3ds Max je profesionální komerční program na tvorbu 3D od firmy Autodesk. Je
Přehled literatury a pramenů
19
zaměřen na filmové grafiky, vizuální efekty, hry a jiné kreativní tvorby. Hlavní vyuţití je v pohyblivé grafice a animaci. Jedná se o velmi profesionální program, kde je moţné vše soustředit na tvůrčí činnost, protoţe s technickými problémy se zde téměř nesetkáme. Kvalitě programu také odpovídá finanční hodnota produktu. Cena nejnovější verze, kterým je 3D Studio Max 2012 (3ds Max), se podle (Dimensio, 2012) pohybuje kolem 120 000 Kč. Pro rozšíření moţností je moţné vyuţít skriptovacího jazyka Max skript. 3ds Max má také k dispozici rozsáhlou knihovnu doplňkových plugin aplikací od dalších vývojářů. Jeho systémové poţadavky jsou samozřejmě jiţ poněkud náročnější, ale i tak je moţné jej pro základní projekt pustit i na stolním počítači. 3ds Max je plně kompatibilní s jinými aplikacemi firmy Autodesk (AutoCAD, Inventor a jiné). Program stejně jako Rhinoceros exportuje i importuje z mnoha různých programů a poradí si s mnoha různými formáty. 2.2.3
Blender
Jedná se o multiplatformní open source program pro 3D modelování, tvorbu animací, interaktivních aplikací a rendering. Protoţe je multiplatformní, je moţné jej vyuţívat na nejrůznějších operačních systémech jako je Windows, Linux, Mac OS apod. To, ţe je Blender open source, v tomto případě neznamená jen, ţe je zcela zdarma, ale ţe kaţdý uţivatel má také právo osobně zasahovat do původního kódu programu, a tím se podílet na jeho dalším vývoji. Na tvorbě se podílelo sto aktivních dobrovolníků z celého světa. Program můţe výsledky produkovat v mnoha různých multimediálních prezentacích, počítačových hrách nebo filmových scénách. Jeho funkce a rozsah se postupem času rozvíjela, aţ se ze základního programu stala aplikace srovnatelná s některými komerčními 3D aplikacemi. Oproti ostatním programům obsahuje GameEngine, zaměřený na tvorbu interaktivních aplikací. Podrobněji si tuto funkci probereme níţe. Pro rozšíření moţností je moţné vyuţít Python skriptů vytvářených objektově orientovaným programovacím jazykem Python. Další rozšíření je moţné provádět i za pomoci materiálových či sekvenčních pluginů, které jsou ve formě knihovních souborů (např. dll). Blender podobně jako předešlé programy můţe exportovat nebo importovat do většího mnoţství formátů (Blender3dcz, 2005; Pokorný, 2009). 2.2.4
Výběr
Z uvedených programů jsou všechny velmi kvalitní a jejich funkčnost je na velmi vysoké úrovni. Kaţdý však obsahuje trochu něco odlišného. Pro výběr vhodného
Přehled literatury a pramenů
20
programu se proto musí brát v potaz, ţe pro tvorbu této práce je důleţitá moţnost interaktivity a interaktivního průchodu budovou. Této funkce lze ovšem v dnešní době dosáhnout i jinými doplňkovými programy (některé ovšem za vyšší poplatek), které můţou být nápomocně vyuţity v kompatibilitě s téměř jakýmkoliv programem, a proto je třeba si zároveň poloţit otázku, jak by se rozhodoval uţivatel, který nemůţe vyuţít volné nebo studentské licence nebo uţivatel s velmi malým kapitálem. Takový uţivatel by s největší pravděpodobností volil nejlevnější moţnou variantu. Proto se i tvorba práce vydává levnou cestou a byl zvolen volně dostupný a přesto profesionální program Blender, který má zabudovaný Game Engine pro moţnost her a interaktivních aplikací.
2.3 Blender Základní informace o této aplikaci byly zveřejněny jiţ výše. Podrobněji jeho vývoj, rozhraní prostředí a základní funkce budou probrány nyní. 2.3.1
Historie
Za vznikem Blenderu stál Ton Roosendaal, spoluzakladatel animačního studia NeoGeo, pro které byl Blender původně jako interní aplikace roku 1995 vytvořen. V roce 1998 Ton Roosendaal zaloţil novou společnost Not a Number (NaN), ve které se Blender nadále vyvíjel a byl nabízel jako komerční produkt. Díky získání podpory investičních společností se Blender v roce 2000 mohl stát v online verzi bezplatným nástrojem. Pro distribuci a publikování bylo však třeba zakoupit komerční verzi softwaru. Kvůli neuspokojivým prodejním výsledkům se roku 2002 investoři rozhodli své kapitály stáhnout a tím způsobili zavření firmy NaN a pozastavení vývoje Blenderu. Protoţe se ale Roosendaal nechtěl svého výtvoru vzdát, zaloţil ještě v květnu téhoţ roku neziskovou nadaci Blender, jejímţ hlavním cílem bylo najít způsob, jak ve vývoji pokračovat. Roku 2002 bylo za pomoci získaných investorů moţno Blender uvolnit jako open source systém, který nyní spravuje Ton Roosendaal a skupina dobrovolníkům z celého světa, která se v dnešní době skládá. V roce 2005 vytvořili projekt „Project Orange“, který se zaměřoval na tvorbu krátkometráţních 3D animovaných filmů. Jejich prvním filmem byl „Elephants Dream“, který byl zcela vytvořen open-source systémem. Díky velkému úspěchu Roosendaal v roce 2007 zaloţil institut Blender, který se stal centrem, a pomohl tak lepší organizaci a efektivnější práci. Od roku 2008 vznikaly úspěšné filmy jako například "Big Buck Bunny" a „Sintel“ a hra „YoFrankie!“ (Blender Foundation, 2011a).
Přehled literatury a pramenů
2.3.2
21
Starší verze
Od verze 2.25 se aplikace stala open-source a přibylo jí velké mnoţství nových funkcí. Verze série 2.3 zlepšuje vzhled rozhraní, které se nadále vyvíjí. Dále zlepšuje a neustále přidává nové funkce a moţnosti Pythonu. Verze 2.33a také navrací funkci Game Engine. Ve verzích série 2.4 vznikají funkce na tvorbu vlasů a chloupků apod. Nejdůleţitější novinou je vylepšení animace a to v podobě snadnější manipulací s kostmi, které pomáhají k lepší animaci postav. Verze 2.49 přináší velké pokroky v Game Engine (Blender Foundation, 2013). 2.3.3
Novější verze
Roku 2008 vzniká verze 2.5, která se od předchozích verzí zcela odlišuje novým uţivatelským rozhraním. Také přibývají některé nové funkce, rozvoj Game Enginu a proměny potkávají také Python. Velké změny ovšem přinesly i některé problémy, v podobě chybějících funkcí a jiných chyb, kterých bylo ve verzi 2.55 beta nalezeno přes 440. Chyby byly postupem času opravovány a verze 2.57 byla představena jako první stabilní verze série 2.5, ve které bylo provedeno 1000 oprav a aktualizací. Nejnovější série verzí v současné době je 2.6. Tato série přinesla mnoho nových funkcí, jako je například nová křivka NURBS, částicové uzly, vylepšení animačního systému atd. Vývoj zaznamenal i Game Engine a funkce Pythonu. Hlavním cílem těchto sérií je udrţet neustálou stabilitu a zabránit velkým chybám. Nejnovější verzí v současné době je verze 2.64, která je zaměřena na zlepšování v oblasti vyuţitelnosti pro filmy. Důraz byl kladen na zlepšení sledovacího pohybu pomocí rovinné trajektorie, vytvoření VFX potrubí, jednodušší klíčování zelené obrazovky a nové maskové editory. V Game Engine se zlepšila funkce světel a stínů za pomoci podpory mapování rozptylu stínů, barev stínů a textur lamp (Blender Foundation, 2013). 2.3.4
Prostředí Blenderu
Blender je moţné stáhnout ve dvou podobách. Jako program, který je třeba nainstalovat do počítače a poté je moţné ho spouštět. Nebo stáhnout soubor zip, který obsahuje exe soubor pro spuštění a další podstatné soubory a knihovny potřebné pro práci v něm. Tento soubor je přenositelný a lze spustit kdekoliv bez instalace. Při spuštění programu jakoukoliv z uvedených moţností naběhne úvodní obrazovka s informačním oknem pro moţnost okamţitého otevření dříve uloţených souborů nebo odkazů například na návod nebo uţivatele, kteří se přičinili při tvorbě tohoto programu.
Přehled literatury a pramenů
22
Pokud se klikne mimo tento informační rám je vidět úvodní rozloţení oken. Pokud není v uţivatelském nastavení nastaveno jinak, naběhne Defaultní zobrazení oken (Default) a hlavním oknem uprostřed obrazovky se stává 3D View, neboli modelovací okna. Toto okno je středem téměř v kaţdém rozloţení oken. Defaultně je zobrazeno pouze v pohledu 3D, pro přepnutí do další zobrazení se vyuţívá klávesové zkratka Ctrl + Alt + Q. Rozložení oken Rozloţení oken je moţné přepínat v horním informačním okně. Rozloţení je moţné nastavit na Default (Obr. 4), pro základní modelování, které v základu obsahuje, jak jiţ bylo zmíněno, 3D View, dále Outliner, Properties a Timeline, které budou popsány níţe. Také je zde moţné zapínat postranní panely jako Object Tools (klávesou T), obsahující základní nástroje pro úpravu objektů.
Obr. 4: Default - základní rozložení oken pro modelování
Důleţitá okna a s nimi i nástroje pro tuto práci se nacházejí v rozloţení Game Logic a Scripting. V obou případech obsahují hlavní okno 3D View a okno pro psaní textů jako poznámek nebo přímo skriptů (Text Editor). Rozloţení Game Logic obsahuje na rozdíl od druhého zmíněného Logic Editor, který bude lépe popsán v následném výčtu. Jeho hlavní funkcí je ale vizuální programování a propojování 3D modelu se skripty Pythonu. Scripting obsahuje namísto Logic Editoru konzoly pro Python (Python Console), kde je moţné zkoušet dané příkazy nebo je přímo vyuţívat i k modelování a spouštění jiných skriptů. Tato konzole má přímo importovány moduly typu bpy, bpy.data, bpy.ops, bgl, a jiné. Pro vyuţívání funkcí interaktivity je třeba importovat modul bge.
Přehled literatury a pramenů
23
Obr. 5: Game Logic - rozložení pracovních oken pro tvorbu her
Dalším rozloţením je Animation, které je zaměřeno na tvorbu animací, proto obsahuje panely jako Timeline, DopeSheet a Graph Editor, které se vyuţívají pro různé záznamy animace nebo informace o daných animacích. Pro tuto práci ovšem nejsou podstatné. Dále se dá nastavit rozloţení oken UV Editing vhodné pro texturování, tvorbu obrazů a UV textur, k tomu se vyuţívá především okna UV/Image Editor. Kaţdé z oken je moţné přepnout na jiný druh okna a tím je moţné vytvořit vlastní rozloţení oken. Významy a funkce některých oken Některá vyuţívaná okna nebyla výše zmíněna, proto jsou nejdříve charakterizována 2 okna, která jsou důleţitá pro celkové pouţívání programu. A tj. Info a User Preferences, která jsou obecná. Poté jsou podrobněji rozebrána okna, která jiţ byla zmíněna a při práci se vyuţívají. Info se vyuţívá ve všech typech rozloţení oken a nachází se v horní části celé aplikace. Obsahuje poloţky File, ve které se nachází volby jako nový, otevření nebo uloţení souboru, také skrývá moţnost exportovat nebo importovat a otevírat uţivatelské nastavení. Další záloţkou je Add, přes kterou se přidávají další objekty, křivky, kamery, světla, texty apod. Na této liště se také nalézají funkce pro Render nebo Game, podle nastavení typu Blenderu, ve kterém se pracuje. Tato funkce se nastavuje na stejné liště více napravo. Lze ji přepínat mezi Blender Render, pouţívaným pro tvorbu rendrovaných obrázků, a Blender Game, který se vyuţívá pro tvorbu her a interaktivních aplikací. Proto musí být při této práci nastaveno Blender Game. Dále je na této liště moţné přepínat jiţ zmíněné
Přehled literatury a pramenů
24
rozloţení oken, také tvořit a přepínat mezi scénami a nachází se zde i moţnost nápovědy. Na pravé straně lišty je moţné nalézt verzi Blenderu a jiné informace User Preferences se vyuţívá pro nastavování programu, ve kterém má uţivatel velké moţnosti. Nastavení je rozděleno na sedm záloţek (Interface, Editing, Input, Addons, Themes, File, System). Interface umoţnuje uţivateli přizpůsobit si uţivatelské rozhraní, zobrazování různých popisků a jeho funkčnost. V záloţce Editing se dají nastavit například moţnosti tvorby nových objektů nebo kopírování starých. Následující záloţka Input slouţí ke správě reakcí na vstupy například z klávesnice, jejichţ význam se dá v této záloţce také přenastavovat. Addons spravuje doplňky, pro tuto práci je však nejdůleţitější v postraním výčtu Game Engine, ve kterém je třeba vybrat poloţku Game Engine: Save As Game Engine Runtime, který umoţní následný export do souboru exe. V záloţce Themes si uţivatel můţe měnit vzhled a barevné uspořádání jednotlivých oken. File nastavuje cesty k určitým vyuţívaným souborům (např. soubory k texturám, skriptů nebo zvukům). Poslední záloţka System umoţnuje nastavovat např. jazyk, který je defaultně nastaven na anglický. 3D View je jeden z nejdůleţitějších editorů. Slouţí pro modelování 3D objektů. Při spuštění u defaultního zobrazení se na ploše nachází krychlový objekt, kamera a světelný zdroj typu lampa. Dále také 3D kurzor, který značí místo, kde se zobrazí nově vytvořený objekt. Jak jiţ bylo zmíněno, defaultně je nastaven pouze 3D pohled (User Ortho). Při volbě všech pohledů najednou (Ctrl + Alt + Q) se zobrazí k 3D pohledu také pohled svrchu (Top Ortho), zepředu (Front Ortho) a zprava (Right Ortho). Na kaţdém z těchto záběrů se nachází značení os, se kterými je v daném pohledu vhodné pracovat. Dále se po stranách okna v horní pravé i levé části dají vidět malá plus, která vysouvají postranní panely pro manipulaci a úpravy objektů. Pro tuto volbu je také moţné vyuţívat kláves T a N. Na liště tohoto okna, nacházejícího se ve spodní části okna, můţeme nalézt poloţkou Object pro základní manipulaci s objektem. Poté nastupují moţné volby mezi zobrazením objektového módu (Object Mode), editačního módu (Edit Mode) nebo různých módů na úpravu (Texture Paint, Vertex Paint atd). Vedle této poloţky je výběr zobrazení objektů (Wireframe – drátěný model, Solid – pevné zobrazení nebo Texture – zobrazení s texturami). O kousek dál je moţné vyuţívat funkce Global, ve které se nachází funkce posunu, rotace nebo změny velikosti. Hned vedle je moţné vybírat vrstvy, ve které chceme pracovat. Ke konci lišty lze vyuţít funkci Snap, která funguje pro přichytávání objektu k určitému elementu, jako je mříţka na ploše nebo vrchol, hrana či plocha jiného tělesa. Properties má vţdy šest záloţek stejných a tj. Render, Scene, World, Object, Object Constraints a Textures, ale zbytek se s kaţdým typem objektu trochu
Přehled literatury a pramenů
25
mění. Jiné záloţky jsou u objektu, jiné jsou u světel, kamery nebo křivek. Kaţdá z těchto záloţek je dále značně rozsáhlá. Render se chová jinak při nastavení na Blender Render a Blender Game. Pokud bude vybrána volba Blender Render, bude tato sloţka obsahovat moţnost jako rendrování obrazů nebo animace, přepínání mezi vrstvami, stínování a jiné. Pokud bude nastaveno Blender Game, bude záloţka obsahovat nastavení a tlačítko pro spuštění interaktivní aplikace nebo animace vytvořené pomocí Game Enginu. Také se zde dají nalézt poloţky pro nastavení displeje nebo hudby. World umoţňuje nastavovat barvu a odstíny okolního prostředí. V záloţce Object se skrývají funkce pro přejmenování objektu, změnu polohy, rotace nebo velikosti. Také je zde moţné vytvářet skupiny, nebo nastavovat moţnosti textury. Další záloţkou nacházející se převáţně u objektů, je Object Modifier, který obsahuje funkce jako Array pro tvorbu polí, která byla vyuţívána při tvorbě schodů, funkce Boolean, ve které se vyuţívá funkce rozdíl pro vytváření okenních a dveřních otvorů, funkce Mirror pro zrcadlení, která byla vyuţita při tvorbě obrysů zdí a mnoho další funkcí. Následující záloţka Material se vyuţívá pro tvorbu barevného materiálu na objekty. Také je zde moţné nastavovat průhlednost nebo stínování. Následně je na objekt vhodné nanést texturu v Textures. Je moţné vytvářet nové textury různého typu, například Clouds, Magic, Wood, Ocean, Image or Movie a jiné. Dále obsahuje poloţku Mapping, kde se nastavuje styl potaţení objektu texturou. Poslední poloţkou u většiny objektů je Physics, kde se nastavuje u Blender Game fyzické chování objektu. Je moţné vybrat Static, coţ značí těleso bez určité fyziky (například se nehýbe v prostoru). Obvyklé nastavení je Dynamic, na které působí gravitace a průchod jiným objektem není moţný. U takového objektu je moţné nastavit rádius, který určuje, na jakou vzdálenost je moţné se k objektu přiblíţit. Dalším typem je Rigid Body, která působí jako skutečné těleso a nejvíce se přibliţuje reálné fyzice objektů. Outliner se vyuţívá jako informační okno. Uchovává přehled všech pouţívaných objektů. Nejvyšším rozdělením je scéna a v kaţdé scéně jsou zařazeny objekty nacházející se v ní. Objekty je zde moţné přejmenovávat, také je moţné jim nastavovat určité vlastnosti, jako je zapínání a vypínání viditelnosti v modelovacím okně, nebo ovlivňovat následnou viditelnost při rendrování. Je zde také moţné vypínat jejich moţný výběr, aby bylo zamezeno pohybu objektem, který má jiţ pevně danou pozici. U samotného objektu se nacházejí také informace, jako například zda se objekt nachází v editačním modu a zda má nanesen nějaký materiál či texturu. U světel ukazuje, o jaký druh světla se jedná (bodové, slunce, hemi atd.)
Přehled literatury a pramenů
26
Tyto objekty je moţné tímto způsobem označovat, mazat nebo třeba přejmenovávat. UV/Image Editor slouţí pro tvorbu textur u sloţitých objektů. Pro správnou funkčnost je nejprve třeba u vybraného objektu nastavit Mark Sharp, který lze nastavit pouze v editačním modu. Poloţka View nabízí moţnosti přibliţování nebo zapínání postranních panelů. Pomocí další poloţky Image je moţné načíst obrázek, vytvořit nový apod. Při spuštění New se dá vytvořit nová textura novým načtením obrázku. Také naběhnou nové poloţky jako UV, který je více popsán při pouţívání tohoto okna při texturování dveří v této práci. Text Editor vyuţívá se pro psaní Python skriptů. Na liště se nachází tlačítko New, které značí tvorbu nového skriptu. Na levé straně od tohoto tlačítka se nachází seznam všech vytvořených textů. Na pravé straně se nacházejí moţnosti pro číslování řádků, zarovnání textu nebo zvýrazňování syntaxe. Po vytvoření nového textu se objeví funkce Run Script pro testování skriptu. V nabídce na začátku lišty se nacházejí moţnosti pro editaci textu a okna. Tlačítko Templates otevírá předem definované skripty, které se dají vyuţívat jako šablona pro jinou práci. Veškeré vytvořené texty se dají také lehce ukládat. Tyto skripty jsou vyuţívány pro plné moţnosti všech funkcí. Pro jejich pouţívání je však třeba nainstalovat samotnou aplikaci Pythonu. Ve verzi Blenderu 2.63 je vhodný Python 3.3. Logic Editor – jedná se o styl vizuálního programování pro tvorbu interaktivních aplikací. Skládá se ze tří Logic Bricks („programovacích cihel“) a to sensors, controllers a actuator (senzorů, regulátorů a pohonů). Mezi senzory se řadí například Keyboard, kde je třeba nastavit klávesnici, se kterou bude akce provedena, Collision, která se pouţívá při kolizi, Always, který určuje, ţe navazující akce nastane vţdy, a Near. V regulátorech se vyuţívá převáţně And, pro spojení senzoru a pohonu, který značí, ţe pokud se například zmáčkne daná klávesnice, spustí se vţdy určitý pohon. Dalším regulátorem je Python, který se vyuţívá pro spouštění daného skriptu. V tomto pohonu je třeba nastavit název daného skriptu. Při vyuţívání skriptů není nutné pohony vůbec vyuţívat. Pokud se vyuţívá spojení And, je moţné pouţívat pohony různých typů. V této práci je poukazováno na pohyb, který se spouští pohonem Motion.
2.4 Game Engine Jedná se o systém, který vývojáři (umělci, designéři, programátoři) vyuţívají k vytváření her. Game Engine nabízí funkce, jako jsou rendrování, animování modelů, detekce kolizí, zvuk, skriptování, umělá inteligence, OpenGL, specifické
Přehled literatury a pramenů
27
modely a textury atd. Jsou tvořeny jazyky vyšší úrovně, mezi které patří například Java, C# nebo Python (Ward. 2008). Blender má vlastní vestavěný Game Engine (BGE), napsaný v C++, který umoţnuje vytvářet interaktivní 3D aplikace. Hlavní rozdíl, který Game Engine do Blenderu přidává, je proces vykreslování. Scény vykresluje v reálném čase a obsahuje zařízení pro interakci s uţivatelem během procesu vykreslování. Game Enginu je v Blenderu dosahován jiţ výše zmíněnou funkcí Logic Editor, která se skládá ze série tzv. „Logic Bricks“ (sensors, controller, actuator), kterými dosahuje interaktivity neboli ovládání pohybu a zobrazování objektů. Dále můţe být funkčnost rozšířena pomocí Python skriptů, které jsou připojovány pomocí „cihly“ controller. Aplikace vytvořené v BGR mohou být interpretovány přímo v programu Blender pomocí interního přehrávače nebo existuje moţnost exportovat binární runtime pro různé operační systémy nebo mobilní platformy. Nejlepší hrou vytvořenou v Blenderu je Yo Frankie!, která ukazuje, co vše je moţné v Game Enginu v Blenderu vytvořit (Blender Foundation, 2012b).
2.5 Python Jedná se o interaktivní, interpretovaný a objektově orientovaný jazyk vytvořený jiţ kolem roku 1990 Guidem van Rossumem v Amserdamu. Stejně jako ostatní programovací jazyky má moduly, třídy, výjimky, vysokoúrovňové dynamické datové typy a dynamické psaní. Má velké mnoţství knihoven a modulů a plně podporuje Unicode. Prostředí je psané pomocí C a C++ a protoţe se jedná o open source je moţné ho dále rozšiřovat. Je moţné jej vyuţívat také jako skriptovací jazyk pro aplikace v jiných jazycích (Kosina, 2005). Např. Blender, kde je interpret jazyku Python vloţen přímo do prostředí programu. Python je jednoduchý programovací nástroj, který má mnoho vyuţití. Pro pouţívání proměnných není třeba je nejprve definovat. Do proměnné můţe být tedy přiřazena jakákoliv hodnota (číslo, znak, objekt atd.). Pro psaní programů je moţné vyuţívat nejrůznějších textových editorů, jak komerčních (Komodo IDE) nebo nekomerční (Eclipse nebo PyDey). Takových textových editorů existuje velké mnoţství, ale pouze několik málo jiţ zvládá pracovat i s Pythonem 3. Všechny výše zmíněné programy to jiţ umoţnují. Nejpouţívanější pro psaní základních programů je Python Shell. Python Shell je interaktivní prostředí pro tvorbu krátkých Python programů. Grafický Python Shell, pojmenovaný IDLE, obsahuje textový editor, interaktivní nápovědu a podporuje barevné zvýrazňování syntaxe (Pilgrim, 2010).
Přehled literatury a pramenů
28
Python se hojně vyuţívá, jak uţ bylo zmíněno, v jiných aplikacích jako skriptovací jazyk. My se budeme bavit o pouţívání v Blenderu, kde podporuje a rozvíjí jeho samotné funkce. V Pythonu existují sloţité pluginy, které slouţí pro generování krajin, dřevin a jiného porostu, lidských těl, tváří, srsti a mnoha dalšího. Také dokáţe importovat a exportovat filtry pro komunikaci s jinými aplikacemi. V této práci bude vyuţit hlavně pro rozvinutí interaktivity (Blender3dcz, 2005). Verze Blenderu 2.4 vyuţívala Python 2, nejnovější verze ovšem vyuţívají jiţ nejnovější verzi Python 3.
2.6 Java TeTento programovací jazyk se začal vytvářet v 90. letech minulého století ve společnosti Sun Microsystems a jeho prvním názvem byl Oak. V roce 1995 se začal rozvíjet pro domácnost a bylo zjištěno jeho významné vyuţití pro Internetové aplikace. Ve stejném roce byl změněn jeho název na stávající „Java“ a stal se populární zejména díky Java Appletům. O dva roky později uţ byla Java velmi populární a hojně vyuţívána a její obliba výrazně rostla kaţdým rokem. V dnešní době je jedním z nejpouţívanějších programovacích jazyků na světě. Java je moderní, univerzální, syntakticky jednoduchý, výkonný a objektově orientovaný programovací jazyk. Existují různé platformy Javy pro různé situace. Například Java SE pro klasické psaní programů na počítači, Java ME pro psaní aplikací pro mobilní telefony a Java EE určená pro rozsáhlejší aplikace (Mička, 2010).
Výsledky
29
3 Výsledky Po teoretickém úvodu do problematiky a přiblíţení si programu Blender přistoupíme k samotné práci. Práce je zpracovávána ve verzi 2.63a, která byla při začátku tvorby práce nejnovější. Její uţivatelské rozhraní se začíná podobat komerčním programům, i kdyţ stále obsahuje nepřehlednější ovládání, které je pro „lajka“ sloţitější na orientaci a zaučení se. Hlavní informací, kterou si je třeba uvědomit, neţ uţivatel začne v Blenderu pracovat, je, ţe pro ulehčení veškeré práce je dobré si osvojit několik klávesových zkratek, díky kterým bude práce snazší a rychlejší. Pro přehlednost jsou nejdůleţitější a nejpouţívanější klávesové zkratky v této práci uvedeny ve stručném výčtu v příloze A Tab. 1: Klávesové zkratky, a v samotné práci se budou postupem času vyskytovat a i rozvíjet.
3.1 Základní informace o modelovaném objektu Jedná se o historickou radnici nacházející se na Palackého náměstí ve městě Polička. První zmínky pocházejí jiţ z roku 1711. Tehdy se jednalo o gotickou stavbu s vysokou věţí, která se spolu s malou kaplí, částečně dochovala, kdyţ byla zbořena, a poté úspěšně přestavěna na barokní, v jejíţ podobě se nachází dodnes. V jejím přízemí byly nalezeny renezanční prvky a malby a bylo tedy zjištěno, ţe se celkově skládá ze 3 historických slohů. V dnešní době se v přízemí nachází Komerční banka a obřadní síň města. První a druhé patro funguje jako galerie, která se stala zájmem této práce. V prvním patře se nacházejí historické obrazy a sochy a dvě kaple. Druhé patro je zaměřeno na moderní umění a vystavování prací studentů (Votruba, 2005).
3.2 Samotné modelování Radnice, jako historická budova, nemá rovné stěny, naopak jsou zdobené různými ornamenty a 1. patro je z převáţné většiny tvořeno stropní obloukovou klenbou, proto je tvorba této budovy o něco náročnější neţ tvorba rovných stěn a stropů u modernějších budov. 3.2.1
Tvorba zdí
Stěny K vytvoření správného půdorysu, rozloh a stavbě základních obrysů stěn budovy byl vyuţit zapůjčený plánek prvního a druhého patra. Tyto plánky byly vloţeny
Výsledky
30
funkcí Background Image. Umoţnuje podkladový obraz posunovat na určité pozice, měnit jeho velikost a průhlednost. V této fázi se stal nejdůleţitějším nástrojem Extrude Individual (extrudování), které se pouţívá v editačním módu pro vytahování vrcholů, hran nebo ploch. Je moţné jej také spustit klávesovou zkratkou E. První bod v soustavě byl získán pomocí základní plochy, které byly v editačním modu odmazány tři vrcholy. Poté se za pomoci extrudování vytváří linie po předloze naskenovaného plánku. Nakonec byl extrudováním vyzdviţen celý objekt po ose Z (Obr. 6). Následně byl doplněn o příčky na stěnách.
Obr. 6: Tvorba základů stěn budovy
Do stěn, pomocí funkce boolean přesněji funkcí Difference (rozdíl) a vytvořeného kvádru, jsou vyříznuty díry pro vloţení později vytvořených oken. Stejným postupem jsou vytvořeny i otvory pro dveře. Při této práci často nastávaly potíţe s danými boolean funkcemi. Například při vyuţívání potřebné funkce Difference se často místo rozdílu sjednotily a naopak při pouţití funkce Union (sjednocení) docházelo k průniku, rozdílu nebo stejně jako při ostatních boolean funkcích reakce nebyla ţádná nebo docházelo k chybným výřezům. Někdy pro správnou funkci musel být postup opakován. Vrcholy jsou k sobě spojovány nástrojem Merge, který se vyuţívá ke spojování dříve vyextrudovaných vrcholů, hran a ploch. Tento nástroj se stejně jako Extrude Individual nachází v Mesh Tool. Místo této funkce je moţné vyuţívat klávesy F, která zajistí přemostění a způsobí vytvoření hrany mezi vrcholy. Oblouky a záhyby na stěnách Základní tvar oblouků, vyuţívaných nade dveřmi a okny, byl vytvořen pomocí Bezierovy křivky, která byla vymodelována do poţadovaného oblouku. Takto vytvořené křivce je ve vlastnostech upravena šířka tím, ţe je nastavena hodnota Extrude na šířku stěny (Properties -> Geometry -> Extrude), a hloubka (Depth) na hodnotu 0.1, aby bylo získáno prostorové těleso, které bude moţné dále upravovat. Tyto oblouky byly následně zapuštěny do samotné stěny. Při tomto
Výsledky
31
kroku musí být ovšem brán zřetel na problematiku překrývajících se ploch, která způsobuje špatné vykreslování nejen stěny, ale také textury, která je na ní nanesena. Záhyby na stěnách jsou vytvořeny také pomocí Bezierovy křivky, ze které je vytvořen ohyb, který je stejně jako u přechozího oblouku protáhnut pomocí extrudování. Část tohoto objektu je zapuštěna do stěny a část ponechána přesahovat do výšky stropu. Tento pohled vytvoří dojem zahnuté stěny u stropu místnosti. 3.2.2
Stropy
Stropy samotné jsou tvořeny plochou, ve které jsou otvory pro schody a dvoupatrovou kapli. V prvním patře se nacházejí stropy klenbového stylu, které byly vytvořeny Bezierovou křivkou a funkcemi boolean. Vytvořený oblouk byl následně protáhnut a funkcí Duplicate Objects (Shift + D) zkopírován. Vytvořená kopie je rotována po ose Z o 90°. Stejně tak se postupuje ještě dvakrát aţ je vytvořena oblouková klenba. Takto vytvořená klenba, ale obsahuje překrývající se hrany, které byly funkcí boolean odříznuty. 3.2.3
Schody
První schod byl vytvořen pomocí ploch, které k sobě byly poloţeny v pravém úhlu. Kvůli problému Game Enginu, který nezobrazuje obyčejné plochy, musí být extrudovány do dalšího rozměru. Schod samotný a posléze i další schody byly tvořeny podle plánku 1. patra kvůli zachování rozměrů, které program Blender nijak nezaznamenává. Podle prvního schodu byla pomocí funkce Array, která se nachází mezi modifikátory ve vlastnostech objektu, vytvořena celá série schodů. Mezipatra byla řešena extrudováním samotných schodů do poţadovaného tvaru. Tyto akce byly opakovány aţ do druhého patra.
Obr. 7: Model schodů
Výsledky
3.2.4
32
Okna a dveře
Okna Okna se skládají z více těles. Základ rámového obrysu tvoří krychle, která byla postupně v editačním modu extrudována nebo protahována klávesou G do poţadovaného tvaru. Další část tvoří menší okénka, která představují rámy u otevírací části okna, které byly vytvořeny stejně jako předchozí rám. Tyto rámy obklopují kvádry představující skla, proto jim je nastavena průhlednost a za okna je umístěna fotografie venkovní scény, pro realističnost. Průhlednosti bylo docíleno funkcí Transparency nacházející se ve vlastnostech objektu v sekci Material. Transparency je třeba zaškrtnout a hodnotu Alpha nastavit na polovinu. V Game Enginu ovšem i poloviční zprůhlednění tělesa obvykle způsobí celkovou průhlednost, kvůli odlišnému vnímání textur. Dveře Převáţně se jedná o masivní historické a zdobené dveře stejného typu, s výjimkou dveří záchodových, které jsou uţší a celkově menší. Kaţdé dveře jsou řešeny jako dva kvádrové objekty, vytvarované do příslušného tvaru, jejich hlavní podstata je však tvořena nanesenou texturou, kterou je fotografie skutečných dveří. Kolem dveří se nachází zdobený rám, který je tvořen extrudovanými kvádry a tvarově upraveným válcem. Tyto objekty byly vkládány do poţadovaného tvaru v editačním modu, aby vytvořily celistvé těleso. 3.2.5
Textury
Stěny, oblouky, záhyby a stropy mají nanesenou stejnou texturu v podobně „stěny“. Tohoto efektu je moţné dosáhnout dvěma způsoby. První je moţnost vytvoření nové textury například zaloţené na typu Clouds, která při minimální velikosti působí jako zrníčka v omítce. Taková stěna, ale můţe působit uměle. Proto bylo vyuţito nanesení skutečné textury omítky. Její nastavení se mírně liší v určitých případech, aby byl výsledek co nejvíce reálný. Například samotná stěna má velikost roztaţení nastavenu na 8.000 na všech osách, zatímco oblouky mají velikost kolem 1.500. Na schody byla vyuţita textura fotografie kamene a na rámech oken byla pouţita textura dřeva. V obou případech byl vyuţit typ textury Image or Movie. Tvorba skla u oken jiţ byla popsána výše. Textura nanesena na dveře je, jak jiţ bylo výše zmíněno, samotná fotografie dveří, která byla aplikována pomocí UV mappingu. Nejdřív se v editačním modu označí určité potřebné hrany a plochy a za pomoci klávesové zkratky Ctrl + E nastavit Mark Sharp. Poté se v okně UV/Image Editor vytvoří nový obraz, tím se otevřou nové poloţky. V tuto chvíli je důleţitá poloţka UVs a v ní je třeba vy-
Výsledky
33
brat Unwrap (klávesa E), coţ způsobí načtení vybraných hran či ploch, které se naskládají do dané plochy, na kterou je nyní třeba načíst (Alt + O) vybranou texturu. Poté je texturu třeba načíst i v nastavení textur. Typ textury se nastaví na Image or Movie. Otevře se vybraný obraz a rozvrţení textury Mapping se nastavit na UV a Map na UVMap.5 3.2.6
Světelné zdroje
Bledner vyuţívá 5 rozdílných druhů světelných zdrojů (bodové, slunce, lampa, hemi, area), které se dají dále nastavovat podle poţadavků. Měnit se dá například intenzita, barva, umístění a jeho směr. Pro účely práce je vyuţíváno bodové světlo (Point), hodnotu energie má nastavenou na 0.700, aby její ţár nebyl příliš velký a umělý. Barva je mírně zbarvena do ţluta, i kdyţ tento efekt je v Game Enginu patrný pouze minimálně. Stejně tak v Game Enginu v současné verzi Blenderu není moţné vytvořit stíny, čímţ scéna působí nereálně aţ uměle. Podobně málo reálně působí i textury na některých objektech.
3.3 Interaktivní průchod Průchod je moţné vytvořit několika způsoby. Je moţné vytvořit průchod bez zapojení uţivatele, tedy jako animaci, nebo se zapojením uţivatele, kde si sám volí průchod. Pro tuto práci, průchod galerií, je důleţité, aby si uţivatel mohl cestu a obrazy prohlíţet sám a nebyl odkázaný na předem definovanou cestu a zastávky u obrazů, které pro něj nebudou důleţité, ale mohl si naopak přečíst informace u obrazů, které ho zaujmou a bez povšimnutí projít kolem těch, které ho zajímat nebudou. Pro základní interaktivní průchod je moţné vyuţít Logic Editor, který je zabudovaný v samotném Blenderu jako jedno z editačních oken, nebo pro jeho rozšíření vyuţít moţnosti Pythonu. Pro správný a reálný pohled je ovšem nejdůleţitější předem dobře nastavit kameru. Měla by se co nejvíce přibliţovat skutečnému chování člověka. Proto by se měla nacházet v dostatečné výšce a neměla by procházet stěnou. 3.3.1
Nastavení kamery
Pro tvorbu takovýchto průchodů se vyuţívá připevnění kamery k jinému rodičovskému objektu, který přejímá dynamické vlastnosti (neprůchodnost jinými objekty, vyvolávání akcí na určitých bodech a podobně) oproti kameře, která Veškeré textury byly získány buď vlastním přičiněním, nebo jako zaregistrovaný uţivatel ze stránek http://www.cgtextures.com/ 5
Výsledky
34
zůstává vţdy statická. Ve hrách se obvykle jedná o nějakou postavu, v jednodušších aplikacích například o kvádr. V této práci se vyuţívá objekt Empty, který není vidět, takţe nebude překáţet ve výhledu a zároveň plní potřebné funkce. Nejprve je vytvořena kamera a prázdný objekt Empty, poté se klávesovou zkratkou Ctrl + P nastaví jako rodič kamery. Kamera musí být označena jako první, protoţe konečný objekt se vţdy stává rodičovským. Takový objekt pod sebou můţe mít i více „dětí“. Tímto postupem se vytvoří vztah, který zajistí při pohybu objektu Empty stejný pohyb kamery. Kameře je nastavena poţadovaná poloha oproti objektu Empty, a jak jiţ bylo zmíněno, jeho fyzické vlastnosti ponechány na Static. Naopak druhému objektu je nastavena fyzická vlastnost Dynamic, aby byly získány poţadované vlastnosti. Hlavní je nastavení hodnoty Radius na 4.5, která určuje vzdálenost, o kterou můţe těleso přistoupit k jinému tělesu. Pro zrušení rodičovského vztahu se vyuţívá Alt + P. 3.3.2
Logic Editor
Tvorba průchodu pomocí Logic Editoru probíhá za pomoci jiţ zmiňovaných senzorů, regulátorů a pohonů, které určují pohybové vlastnosti kamery. Tyto vlastní jsou však nastavovány objektu Empty nikoliv samotné Kameře. Kaţdou z „cihel“ je nutno vytvořit čtyřikrát. 4 senzory typu Keyboard, který nastavuje typ klávesy pro určitý pohyb (např. klávesnici up nebo down). Poté 4 regulátory typu And, které zajistí, ţe při zmáčknutí dané klávesnice nastanou určité akce. A 4 pohony nastavené na Motion, který bude určovat druh pohybu neboli danou akci na zmáčknutou klávesnici (klávesa up vyvolá pohyb vpřed). Tyto 3 „cihly“ jsou propojeny imaginárními dráty. Šipky up a down znázorňují pohyb kupředu a dozadu, tím ţe je v Motion nastavena hodnota X v políčku Loc na +/- 0.1, která tvoří přiměřenou vzdálenost pro pohyb kamery. Šipka left a right slouţí k otáčení po scéně. K docílení tohoto jevu je třeba nastavit hodnotu Y v políčku Rot na +/- 1°. I kdyţ je pohyb nastaven na pohyb po ose X, kamera se vţdy pohybuje směrem pohledu kamery, protoţe se nejedná o globální souřadnice, ale lokální. 3.3.3
Implementace pomocí Pythonu
Druhý způsob vytvoření průchodu je pomocí Python skriptů. Základy programovacího jazyku byly studovány například v (Lutz, 2003), (Pilgrim, 2010) a internetové dokumentace pro python v Blenderu (Blender Foundation, 2012a). Pro propojení skriptů a samotné kamery vyuţijeme moţnosti Logic Editoru, ve kterém je třeba nastavit senzor na typ Always, aby se nemuselo řešit propojování kaţdé klávesy. Při tomto nastavení se za kaţdých okolností provedou příkazy připravené ve skriptu. Nesmí se ale zapomenout zaškrtnout tlačítko „Positive
Výsledky
35
pulse“, které zajistí opakování ve frekvenci. Jedná se o první tlačítko nacházející se na druhém řádku. Kdyby toto tlačítko nebylo označeno na hodnotu TRUE, muselo by se tlačítko na klávesnici opakovaně mačkat. Za pomoci této funkce je moţné klávesu pouze drţet a posun kamery reaguje na impulzy z klávesnice nepřetrţitě aţ do jeho uvolnění. Poté musí být nastaven regulátor na typ Python, ve kterém je nutno změnit typ na modul a vypsat název modulu, který má být načten. V toto případě se jedná o pohyb.py, za který je nutno dopsat funkci, která má být spuštěna, tedy pohyb.main. Modul pohyb.py má následující podobu. Nejprve je nutno importovat potřebné moduly, které nám dovolí vyuţívat funkce Game Enginu. V tomto případě je potřebný pouze jeden modul a to bge, který funguje pouze při spuštění Game Enginu, není tedy moţné jej zkoušet metodou Run Script, kterou je moţné testovat syntaktickou a sémantickou správnost skriptu v textovém editoru přímo v Blenderu. Tento řádek, stejně jako tři následující, bude obsahovat i další modul mys.py. import bge Na začátku kaţdého skriptu je nezbytné funkci deklarovat. K tomu se vyuţívá označení def. Funkce dále obsahuje proměnou cont, která přejímá vlastnosti ze skriptu, jedná se o získání aktuálních ovladačů. A proměnnou cam, která reprezentuje samotný objekt, kterým je objekt Empty, i kdyţ bude fungovat jako pohyb kamery. def main(): cont = bge.logic.getCurrentController() cam = cont.owner Dále je nutné nastavit proměnou keyboard, která značí události způsobené klávesnicí. keyboard = bge.logic.keyboard.events Proměnná loc značí pohyb neboli vzdálenost, o který se kamera posune, jedná se tedy tzv. o rychlost kamery. Bylo by moţné vyuţít levé a pravé tlačítko pro rotaci. Tato funkce ovšem byla přiřazena myši, a proto klávesa left a right bude pouţita pro posun v bok. loc = 0.1 Metoda if vţdy kontroluje stisknutí určité klávesnice, a pokud je klávesa zmáčknuta (aktivní), je vyvolána následná reakce. V prvním případě u klávesy up a down se jedná o dosazení hodnoty proměnné loc, namísto Z hodnoty
Výsledky
36
v příkazu applyMovement, který o danou hodnotu posune objekt kupředu nebo vzad. Při aktivaci klávesnice left nebo right dojde k dosazení hodnoty proměnné loc na místo Y hodnoty ve stejném příkazu applyMovement, který způsobí posun doprava nebo doleva. if bge.logic.KX_INPUT_ACTIVE == keyboard[bge.events.UPARROWKEY]: cam.applyMovement((0, 0, -loc), True) if bge.logic.KX_INPUT_ACTIVE == keyboard[bge.events.DOWNARROWKEY]: cam.applyMovement((0, 0, loc), True) if bge.logic.KX_INPUT_ACTIVE == keyboard[bge.events.LEFTARROWKEY]: cam.applyMovement((-loc, 0, 0), True) if bge.logic.KX_INPUT_ACTIVE == keyboard[bge.events.RIGHTARROWKEY]: cam.applyMovement((loc, 0, 0), True) Celá funkce se uzavírá pomocí názvu funkce a uzavřených kulatých závorek (). Tento řádek se neuţívá, pokud je, stejně jako v našem případě, funkce volána z modulu, který přímo vyţaduje volání určité funkce. Pokud by modul řádek obsahoval, funkce by byla volána dvakrát. V případě modulu obr.py je tento řádek, ale nezbytný, protoţe je volán pouze skript nikoliv modul. Jak bylo jiţ zmíněno, pro otáčení pohledu a tedy i pro určení směru pohybu je vyuţit pohyb myši. Pro tuto potřebu je vytvořen modul nazvaný mys.py, který bude stejně jako předešlý modul spuštěn v logic brick přes regulátor typu Python. S tímto regulátorem bude ovšem propojen kromě senzoru Always i sensor Mouse, který bude mít sensor události nastavený na Movement a pozitivní puls frekvence nastaven na True. Spojením senzoru Always s nastaveným pozitivním pulsem na True a se stejným nastavením senzoru Mouse je docíleno pohybu kamery, i kdyţ se myš zastaví. A není tedy nutno myší neustále pohybovat. Opět jsou zopakovány první čtyři řádky předešlého modulu. Také je moţné importovat modul Rasterizer a vyuţít funkce showMouse(True), pokud bychom chtěli, aby byla myš na scéně viditelná. V této scéně by ovšem působila pouze jako rušivý prvek. Dále je třeba vytvořit sensor Mouse, aby bylo moţné sledovat pozici myši, která je uchovávána v proměnné pos. Tato pozice je dále vyuţívána, spolu se získanou hodnotou width (šířka obrazovky), ke kontrole, zda se kurzor nenachází na pozici, která uţ je určena pro otočení pohledu. Doprava bude pohled rotovat, pokud bude pozice na ose x větší neţ ¾ šířky obrazovky. Naopak doleva
Výsledky
37
se bude pohled otáčet, pokud bude pozice myši na ose x bude menší neţ ¼ šířky obrazovky. Otočení zajistí metoda applyRotation a kamera se vţdy otočí o velikost proměnné rot, která je nastavena na hodnotu 0.008 a nachází se ve funkci na pozici osy Y. sensor = cont.sensors[0] mouse = cont.sensors['Mouse'] pos = mouse.position width = bge.render.getWindowWidth() if (pos[0]<(width/4)): cam.applyRotation((0, rot, 0), True) if (pos[0]>(width-width/4)): cam.applyRotation((0, -rot, 0), True) Celkové propojení daných skriptů pro pohyb ve scéně je moţné vidět na následujícím obrázku.
Obr. 8: Propojení sensorů a regulátorů v Logic Bricks
3.4 Další Využití Pythonu Python byl vyuţit také pro záměnu obrazů či moţný výpis informací o daném obraze. Veškeré další procesy jsou zaloţeny na prvním modulu Pole.py, který při spuštění získá informace z předem definovaného textového souboru. Soubor je vytvářen v uţivatelském rozhraní pro správce, který bude blíţe rozebrán níţe. Z tohoto modulu jsou informace získávány pro načítání obrazů i výpis informací o obraze. Ve všech pouţitých modulech kromě obr.py je importován modul bge.
Výsledky
3.4.1
38
Načtení informací do pole (modul Pole)
Při spuštění tohoto modulu (Pole) se veškeré informace z textového souboru ukládají do seznamu nazvaného list, který je na konci skriptu vracen funkcí return pro pouţití v jiných modulech. Právě kvůli jeho volání v jiných modulech není nutné tento modul pouštět samostatně. Tímto postupem je aspoň zamezeno nechtěnému opakovanému načítání modulu, který spouštění přes sensor Always někdy způsobuje i přes vypnutý pozitivní puls. Nejprve se vytvoří nová funkce nazvaná „soubor“. Dále je otevřen daný soubor pro čtení, čehoţ je docíleno funkcí open. Získaný soubor je uloţen do proměnné file, aby se s ní mohlo dále pracovat. Celá tato procedura je ošetřena funkcí try a except, kdyby došlo k neočekávané chybě, při které by soubor neexistoval. Takový stav by ovšem nastat neměl, ale je moţné, ţe by jej uţivatel smazal sám, proto je třeba počítat i s touto variantou. V takovém případě by exe soubor naběhl nefunkční, neboli se starými obrazy a bez moţnosti zjištění informací. try: file = open(adresa,'r') except IOError: print ('neocekavana chyba') Následně je vytvořen nový prázdný seznam. Aby bylo jasně určeno, ţe se jedná o seznam, je do proměnné přiřazena prázdná dvojice hranatých závorek, které seznam znázorňují. Do tohoto seznamu je za pomoci funkce while postupně ukládán celý obsah souboru. Jedná se o první prázdný řádek, který rozděluje dané obrazy v souboru. Další řádek, cesta k obrazu typu jpg, je nejprve uloţena do pomocné proměnné, aby mohla být ořezána od posledního „bílého znaku“, který python načítá jako součást řetězce. V tuto chvíli by to bylo na obtíţ při hledání obrazu na dané adrese, která by s „bílými znaky“ neexistovala. A proto by textura nemohla být pouţita ve scéně jako obraz. Na dalších dvou řádcích souboru, které jsou načteny, jsou název obrazu a krátká informace o něm (např. rok vzniku nebo hlavní pointa), které se budou uţivateli zobrazovat při sledování obrazu. Jako poslední je do proměnné kod uloţen kód, který určuje propojení s danými pláty ve scéně připravenými pro načtení obrazů. Pro správné fungování je třeba, aby na konci souboru byl vţdy řádek obsahující mezeru, který je jiţ zařízen programem vytvořeným v programovacím jazyku Java. If not… break na kaţdém řádku ukončí pokračování v průchodu, pokud soubor dále nepokračuje. Proměnné je do seznamu vţdy potřeba uloţit pomocí funkce list.append s proměnnými, které má obsahovat. Pro správnou funkčnost je na konci ještě nutné odstranit poslední „bílý znak“ u kaţdého kódu a navýšit o jedničku hodnotu i.
Výsledky
39
list = [] i = 0 while 1: emp = file.readline() if not emp: break pom = file.readline() obr = pom[0:len(pom)-1] if not str: break nad = file.readline() if not nad: break text = file.readline() if not text: break kod = file.readline() if not kod: break list.append([obr, nad, text, kod]) list[i][3] =list[i][3][0:len(list[i][3])-1] i=i+1 Nakonec je třeba soubor uzavřít, a jak jiţ bylo zmíněno, vrátit konečnou hodnotu seznamu. file.close() return list 3.4.2
Načítání obrazů (modul Obr)
Tento modul je pouţit pro načtení obrazů v galerii při spuštění průchodu. Regulátor obsahující tento modul je opět spouštěn senzorem Always. Byl vytvořen v začátcích práce a při jeho tvorbě byl volán modul bpy. A zde nastává problém zjištěný aţ při dokončování práce. Kdyţ je modul bpy volán v runtime, neboli při spuštění exe souboru, chybová konzole hlásí, ţe modul nebyl nalezen. Důvodem je, ţe modul můţe být volán pouze v samotném Blenderu, je to jeho vnitřní modul, který nejde v externím Game Engine pouţít. Takový problém se dá následně řešit dvěma způsoby. Prvním je moţnost celý skript přepsat a nahradit kódem vytvořeným za pomoci modulu bge a GameLogic, který by vytvořil ze statických textur textury dynamické, které by bylo moţno měnit i za běhu programu. Tato moţnost ale nepřinesla výsledek, který je třeba. Proto byla zvolena varianta ponechání původního skriptu s vyuţíváním modulu bpy, i kdyţ to způsobí více starostí se správou programu samotnému správci. Protoţe bude nutné, aby ještě manuálně v samotném programu Blender aktualizoval obrazy a následně exe soubor přeuloţil na danou pozici. Ale při jeho zaučení by vše mělo probíhat bez problémů. Pokud se nebude drţet pokynů da-
Výsledky
40
ných při aktualizaci, je moţné, ţe dojde k selhání programu, na které ho program vytvořený v Javě upozorní. Zprávou: „Spouštěný soubor nebyl nalezen, zkontrolujte, zda existuje“. Pro správnou funkčnost, museli být pláty ve scéně předem správně nastaveny, důleţité je, aby měli správnou polohu a především rotaci. Pokud by neměly, je moţné, ţe by obraz po načtení visel „vzhůru nohama“ nebo bokem. Pro začátek je třeba importovat modul os, jiţ zmiňovaný modul bpy, ale také předem vytvořený modul Pole. Na začátku vytvořené metody je nastavena proměnná i na 0 a spustí se funkce while. Nejprve je třeba zrušit označení všech objektů, pokud jsou nějaké vybrané. Případně není nutné hlídat tuto skutečnost, byla vytvořena v době, kdy byla vyuţívána pro označování vybraných objektů funkce bpy.data.objects[obj].select = True, která ale musela být nahrazena funkcí na přímé nastavení na aktivní objekt. Dříve plnila svou úlohu bezchybně, ale po přidávání dalších funkcí a další práci i se samotnou scénou Blender, z doposud nezjistitelného důvodu, přestala fungovat, neboli fungovala správně, ale následné funkce, tedy nastavení textury na objekt, bylo vţdy prováděno pouze na aktivním prvku, nikoli na vybraném jako do dané chvíle. Proto byla funkce nahrazena funkcí context.scene.objects.active = data.objects[obj], která prvek daného jména nastaví přímo na aktivní a tím umoţní práci s ním. import bpy, Pole, os def obr(): i = 0 while i < len(Pole.soubor()): if (bpy.context.active_object.select == True): bpy.context.active_object.select = False bpy.context.scene.objects.active = bpy.data.objects[Pole.soubor()[i][3]] Aby bylo moţné na objekt nanést novou texturu, je nejprve nutné vymazat předešlé materiály. K tomu nám poslouţí funkce materiál_slot_remove(). Poté se nejprve zkontroluje, zda se na dané pozici nějaká cesta vůbec nachází, pokud ne pak je plát okamţitě funkcí bpy.context.object.hide_render = True nastaven na neviditelný. I takový objekt je neprůchozí, proto není moţné pláty umisťovat do prostoru. Jestliţe se na dané pozici v poli bude nacházet cesta k souboru a nebude vyhozena výjimka, která hlídá, zda obraz na dané adrese existuje, bude tento obraz uloţen do proměnné img. Pokud soubor existovat nebude, program „vyhodí“ chybové hlášení a plát skryje. bpy.ops.object.material_slot_remove()
Výsledky
41
if (Pole.soubor()[i][0] != ' '): bpy.context.object.hide_render = False path = os.path.expanduser(Pole.soubor()[i][0]) try: img = bpy.data.images.load(path) except: print('Cesta',Pole.soubor()[i][0],'nenalezena') bpy.context.object.hide_render = True Nyní je do proměnné tex vytvořena nová textura typu Image s názvem T. Následně je do textury přiřazen načtený obrázek. Předtím neţ bude textura nanesena, je nutné vytvořit materiál, v tomto případě nazvaný mat. Samotný Blender, při vytvoření dalšího nového materiálu přidává za název číslovku (mat.001), aby materiály odlišil. Dále přidá texturu k materiálu a nastaví texturu. Přenastaví mapování textury na UV a Flat. tex = bpy.data.textures.new('T', type = 'IMAGE') tex.image = img mat = bpy.data.materials.new('mat') mtex = mat.texture_slots.add() mtex.texture = tex mtex.texture_coords = 'UV' mtex.mapping = 'FLAT' Objekt je nezbytné přepnout do editačního reţimu, aby bylo moţné UV texturu přiřadit k objektu. Posléze je editační reţim opět potřebné vypnout přepnutím modu na objektový a materiál aktivovat. bpy.ops.object.mode_set(mode='EDIT') bpy.ops.uv.smart_project() bpy.ops.object.mode_set(mode='OBJECT') ob = bpy.context.object me = ob.data me.materials.append(mat) else: bpy.context.object.hide_render = True i=i+1 Pro tento skript byla čerpána inspirace v návodu (Blender Foundation, 2011b). Náhled na nanesenou texturu obrazu je moţné vidět v příloze C obr. 16 nebo v příloze B obr. 14. Při načítání obrazů je problém s nastavením velikosti plátu. Obraz by bylo moţno určovat podle jeho samotné velikosti nebo nějakým
Výsledky
42
jeho podílem. Problémem, ale je, ţe kaţdá fotografie nebo jinak získaná textura má při různých nastaveních jiné rozměry, nemluvě o změně fotoaparátu. Proto je velikost plátů neměnná a mění se pouze rozvrţení obrazu (na výšku nebo na šířku). 3.4.3
Informace o obraze (modul Text)
Kaţdý plát, na který má být nanesen obraz, musí mít přednastavenou vlastnost typu string na obr, díky kterému je později ray paprsek schopen určit objekty, u kterých se mají informace zobrazovat. Přesněji zobrazované informace určují název daného objektu. Tento modul musí být v Logic brick propojen hned se dvěma senzory, a to senzorem Ray, který je pojmenován ray. Přes tento název je později kontrolován jeho pohyb. Je nutno nastavit několik základních vlastností pro správné fungování. Zaprvé pozitivní puls frekvence na hodnotu True, typ rozpoznávání kolize na Prop, tedy rozpoznávání podle vlastností, a hodnotu vlastnosti nastavit na obr, tedy na vlastnost, kterou má přidané kaţdé plátno. Nakonec je třeba nastavit směr reakce paprsku na osuZ a vzdálenost na 12.000. Druhým sensorem je Always, který má opět nastavený pozitivní puls na hodnotu True. Pro tento modul bylo zkoušeno velké mnoţství různých metod, jak postupovat, kdyţ se chce docílit měnícího se textu. Nejlépe splňující a nakonec snad i nejjednodušší se ukázala být metoda na vytvoření dynamického textu, díky které lze lehce zobrazit v danou chvíli potřebný text.6 Protoţe je třeba vyuţívat informace ze souboru, importuje se modul Pole a s ním i modul bge, který je hned vyuţit při načtení aktuální scény. Za pomoci proměnné scene a funkce objects, která má v parametru název objektu, v tomto případě textu, čímţ je z tohoto objektu, vytvořen dynamický text, které je moţné měnit za běhu programu. Nadpis má nastavenou velikost na 0.7 a další popisek je nastaven na velikost 0.5. Oba mají nastavenou barvu na černou. Tyto textové objekty jsou pomocí rodičovské funkce (Ctrl + P) připojeny ke kameře a následně se budou nacházet neustále ve spodní části kamery neboli obrazovky. import bge, Pole scene = bge.logic.getCurrentScene() dynNad = scene.objects['TextNad'] dynNad.size = 0.4 dynNad.color = [0, 0, 0, 1] dynText = scene.objects['Text'] Skript byl inspirován videem dostupným na http://www.youtube.com/watch?v=XJloTwGmnU. 6
Výsledky
43
dynText.size = 0.3 dynNad.color = [0, 0, 0, 1] Počáteční postup se opět opakuje aţ do bodu, kdy do proměnné ray přiřadíme odkaz na senzor ray. Poté za pomoci funkce while, která hlídá, zda daná hodnota je menší neţ seznam informací, budeme kontrolovat, jestli je paprsek pozitivní. okud ano nastaví jméno objektu, se kterým proběhla kolize, do proměnné name. Ta slouţí k další kontrole a to zda se název rovná kódu některému z obrazů. Pokud zjistí shodu, vypíše název a popisek k danému obrazu na obrazovku. Po dobu, kdy ţádná shoda nebude nalezena, zůstává text „neviditelný“, neboli obsahuje řetězec s mezerou. Na konci opět navýší hodnotu proměnné určené pro kontrolu while a změnu pozice v seznamu. def main(): cont = bge.logic.getCurrentController() own = cont.owner ray = cont.sensors['ray'] i = 0 while (i
3.5 Export Pro vyexportování je třeba aktivovat v uţivatelském nastavení Blenderu funkci Save As Game Engine Runtime. Tato funkce se nachází v záloţce Addons. Ná-
Výsledky
44
sledně je moţné soubor vyexportovat prostřednictvím File -> Export -> Save As Game Engine Runtime. Export souboru je nutné provádět pod názvem Radnice.exe do sloţky s celým souborem kvůli načítání z hlavního menu, který cestu určuje z daného souboru, kde se sám nachází. Při tomto exportování často docházelo k chybám. Opětovaně byla na vině nenalezená textura v daném adresáři, která byla stále vyuţívána. Také je nutné pouţívané moduly vloţit do adresáře lib ve sloţce Python, který exportovaný soubor obsahuje.
3.6 Hlavní menu Pro vytvoření menu bylo sáhnuto po dalším programovacím jazyku a to Javě. Tvorba programu probíhala v prostředí open sorce programu Eclipse. Tento programovací jazyk byl pro tvorbu hlavního menu studován v (Herout, 2001) a ve webovém návodu (Oracle, 2011). Za pomoci programovacího jazyka Java bylo vytvořeno uţivatelské rozhraní, které obsahuje tři tlačítka pro moţné volby. Správce toto okno můţe vyuţívat ke správě galerie. Pokud chce měnit informace, musí se přihlásit. Protoţe výsledkem této práce není vytvořit perfektní zabezpečení přístupu, je ochrana pouze základní. Uţivatelské jméno a heslo je nastaveno napevno v kódu a lze jej změnit pouze opět v kódu. Defaultně je nastaveno na muzeum a RaDnIcE. Pro pozdější účely bude změněno. Po přihlášení můţe správce měnit samotné obrazy nebo informace o nich. Uţivatel si v něm můţe zapnout průchod galerií nebo si přečíst informace o daném programu. Tento program byl následně exportován jako samospustitelný runtime jar soubor. Vzhled hlavního menu a přihlašovacího okna je moţné vidět na obrázku níţe.
Obr. 9: Hlavní menu při spuštění programu a okno pro přihlašení
Výsledky
3.6.1
45
Spustit průchod
Toto tlačítko je napojeno na posluchač ActionListener, který načte a spustí daný průchod pomocí funkce Runtime.getRuntime().exec(adresaSouboru). Při jeho načtení se zobrazí také tabulka s informacemi pro uţivatele pro lepší orientaci v programu. Tabulka obsahuje informace jak se v průchodu pohybovat a jak funguje získávání informací o obraze. V neposlední řadě je uţivatel upozorněn, ţe načítání průchodu můţe nějakou dobu trvat, a proto mají chvilku vytrvat. Dále obsahuje tlačítko pro pokračování, které okno zavře a zobrazí se pouze průchod. Přesněji je vidět na obrázku níţe.
Obr. 10: Informace pro uživatele, při spouštění průchodu
3.6.2
Rozhraní pro správce
Při spuštění módu pro správce se automaticky načtou informace o obrazech ze souboru a uloţí se do pole pro pozdější úpravu. Pokud soubor nebude existovat, bude vytvořen nový obsahující pouze názvy umístění neboli kódů pro spojení s daným obrazem. Správci se objeví okno, které bude obsahovat celkem 6 tlačítek (Obr. 11). První je informační. Správce se zde můţe dozvědět, jak program funguje a jak dosáhne dané změny.
Výsledky
46
Obr. 11: Základní rozhraní pro správce
Dalšími tlačítky jsou „1. a 2. patro“. Při volbě jednoho z tlačítek určí, které patro se bude upravovat. V obou případech se objeví nová tabulka, která bude na levé straně obsahovat orientační plánek daného patra a na pravé straně záloţky s určitými místnostmi. V kaţdé záloţce se nachází tlačítko značící určité místo pro obraz na stěně v místnosti (Obr. 12).
Obr. 12: Okno určené pro výběr obrazu v dané místnosti
Při stisku libovolného tlačítka bude načteno editační okno daného obrazu (Obr. 13), způsobené volání funkce vratObraz(misto), která porovnává jednotlivé kódy obrazů s danými pozicemi neboli tlačítky v panelu metodou equels. Tento „editační mód“ obsahuje dvě textová pole pro moţnost vypsání názvu obrazu a popisku obrazu. Dále pole pro zobrazování obrazu a tlačítko, které umoţní načíst obraz jiný. Pokud soubor obsahoval nějaké informace (např. cestu k souboru nebo název), budou načteny. Pokud tyto informace neobsahoval, poloţky budou prázdné a připravené pro nové zadání.
Výsledky
47
Obr. 13: Editační okno a okno pro výběr nového obrazu
Tento editační mód obsahuje také tlačítko „Zavřít“ pro ukončení editoru a tlačítko „Ok“ pro uloţení změny do paměti. K tomu je vyuţita funkce nastavCestu, která získá hodnotu adresy načteného souboru, nastavNazev a nastavPopis, který ukládá hodnoty z textových polí. Správce později, na hlavním panelu pro správce, musí celkové úpravy uloţit tlačítkem „Uloţit“ ještě do souboru, ze kterého bude načítat informace samotný průchod. Tento dokument má danou strukturu, do které se nesmí zasahovat. Pokud se správce bude drţet pokynů při zaučení, neboli bude textový soubor spouštět pouze přes daný program, mělo by vše fungovat. Po uloţení změn je třeba dané obrazy do práce načíst. Bohuţel zatím nebyl zjištěn postup jak práci ulehčit. Proto musí manuálně přejít do daného souboru programu Blender a aktualizovat scénu za pomoci tlačítka start a nového exportu na předem určené místo (adresář Radnice v adresáři daného programu). Na základním panelu pro správce je připevněné tlačítko „Aktualizovat obrazy“, které ale spustí pouze program Blender. Ale protoţe nezvládne spustit 32 bitový blend soubor, musí si práci nakonec správce otevřít sám. Při zmáčknutí tohoto tlačítka se objeví dialogové okno s pokyny. Pro moţnost úpravy obrazů je třeba mít v počítači Blender 2.63a nainstalovaný. Poté můţe výsledek otestovat tlačítkem „Spustit“, které se také nachází na daném panelu. Toto tlačítko má stejnou funkci jako „Spustit průchod“ v hlavním menu.
Diskuze
48
4 Diskuze Blender je dobrý, ale zároveň velmi komplikovaný program. Jeho volná dostupnost zároveň sniţuje jeho dokonalost. Dá se říci, ţe Blender je často chybový program. V celé práci je uvedeno několik problémů, se kterými bylo třeba se vypořádat. Problémy se vyskytovaly při vytváření scény, objektů a v neposlední řadě i skriptů pro konečné fungování. Například při extrudování a jiných transformacích určitých pozic docházelo k špatnému vykreslování ploch. V některých případech dokonce docházelo k nevytvoření hrany. Tento problém doprovázel celý průběh práce. Další potíţ, která se vyskytla během tvorby, je spojená se spojováním sensorů a regulátorů. Při psaní skriptů program často hlásil, ţe není moţné nalézt daný modul, i kdyţ byl předtím nalezen a nikam nebyl odsunut. Častou příčinou bylo, ţe program bez známé příčiny změnil cesty a začal načítat moduly z jiného místa neţ do dané chvíle. Například místo stávajících modulů nacházejících se ve sloţce nainstalovaného programu Blender startup, začal vyuţívat moduly samotného programu, které byly napsány v textovém poli v rozhraní Blenderu.
4.1 Využitelnost a přínos Výstupem projektu je program, který umoţnuje průchod poličskou galerií v radnici. Vytvořený program je moţné vyuţívat v prostorách poličského muzea (Centra Bohuslava Martinu), pro které byl projekt vypracován, pro návštěvníky, kteří nechtějí procházet galerií osobně, ale rádi by zjistili, jaké to tam přibliţně je. Pokud by muzeum souhlasilo, mohl by být program umístěn i v jiných muzeích jiných měst, aby přilákal i zájemce z okolních měst. Po změně by bylo také moţné jej umístit na internetové stránky muzea, pro moţný přínos všem. Otázkou je, zda by byla při domácím načítání uţivatele zvládnuta grafická sloţitost projektu a scéna by nebyla příliš neprůchozí kvůli „lagování“. Jako lepší varianta pro rozšíření se jeví, uloţit samotný zazipovaný exe soubor s průchodem a dalšími potřebnými soubory (např. sloţka Python nebo soubor s textem), na internet pro moţné staţení uţivatelem. Velkým přínosem pro mě samotnou je úvod do samotné tvorby interaktivních aplikací v Blenderu a obecně a programování v Pythonu. Ráda bych se tomuto tématu nadále věnovala a ještě si rozšířila dané dovednosti.
Diskuze
49
4.2 Budoucí rozšíření Stěny budovy jsou modelovány i z venkovní strany, aby bylo moţné v budoucnu vyuţít i externí potenciál a dotvořit celé náměstí, případně i větší část města. Budova má několik zavřených místností, které pro hlavní účel nejsou důleţité, ale pro realističnost by bylo moţné je rozšířit (jedná se o prostory záchodů, přízemí a hlavní kaple). Celý projekt by se v budoucnu dal vyuţít pro tvorbu hry ve stylu „adventury“, která by přilákala mladé uţivatele k historii města, budovy samotné a popřípadě i větší části historického města.
4.3 Připomínky Game Engine zabudovaný v Blenderu, sice obsahuje dobré funkce, ale pro vytvoření reálné scény je graficky slabý. Pro lepší kvalitu by bylo proto lepší vyuţít nějakého externího programu, jako je například Unity, který má lepší grafické moţnosti. Bohuţel by při stálém komerčním pouţívání města byl nejspíše zpoplatněn. Scéna je graficky celkem rozsáhlá, a proto je lepší vyuţívat tento projekt spíše na počítačích se silnější počítačovou grafikou.
Závěr
50
5 Závěr Cíl bakalářské práce, kterým bylo vytvoření interaktivní aplikace, zaměřené na průchod galerií v Poličce s moţností výměny obrazů a informací o nich, byl splněn. Samotný dokument popisuje postup při tvorbě interaktivní aplikace za pomoci programu Blender a programovacích jazyků Python a Java. V první řadě seznamuje se základními pojmy a důvodem vybrání daného programu, zvoleného kvůli své volné dostupnosti a zabudovaným funkcím pro tvorbu interaktivity. Práce obsahuje také informace o historickém vývoji, uţivatelském prostředí a podrobnější popis jednotlivých funkcí programu Blender, vyuţívaných při práci. V teoretické části je nakonec uvedeno několik málo informací o programovacích jazycích Python a Java a o systému Game Engine, umoţňujícím interaktivitu s uţivatelem při procesu vykreslování. Ve výsledcích je přiblíţena problematika samotného vývoje. Od tvorby 3D grafického modelu radnice, jejích detailů a následného vyuţívání textur aţ k samotnému nastavení interaktivity. Interaktivity je docíleno vyuţitím nástroje Logic Brick, propojujícím grafickou stránku práce se skripty, vytvořené pomocí programovacího jazyku Python jakoţto součástí programu Blender a je tedy moţné skripty vytvářet přímo v jednom programu. Nejprve byla skripty vytvořena moţnost pohybu po scéně a následně i další funkce, jako jsou získávání informací ze souboru pro další práci, zobrazení daných obrazů ve scéně a načítání informací o nich při reakci s daným obrazem. Tuto část projektu je nutno vţdy exportovat do spustitelného souboru, který je dále spouštěn vytvořenou Java aplikací. Práce v této části popisuje jaké funkce má tato aplikace a obsahuje ukázku jejího vzhledu. Blender je sloţitější na zaučení a práci v něm, ale kdyţ se v něm uţivatel zorientuje a jeho funkce si osvojí, stává se z něj skutečně výkonný program. Jeho nevýhodou je jeho rychlý vývoj, a ţe se jedná o open source, který s kaţdým novým prvkem přináší jiné moţné chyby. Z tohoto i z jiných důvodů se kaţdý uţivatel musí smířit s chybami ať v grafické části nebo i té skriptovací.
Literatura
51
6 Literatura AUTODESK. Autodesk: 3ds Max [online]. 2013 [cit. 2013-04-13]. Dostupné z: http://usa.autodesk.com/3ds-max/ BLENDER3DCZ. Charakteristika programu Blender [online]. 2005 [cit. 201304-13]. Dostupné z: http://www.blender3d.cz/drupal/?q=charakteristika BLENDER FOUNDATION. Blender [online]. [cit. 2013-04-05]. Dostupné z: http://www.blender.org/ BLENDER FOUNDATION. Blender 2.63.0 - API documentation [online]. 2012a [cit. 2013-04-20]. Dostupné z: www.blender.org/documentation/ blender_python_api_2_63_release BLENDER FOUNDATION. History [online]. 2011a [cit. 2013-04-13]. Dostupné z: http://www.blender.org/blenderorg/blender-foundation/history/ BLENDER FOUNDATION. Introduction to Game Engine [online]. 2012b [cit. 2013-04-13]. Dostupné z: http://wiki.blender.org/index.php/Doc:2.6/ Manual/Game_Engine BLENDER FOUNDATION. Materials and textures: Textures [online]. 2011b [cit. 2013-04-12]. Dostupné z: http://wiki.blender.org/index.php/Dev:2.5/ Py/Scripts/Cookbook/Code_snippets/Materials_and_textures BLENDER FOUNDATION. Release Logs [online]. 2013 [cit. 2013-04-13]. Dostupné z: http://www.blender.org/development/release-logs/ CAD STUDIO. Autodesk 3ds Max a 3ds Max Design [online]. 2013 [cit. 201304-13]. Dostupné z: http://www.cadstudio.cz/3dsmax DIMENSIO. 3D shop: 3D Studio Max 2012 (3ds Max) [online]. 1996 - 2006 [cit. 2013-04-13]. Dostupné z: http://www.3dshop.cz/software/3d-studiomax-2012-3ds-max DIMENSIO. Rhinoceros. 2013. [online]. [cit. 2013-04-13]. Dostupné z: http://www.dimensio.cz/rhinoceros#videonavody HÖHL, Wolfgang. Interactive environments with open-source software: 3D walkthroughs and augmented reality for architects with Blender 2.43, DART 3.0 and ARToolKit 2.72. New York: Springer, 2009. ISBN 32-1179169-8. KOSINA, Pavel. Python - popis jazyka [online]. 2005 [cit. 2013-04-20]. Dostupné z: http://programujte.com/clanek/1970010106-python-popisjazyka/ LUTZ, Mark a David ASCHER. Naučte se Python. 1. vyd. Praha: Grada, 2003. ISBN 80-247-0367-x. MARTELLI, Alex, A. RAVENSCROFT a D. ASCHER. Python Cookbook. 2. vyd. O'Reilly Media, 2005. ISBN 0-596-00707-3. MCNEEL Robert & Associates. Rhinoceros. 2012. [online]. [cit. 2013-04-13] Dostupné z: www.rhino3d.com
Literatura
52
MIČKA, Pavel. Java pro začátečníky (1) - Úvod [online]. 2010 [cit. 2013-0420]. Dostupné z: http://www.algoritmy.net/article/21340/Uvod-1 ORACLE. Java™ Platform, Standard Edition 6: API Specification [online]. 1993 - 2011 [cit. 2013-04-20]. Dostupné z: http://docs.oracle.com/javase/ 6/docs/api/ PILGRIM, Mark. Ponořme se do Python(u) 3: Dive Into Python 3. Praha: CZ.NIC, 2010. ISBN 978-80-9042-2-1 POKORNÝ, Pavel. Blender- naučte se 3D grafiku. 2. aktual. a rozš. vyd. Praha: BEN – technická literatura, 2009. ISBN 978-80-7300-244-2 SLICK, Justin. 3D Defined – What is 3D?. 2013 [online]. [cit. 2013-05-16] Dostupné z: http://3d.about.com/od/3d-101-The-Basics/a/3d-Defined-WhatIs-3d.htm ŠLESOVÁ, Iveta. Interaktivní průchod scénou s využitím nástrojů Blender a Python. Brno, 2012. Bakalářská práce. Mendelova univerzita. ŠVEC, Jan. Létající cirkus: Python tutoriál [online]. 2003 [cit. 2013-04-03]. Dostupné z: http://ii.iinfo.cz/r/old/data/letajici_cirkus.pdf VOTRUBA, Ondřej. Polička: Barokní radnice [online]. 2005 [cit. 2013-04-17]. Dostupné z: http://www.policka.org/detail/85/o-meste/pamatky/Barokniradnice/ WARD, Jeff. What is a Game Engine? [online]. 2008 [cit. 2013-04-13]. Dostupné z: http://www.gamecareerguide.com/features/529/ what_is_a_game_.php WEBOPEDIA. Interactive. 2013 [online]. [Citováno 2013-04-13]. Dostupné z: http://www.webopedia.com/TERM/I/interactive.html ŢÁRA, Jiří, B. BENEŠ, J. SOCHOR a P. FELKEL. Moderní počítačová grafika. 2. přeprac. a rozš. vyd. Brno: Computer Press, 2004. ISBN 80-251-0454-0.
Přílohy
53
Přílohy
Tab. 1: Klávesové zkratky
54
A Tab. 1: Klávesové zkratky Klávesová zkratka
Funkce
Ctrl + S
Uloţení
0 (nula)
Pohled kamery
1, 3, 7 T, N F12 P Ctrl + Alt + Q A B Pravé tlačítko Tab Ctrl + Tab G S R X/ Delete W M E Alt + M F (Pravý Alt + F) Z Shift + D H/ Pravý Alt + H
Pohled zepředu, z boku, ze shora Zobrazování postranních panelů Render Spuštění Blender Game Zobrazení více náhledů 3D okna Označení/od označení všeho Obdélníkový výběr objektů Označování objektů Přepínání mezi módy Přepínání mezi vrcholy, hranami, plochami Přesun Změna rozměrů Rotace Odstranění vybraného Různé volby - rozdělení, sloučení, zaoblení,… Přesun do jiné vrstvy Extrudování (vytaţení dalšího vrcholu, hrany, plochy) Napojení extrudovaných vrcholů, hran, ploch Vytvoření plochy u hran a přemosťování u bodů Přepínání mezi zobrazením objektů (drátový, plošný) Duplikování Skrývání /Zobrazování objektů
Mód, ve kterém funguje Objektový, editační pro 3D okno O, E pro 3D okno
O, E O, E O, E Editační O, E O, E O, E O, E Editační Objektový Editační Editační Editační Editační O, E O, E
Radnice
55
B Radnice
Obr. 14: Místnost v radnici
Obr. 15: Druhé patro
Obrazy a popisky
56
C Obrazy a popisky
Obr. 16: Obraz na stěně
Obr. 17: Obraz s daným titulkem