Mendelova univerzita v Brně Provozně ekonomická fakulta
Simulace studijních agend pro operační systém Android Bakalářská práce
Vedoucí práce: Ing. Mgr. Jana Dannhoferová, Ph.D.
Brno 2014
Marek Musil
Děkuji Ing. Mgr. Jana Dannhoferové, Ph.D. za cenné rady, nápady a připomínky.
Prohlašuji, že jsem práci Simulace studijních agend pro operační systém Android vypracoval/a samostatně a veškeré použité prameny a informace uvádím v seznamu použité literatury. Souhlasím, aby moje práce byla zveřejněna v souladu s § 47b zákona č. 111/1998 Sb., o vysokých školách ve znění pozdějších předpisů a v souladu s platnou Směrnicí o zveřejňování vysokoškolských závěrečných prací. Jsem si vědom/a, že se na moji práci vztahuje zákon č. 121/2000 Sb., autorský zákon, a že Mendelova univerzita v Brně má právo na uzavření licenční smlouvy a užití této práce jako školního díla podle § 60 odst. 1 autorského zákona. Dále se zavazuji, že před sepsáním licenční smlouvy o využití díla jinou osobou (subjektem) si vyžádám písemné stanovisko univerzity, že předmětná licenční smlouva není v rozporu s oprávněnými zájmy univerzity, a zavazuji se uhradit případný příspěvek na úhradu nákladů spojených se vznikem díla, a to až do jejich skutečné výše.
V Brně dne 15. května 2014
................................................................
5
Abstract Musil, M. Simulation of study agenda for operating system Android. Bachelor thesis. Brno 2014. Bachelor thesis deals with simulation of study agenda for operating system Android made as an interactive passage through buidling Q of the Faculty of Business and Economics Mendel University. Given assignment is solved by using program 3D Studio Max for the model of building and program Unity for adding scripts. Purpose of this bachelor thesis is to facilitate navigation of new students in building.
Keywords Simulation of study agenda, Interactive passage, Android, Unity.
Abstrakt Musil, M. Simulace studijních agend pro operační systém Android. Bakalářská práce. Brno 2014. Práce se zabývá simulací studijních agend pro operační systém Android formou interaktivního průchodu z prostředí budovy Q Provozně ekonomické fakulty Mendelovy univerzity. Zvolené zadání je vyřešeno pomocí programu 3D Studio Max pro model budovy a programem Unity pro přidání skriptů. Účelem této práce je usnadnění navigace budovou novým studentům.
Klíčová slova Simulace studijních agend, interaktivní průchod, Android, Unity.
6
OBSAH
Obsah 1 Úvod a cíl práce 1.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Cíl práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Metodika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Přehled literatury 2.1 3D grafika a 3D 2.2 Android . . . . 2.3 Unity a Shiva . 2.4 Existující práce
8 8 8 8
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
10 10 10 11 11
3 Teoretický přehled 3.1 Android . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Architektura operačního systému Android . 3.1.2 Vývoj aplikací pro Android . . . . . . . . . 3.1.3 Android SDK . . . . . . . . . . . . . . . . . 3.2 3D grafika a 3D programy . . . . . . . . . . . . . . 3.2.1 3D Studio Max . . . . . . . . . . . . . . . . 3.2.2 Cinema 4D . . . . . . . . . . . . . . . . . . 3.2.3 Rhino 3D . . . . . . . . . . . . . . . . . . . 3.3 Analýza modelovacích nástrojů . . . . . . . . . . . 3.3.1 Polygonální modelování . . . . . . . . . . . 3.3.2 Uživatelské prostředí . . . . . . . . . . . . . 3.3.3 Texturování a export modelu . . . . . . . . 3.3.4 Dostupnost programů . . . . . . . . . . . . 3.3.5 Vyhodnocení analýzy 3D grafických nástrojů 3.4 Interakce s modelem . . . . . . . . . . . . . . . . . 3.4.1 Shiva . . . . . . . . . . . . . . . . . . . . . 3.4.2 Unity . . . . . . . . . . . . . . . . . . . . . 3.4.3 Vyhodnocení vhodnosti enginů k tématu . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
12 12 12 13 14 14 15 16 17 17 18 18 19 20 20 21 21 22 23
. . . . . . . . . .
25 25 26 27 27 28 30 31 32 33 35
programy . . . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
4 Vytvoření modelu a interakcí 4.1 Nástroje 3ds Max . . . . . . . . 4.1.1 Editable Poly . . . . . . 4.1.2 Modifikátory . . . . . . 4.2 Tvorba modelu . . . . . . . . . 4.2.1 Podlaha v přízemí . . . 4.2.2 Stěny budovy . . . . . . 4.2.3 Dveřní zárubeň . . . . . 4.2.4 Stůl . . . . . . . . . . . 4.2.5 Židle . . . . . . . . . . . 4.2.6 Export modelu do FBX
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
7
OBSAH
4.3 4.4 4.5 4.6 4.7
4.8
4.9
Ovládání a nástroje programu Unity . . Příprava projektu a scény . . . . . . . . Import modelu do Unity . . . . . . . . . Fyzikální model . . . . . . . . . . . . . . Interakce s modelem . . . . . . . . . . . 4.7.1 Pohyb postavy scénou . . . . . . 4.7.2 Ovládací prvky . . . . . . . . . . 4.7.3 Označení interaktivních prvků . . 4.7.4 Otevírání dveří . . . . . . . . . . 4.7.5 Výtah . . . . . . . . . . . . . . . 4.7.6 Nápojové automaty . . . . . . . . 4.7.7 Navigace . . . . . . . . . . . . . 4.7.8 Studijní agendy . . . . . . . . . . Přizpůsobení aplikace pro slabší zařízení 4.8.1 Occlusion Culling . . . . . . . . . 4.8.2 Lightmapping . . . . . . . . . . . Export a zpřístupnění v Google play . . 4.9.1 Nastavení v Unity pro export . . 4.9.2 Publikování v Google play . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
36 36 37 37 38 38 38 40 40 41 41 42 43 43 44 45 45 46 47
5 Závěr 48 5.1 Přínos práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.2 Problémy při řešení . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.3 Budoucí rozšíření . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6 Reference
50
Přílohy
52
A Snímky z výsledné aplikace
53
B DVD
55
1
ÚVOD A CÍL PRÁCE
1
8
Úvod a cíl práce
1.1
Úvod
V posledních letech došlo k velkému rozšíření mobilních přístrojů s operačním systémem a vytváření aplikací pro tyto zařízení představuje perspektivní obor. Spolu se zvyšujícím se výkonem procesorů a grafických akcelerátorů rostou i možnosti aplikací pro ně vyvíjené. To, co bylo ještě před několika lety považováno za poměrně výkonný domácí počítač, můžeme mít dnes stále dostupné v kapse. Spolu s hardwarovým pokrokem dochází také k prudkému vývoji softwaru a například oficiální distribuční služba pro operační systém Android eviduje více než 1 000 000 aplikací. K prosazení se v tomto nepřeberném množství aplikací je nutné uživatele zaujmout, k čemuž pomáhá využívání nejmodernějších technologií, originálních postupů a zajímavých myšlenek. Oblast vývoje mobilních aplikací představuje možnost uplatnění pro velké množství programátorů. V případě herních aplikací se nabízí způsob realizace pro programátory kreativně zaměřené, které příliš neláká programování například ve strojním průmyslu. Velkou vlnu zájmu zaznamenaly virtuální prohlídky a dle mého názoru dojde v budoucnu ke zvýšení zájmu o ryze interaktivní průchody. Tím je myšlena v podstatě herní aplikace z určitého prostředí, kde je možné plnit zadávané úkoly a prozkoumávat různé prostory. Tvorbou podobné aplikace se zabývá i tato bakalářská práce.
1.2
Cíl práce
Cílem práce je vytvoření aplikace pro simulaci studijních agend z prostředí budovy Provozně ekonomické fakulty (dále PEF) Mendelovy univerzity v programech 3D Studio Max a Unity 3D. Cílovou platformou této aplikace je operační systém Android. Interaktivní průchod bude umožňovat seznámení nových studentů PEF Mendelu s prostorami univerzity a aplikace bude uživatele motivovat k prohlídce skrze jednoduché úkoly, které si uživatel vybere z nabídky studijních agend. Důraz bude kladen na zábavnost průchodu s využitím principů běžně používaných při vývoji počítačových her.
1.3
Metodika
Práce na modelu budovy Q1 bude probíhat v programu 3D Studio Max. K vytvoření věrného modelu budou použity fotografie prostor fakulty a volně dostupné plány fakulty. V tomto programu proběhne taktéž přidání textur jednotlivým modelům, které budou získány jak jejich přímým zachycením pomocí fotoaparátu, tak vytvoře1
budova Provozně ekonomické fakulty Mendelovy univerzity.
1.3
Metodika
9
ním v programu Photoshop CS4. Výstupem z programu 3D Studio Max bude soubor AutoCAD FBX file2 . Veškeré skripty pro pohyb a interakce v aplikaci budou vytvářeny a přidávány k modelu v prostředí programu Unity. Množství běžně používaných skriptů je v tomto programu již připraveno k použití, avšak vlastní skripty budou psány v programovacích jazycích C# a Java Script. Výsledkem bude instalační soubor s koncovkou apk“, spustitelný pro Android ” 4.0 a vyšší. Při tvorbě celé aplikace bude kladen důraz na možnost spuštění aplikace i na přístrojích s nižším hardwarovým výkonem.
2
FBX(Filmbox) je otevřený formát, který umožňuje sdílení 3D modelů napříč aplikacemi.
2
PŘEHLED LITERATURY
2 2.1
10
Přehled literatury 3D grafika a 3D programy
Z pohledu literatury popisující grafiku obecně zmíním v první řadě knihu Moderní ” počítačová grafika“ (Žára, 2004) obsahující průřez metodami, které se používají v oblasti počítačové grafiky. Kniha popisuje samotnou tvorbu obrazu na základě jeho geometrického popisu nezávisle na tom, zda jsou popisované objekty dvourozměrné, nebo trojrozměrné. Dále se autor zabývá zobrazováním a úpravou obrazu. Kniha je rozdělena na dvě hlavní části, z nichž první se věnuje rovinné grafice, druhá část prostorové grafice, způsobům jejího zobrazování a technikám animace. Závěr knihy je věnován programátorům a popisuje výpočetní postupy používané v počítačové grafice. Z nepřeberného množství literatury dostupné pro program 3ds Max od společnosti Autodesk stojí za zmínku kniha Mistrovství 3ds Max“ (Kříž, 2010). Kniha ” umožňuje pohodlný vstup do světa 3D modelování a postupně krok za krokem vede k tvorbě složitějších scén co nejefektivněji. Jedná se o skutečně komplexní popis ovládání programu, tvorby základních i složitějších objektů, osvětlování, animování a dalších myslitelných činností v 3D grafice. Kniha vzhledem ke svému velkému rozsahu představuje dostatečný zdroj informací pro modelování zadaného úkolu v této bakalářské práci. U programu Cinema 4D je výběr z literatury výrazně užší, ovšem kniha Cinema ” 4D R10 – Praktický výukový kurz“ (Koenigsmarck, 2008) provede tvorbou 3D scén od počátku až ke složitějším scénám. Pro aktuální informace je taktéž možné využít internetové stránky společnosti Maxon (Maxon, 2014). Základy modelování v programu Rhinoceros lze pochopit z uživatelské příručky, která je překládána i do českého jazyka (R. McNeel & Associates, 2007). K aktuálním informacím se opět lze dostat skrze stránky společnosti R. McNeel & Associates (R. McNeel & Associates, 2014).
2.2
Android
Cílové zařízení je vhodné znát již před začátkem modelování a díky tomu přizpůsobit složitost modelů danému hardwaru. Kniha Hello, Android: Introducing Go” ogle’s Mobile Development Platform“ (Burnette, 2009) operační systém Android stručně představí, pomůže připravit počítač pro tvorbu aplikací a popíše základní principy programování pro Android. Nevýhodou veškeré literatury pro operační systém Android je rychlé zastarávání. Systém je v poměrně intenzivním vývoji a dochází rychlému vylepšování nejen 3D grafických schopností systému. Zde přichází na řadu webový zdroj od tvůrců systému (Google, 2014), kde lze nalézt veškeré potřebné informace, software development kit, zajímavé statistiky, návody a mnoho dalšího. Webová stránka je udržována aktuální a tvůrci informace doplňují s každou další verzí operačního systému Android.
2.3
Unity a Shiva
11
Další zajímavé stránky věnující se Androidu jsou Android-App-Market“ ” (Android-App-Market, 2012) a AndroidGuys“ (AndroidGuys, 2014), které se po” měrně podrobně zabývají architekturou a historií systému.
2.3
Unity a Shiva
Program Unity se může zdát na první pohled literaturou nedostatečně pokrytý, nicméně nejcennějším zdrojem informací v tomto případě je samotná dokumentace vytvořená autory enginu (Unity Technologies, 2014). Manuál vysvětluje základy programu, stavění scén, importování a používání vlastních modelů, základy tvorby hratelnosti, grafické možnosti enginu, export na různé platformy a často kladené dotazy. Pro používání Unity při vývoji aplikace zmíním publikaci Unity Game Deve” lopment Essentials“ (Goldstone, 2009). Tato kniha komplexně provádí programem Unity a popisuje téměř všechny jeho možnosti a funkce. V jedenácti kapitolách je probrána tvorba od nejjednodušších scén až po složité scény plné interaktivních prvků. Pro ukázku dalších aplikací v programu Unity lze zmínit Unity 3D Game ” Development by Example“ (Ryan, 2010), ve které je popsáno používání Unity na jednoduchých příkladech. Poměrně rozsáhlým a kvalitním zdrojem informací o programu Shiva je volně dostupná kniha Shando’s ShiVa Book“ (Shando, 2009) na stránkách společnosti ” Stonetrip, která stojí za tímto multiplatformním enginem (Stonetrip, 2014).
2.4
Existující práce
Cenným zdrojem informací jsou taktéž práce s podobným zaměřením. Zde představím bakalářskou práci Interaktivní průchod scénou s využitím nástrojů Blender ” a Python“ (Šlesová, 2012), kde autorka zpracovávala interaktivní průchod budovou Q. To umožní přesněji definovat vlastní cíle a dosáhnout lepšího výsledku jak z pohledu vizuálního, tak z pohledu samotného zážitku při průchodu budovou. Autorka v tomto případě používala k realizaci podobného zadání program Blender a programovací jazyk Python. Její aplikace představuje jednak zdroj informací, ale rovněž výsledek, který by aplikace tvořená v rámci této bakalářské práce měla překonat.
3
TEORETICKÝ PŘEHLED
3
12
Teoretický přehled
3.1
Android
Android je operační systém navržený pro mobilní dotyková zařízení typu telefony a tablety, nicméně nalezneme jej i v zařízeních jako jsou televize, navigace nebo dokonce hodinky. Systém je založen na linuxovém jádře, funguje nezávisle na použitém hardwaru a momentálně se jedná o nejrozšířenější mobilní platformu. K tomu přispívá zejména široká nabídka přístrojů od nejlevnějších až po nejdražší telefony a tablety. Android vznikl v roce 2003 a z počátku byl vyvíjen společností Android, Inc. Původním záměrem společnosti byl vývoj pokročilého operačního systému pro digitální fotoaparáty, avšak později došlo k přeorientování na operační systém pro telefony. V roce 2007 firmu i se systémem koupila společnost Google Inc., která ji vlastní dosud. Verze 1.0 byla vydána v září roku 2008 a zanedlouho přišel Android SDK3 umožňující programování aplikací pro tento operační systém. Systém je pravidelně updatován a každá nová verze nese název nějakého zákusku4 . Důležitá byla verze 1.5 Cupcake přinášející filozofii prostředí, které se Android drží dodnes. Dalším důležitým milníkem byla verze 2.3 Gingerbread, která ještě donedávna představovala nejrozšířenější verzi systému. U verze 3.0 Honeycomb, která byla určena pouze pro tablety, došlo k výraznému vylepšení 3D renderování a hardwarové akcelerace. Android 4.0 Ice Cream Sandwich verze pro mobilní telefony i tablety opět spojil do jedné. Aktuálně nejnovější verze Android 4.4 Kit Kat přináší zejména vylepšení zamykací obrazovky a zrychlení multitaskingu5 (AndroidGuys, 2014). 3.1.1
Architektura operačního systému Android
Android je pětivrstvý operační systém, každá z vrstev implementuje vlastní funkce a může spolupracovat s ostatními vrstvami (viz obrázek 1). Linux kernel, neboli linuxové jádro, tvoří nejnižší vrstvu operačního systému, která se stará o běh zařízení, řídí procesy a spravuje hardwarové prostředky. Použitá verze jádra je 2.6.XX (poslední dvě čísla se zpravidla mění s novější verzí). Jádro je po spuštění systému zavedeno do paměti RAM a od této chvíle přebírá řízení zařízení. Obsahuje základní hardwarové ovladače a tvoří tedy vrstvu mezi hardwarem zařízení a softwarem systému (Google, 2014). Vrstvou nad jádrem jsou knihovny (Libraries), které systému umožňují zpracovávat různé druhy dat. Mezi běžné knihovny na této úrovni patří například OpenGL pro zobrazení grafického obsahu na displeji, WebKit pro zobrazení HTML obsahu, nebo Media framework obsahující kodeky pro přehrávání multimediálních dat. 3
Android software development kit viz 3.1.3. např. Froyo, Gingerbread, Honeycomb. 5 Schopnost operačního systému provádět několik procesů současně. 4
3.1
Android
13
Obrázek 1: Jednotlivé vrstvy operačního systému Android, zdroj ??.
Ve vrstvě Android Runtime je umístěn Dalvik Virtual machine (DVM) a základní knihovny jazyka Java. DVM je typem Java Virtual Machine optimalizovaným pro nižší výpočetní výkon a prostředí s malou velikostí paměti. Umožňuje vytvoření více instancí Dalvik virtuálních zařízení pro aplikace, čímž zajišťuje bezpečnost, izolaci, paměťový management a podporu více vláken (Android-App-Market, 2012). Application Framework jsou softwarové struktury, se kterými aplikace přímo interaguje. Tyto programy ovládají primární funkce zařízení a pro vývojáře představují základní nástroje pro tvorbu aplikace (Android-App-Market, 2012). Aplikace jsou nejvyšší vrstvou architektury Android. Komunikují přímo s uživatelem zařízení a zajišťují tím jeho vstup do systému. Aplikace má dovoleno přistupovat k systémovým prostředkům na základě povolení uživatele. Mezi aplikace patří webový prohlížeč, SMS klient nebo například aplikace vytvářená v rámci této bakalářské práce (Android-App-Market, 2012). 3.1.2
Vývoj aplikací pro Android
Základním prvkem android aplikace jsou aplikační komponenty. Každá komponenta představuje vstup, kterým může operační systém ovlivňovat běh aplikace. Čtyři typy aplikačních komponent jsou: • Aktivity jsou základní stavební prvky uživatelského prostředí. Každá aktivita reprezentuje obrazovku s uživatelským rozhraní. Pokud se v uživatel přesune
3.2
3D grafika a 3D programy
14
do další obrazovky, je předchozí obrazovka umístěna do zásobníku LIFO6 . • Služby představují aplikační komponenty bez vlastního uživatelského rozhraní. Běží dlouhodobě na pozadí a nevyžadují interakci s uživatelem. Služba například může přehrávat hudbu na pozadí, ačkoli je aktuálně využívána jiná aplikace. • Dodavatelé obsahu umožňují sdílet data napříč aplikacemi. Pokud jsou na libovolné místo uložena data, aplikace s příslušným povolením může skrze dodavatelé obsahu k těmto datům přistupovat. • Broadcast receivery jsou komponenty, které odpovídají na systémové volání. Typickými broadcast zprávami systému jsou informace o zhasnutí displeje, slabé baterii, vypnuté Wi-Fi apod. Broadcast recievery nemají uživatelské rozhraní, ale mohou vytvářet notifikace pro oznamovací lištu (Google, 2014). 3.1.3
Android SDK
Android SDK obsahuje kompletní nástroje pro tvorbu aplikací na operační systém Android a balíček je ke stažení na stránkách www.developer.android.com. Obsahuje Eclipse s Android Developers Tools, nástroje Android SDK, nástroje pro platformu Android, nejnovější Android platformu a nástroje pro emulaci (Google, 2014). Po stažení je nutné zvolit komponenty, které budou využívány a provede se aktualizace případných zastaralých částí Android SDK.
3.2
3D grafika a 3D programy
3D grafika je speciální odvětvím počítačové grafiky, kde nás nezajímá umístění v dvourozměrné ploše, ale umístění v trojrozměrném prostoru. 3D grafika využívá vektorové grafiky a informace o jednotlivých bodech, popřípadě křivkách, ukládá v prostoru. Při renderování dochází k výpočtu 2D obrazu z prostorových dat 3D scény a tento proces je výpočetně velice náročný. Při 3D modelování těles se používají zejména dva základní způsoby modelování. Prvním je objemové modelování, u kterého se používají boolean operace7 nad primitivními tělesy. Tímto způsobem se zpravidla vytvářejí jednodušší modely, u kterých je navíc možné měnit pořadí objektů v boolean operacích. Druhým způsobem modelování je povrchové modelování, mezi jehož techniky patří NURBS8 , polygonální modelování a subdivision surfaces. Při modelování pomocí subdivision surfaces je povrch reprezentován menšími plochami, které například po aplikaci modifikátoru vytvoří hladký povrch. V práci bude nejčastěji použí6
Last in first out – první odchází poslední příchozí. Sjednocení, průnik, rozdíl. 8 Nonuniform rational B-Spline – modelování za pomocí polynomiálních křivek. 7
3.2
3D grafika a 3D programy
15
váno polygonální modelování, a proto bude preferován program specializující se na tuto oblast (Kříž, 2010). V této kapitole se zaměřím na některé z používaných 3D programů a vyhodnotím jejich vhodnost k vytváření modelu budovy. Ze samotného principu je možné dosáhnout podobných výsledků ve všech programech, a proto do tohoto vyhodnocení taktéž zasáhnou mé vlastní preference. Mezi analyzované 3D programy jsem zařadil 3D Studio Max, Rhino 3D a Cinema 4D. 3.2.1
3D Studio Max
3D Studio Max (dále 3ds Max) je komplexní program umožňující modelování objektů, přiřazení textur, nasvícení scény, animaci, rendering a post-process9 efekty. Jedná se o jeden z nejpopulárnějších 3D programů a je vyvíjen společností Autodesk, který mimo jiné stojí i za 3D programem Maya. 3ds Max se používá ve všech odvětvích zabývajících se 3D grafikou. Za zmínku stojí například vizualizace, vývoj her nebo filmové efekty. Mezi dostupné způsoby modelování v programu 3ds Maxu patří modelování s primitivními tělesy a boolean operace nad nimi, polygonální modelování a modelování pomocí NURBS. Ve výše zmíněném polygonálním modelování se 3ds Max řadí mezi špičku v 3D programech. Modely je možné upravovat taktéž značným množstvím modifikátorů. Součástí 3ds Maxu je editor materiálů pro vytváření materiálů a texturování. Na výběr jsou předem definované materiály, popřípadě je možné vytvářet materiály zcela nové (Autodesk, 2014).
Obrázek 2: Prostředí programu 3ds Max.
Program obsahuje několik druhů světel pro co nejvíce realistické nasvícení scény. Dostupná jsou zde světla bodová, směrová a globální. Světla mají řadu nastavení, 9
Dodatečné úpravy renderovaného obrázku.
3.2
3D grafika a 3D programy
16
mezi které patří intenzita, dosah, plocha světla, typ generovaných stínů nebo atmosferické efekty. 3ds Max podporuje různé renderovací moduly. Výchozí je Scanline renderer, který dostačuje k základní vizualizaci modelovaného objektu. Standardně dostupný je také pokročilý renderovací modul Mental Ray, který využívá mimo jiné algoritmy Ray tracing10 a Global illumination11 . S modulem Mental Ray je možné vytvářet fotorealistické vizualizace, ovšem jeho použití je vykoupeno velkým množstvím nastavení a poměrně pomalým výpočtem výsledného obrazu. 3.2.2
Cinema 4D
Cinema 4D je 3D program firmy Maxon zaměřený na procedurální a polygonální modelování. Umožňuje kompletní tvorbu scény včetně materiálů, animace, nasvícení a výsledného renderingu. Z hlediska modelování se podobá programu 3ds Max, neboť objekty jsou vytvářeny parametricky a v případě potřeby tvorby složitějších tvarů je možné tyto objekty převést na polygonální síť, popřípadě aplikovat příslušné modifikátory. Stejně jako v 3ds Maxu se u objektů tvořených polygony upravují body, hrany nebo polygony, na které se aplikují dostupné funkce.
Obrázek 3: Prostředí programu Cinema 4D.
Cinema 4D má modifikovatelné prostředí, ve kterém si uživatel může přizpůsobit jak jméno nabídky, tak její umístění. V programu je také možné přiřazovat materiály, osvětlovat, animovat a skrze poměrně výkonné renderery vytvářet konečné vizualizace (Koenigsmarck, 2008). 10
Metoda sledování paprsků směrem od pozorovatele k objektu a ke světelnému zdroji. Algoritmy simulující šíření světla scénou a vypočítávající odrazy nebo lomy paprsků (Žára, 2004). 11
3.3
Analýza modelovacích nástrojů
3.2.3
17
Rhino 3D
Rhino 3D (nebo Rhinoceros) je program pro tvorbu 3D grafiky s hlavním zaměřením na NURBS modelování. Program je přeložen do velkého množství jazyků včetně češtiny a těší se díky tomu velké oblibě při výuce 3D grafiky. Rhino 3D je vyvíjeno společností McNeel & Associates a jeho cena je nižší než u konkurenčního softwaru.
Obrázek 4: Prostředí programu Rhino 3D.
Hlavní specializací programu je NURBS modelování a plochy jsou tedy definovány matematicky. Polygony jsou využívány pouze při exportu, díky čemuž může být Rhino efektivnější pro tvorbu některých typů objektů. Mezi hlavní domény programu patří tvorba, analýza, úprava a export NURBS křivek. Rhino je známé podporou obrovského množství formátů, které je možné importovat či exportovat, a z hlediska kompatibility s ostatními programy dosahuje uspokojivých výsledků. Obsažen je také editor materiálů, jehož ovládání je poměrně jednoduché a vhodné pro začátečníky. Standardní renderer taktéž nedosahuje kvalit konkurence, ale to lze vyřešit zásuvnými moduly pro fotorealistický vzhled (R. McNeel & Associates, 2007).
3.3
Analýza modelovacích nástrojů
Pro analýzu modelovacích nástrojů jsem zvolil tyto kritéria: • polygonální modelování, • uživatelské prostředí, • texturování a export, • dostupnost programu.
3.3
Analýza modelovacích nástrojů
18
Kritérium v podobě polygonálního modelování jsem zvolil z důvodu jeho vhodnosti k danému tématu. Objekty, u kterých by bylo možné těžit například z použití NURBS křivek, nebudou v práci použity. Uživatelské prostředí je hodnoceno z hlediska možností přizpůsobení, přehlednosti a jednoduchosti ovládání. Texturování je hodnoceno z pohledu jednoduchosti postupu, rychlosti dosažení výsledků, ale i z pohledu komplexnosti možností. Export je vyhodnocen nejenom v závislosti na počtu podporovaných formátů, ale také na bezproblémovém importu do programu Unity. Hodnocena je přesnost vymodelovaných objektů, ale i korektnost namapovaných textur. Dostupnost programu je hodnocena jak z pohledu běžné ceny programu, tak z pohledu možnosti získání zkušební verze, případně verze pro studenty. Z běžných vlastností nejsou zahrnuty možnosti nasvětlení, neboť to bude řešeno až v prostředí herního enginu. Verze analyzovaných programů jsou 3ds Max 2013, Rhino 5 SR8, Cinema 4D R15. 3.3.1
Polygonální modelování
V případě 3ds Max je polygonální modelování hlavní doménou programu. Z tohoto hlediska se jedná o etalon a ostatní programy se zpravidla snaží o podobný přístup. U objektů lze po převedení na polygonální síť upravovat body, hrany a polygony. Cinema 4D je z hlediska přístupu k polygonálnímu modelování velice podobné až téměř stejné jako v 3ds Maxu. Opět je možnost upravovat polygony v podobjektu bod, hrana a polygon. Rhino 3D je program silně přizpůsoben pro modelování pomocí křivek. Polygonální modelování v tomto programu je velice omezené a komplikované. 3.3.2
Uživatelské prostředí
Hodnoceno je uživatelské prostředí programů ve výchozím stavu. Většina nabídek ve všech programech je upravitelná a prostředí zpravidla lze lépe uzpůsobit konkrétním požadavkům. 3ds Max je na první pohled poměrně přehledný. V levém horním rohu se nachází logo 3ds Maxu, které slouží pro práci se souborem. Skrze toto tlačítko se provádí vytvoření nové scény, otevření souboru, uložení, import, export atd. K těmto funkcím je ale možné přistupovat také skrze tlačítka umístěná v nejvrchnější části programu. Dále je zde umístěna nabídka nástrojů, ovládání pohledů, nabídka pro vytváření objektů, modifikátory, animační nástroje, nastavení renderingu, nastavení programu, nabídka MAXScript a nápověda. Důležité funkce mají vyvedeny ovládací tlačítka pod hlavní nabídku a poměrně příjemné je jich menší množství. V pravé části se nachází okno pro tvorbu objektů, tvarů, osvětlení apod.
3.3
Analýza modelovacích nástrojů
19
Rozložení jednotlivých pohledů je možné měnit a přizpůsobovat aktuálním potřebám. Taktéž lze měnit pro každý pohled metodu stínování a vykreslování objektů. Spodní část je věnována animačním nástrojům, ovládání úchopu objektů a ovládání pohledů. Uživatelské prostředí je z mého pohledu velice příjemné a přehledné, neboť málo používané funkce nemají zbytečně vyvedeny tlačítka do hlavního okna. Cinema 4D je program z pohledu uživatelského prostředí na první pohled poměrně blízky 3ds Maxu. V horní části je tradičně umístěna hlavní nabídka pro práci se souborem, úpravy, vytváření objektů, výběr nástrojů, nastavení programu, animaci, rendering, kreslení do povrchu, ovládání postav, nabídka pluginů, skriptování, nastavení okna a nápověda. Běžně používané nástroje mají tlačítka pod hlavní nabídkou a tlačítka pro práci s objektem jsou na levé stráně. V pravé horní části je okno zobrazující hierarchie objektů ve scéně. V pravé spodní části je umístěno okno s nastavením aktuálně používaného objektu (popřípadě nastavení materiálu, modifikátoru apod.). Dolní část je rozdělena mezi editor materiálů a nástroje pro animaci. Náhledy na scénu jsou plně nastavitelné jejich rozmístění se dá měnit. Poměrně příjemná je podpora gest myší pro změnu velikosti jednotlivých náhledu. Rhino 3D se ve vzhledu i rozmístění nabídek silně liší. V menu na levé straně jsou umístěny nástroje pro tvorbu křivek a těles a nástroje pro jejich modifikaci jako například rozdělení, prodloužení, změna počtu bodů apod. Některá tlačítka skrývají další nástroje, ke kterým se lze dostat skrze malý trojúhelník v jejich pravém dolním rohu. Horní nabídka se používá pro práci se souborem, pro úpravy objektu, nastavení pohledů, modelovací nástroje, nastavení renderování, volby program a nápovědu. Velké množství nabídek je suplováno tlačítky umístěnými v různých částech programu, nicméně i přesto mně ovládání programu přišlo pomalé a neintuitivní. Pod horní nabídkou se nachází okno konzole, do kterého se zadávají parametry při modelování, popřípadě se zde mohou psát přímo příkazy pro ovládání programu. Pod konzolí se nachází karty, které mění rozložení nabídek rozložení tlačítek v programu a je zde možné zvolit například nástroje pro tvorbu ploch. Po nimi je umístěno značné množství tlačítek pro modelování, tvorbu osvětlení apod. V pravé části se nachází okno pro modifikaci aktuálně označeného objektu, editaci vrstev, zobrazení atd. Pohledy je možné modifikovat a v tomto ohledu program nijak nevybočuje ze standardu. 3.3.3
Texturování a export modelu
3ds Max obsahuje velmi propracovaný editor materiálů, který umožňuje volit rozličné vlastnosti od těch základních jako je odrazivost a průhlednost, až po nastavení chování materiálu při různých směrech světla. Na výběr je široká nabídka připrave-
3.3
Analýza modelovacích nástrojů
20
ných materiálů (zejména pro renderer Mental Ray), které lze upravit podle vlastních potřeb. 3ds Max příliš nenadchne množstvím exportních formátů, avšak vzhledem k jeho popularitě je poměrně široce podporován. Unity umožňuje import modelů jak ve vlastním formátu 3ds Maxu, tak například skrze formát FBX. Textury jsou po importu správně namapované a z tohoto pohledu programu není co vytknout. Cinema 4D obsahuje editor materiálů, který umožňuje vše zmíněné u programu 3ds Max a přes množství voleb je poměrně přehledný. Při exportu jsem narazil na problém demoverze programu Cinema 4D. Modely není možné ukládat a z tohoto důvodu jsem nemohl vyhodnotit spolupráci s programem Unity. Rhino 3D obsahuje z analyzovaných programů nejméně propracované nástroje pro volbu materiálů. Materiál se volí pod vlastnostmi objektu na záložce Materiál a jeho uživatelské rozhraní je poměrně přehledné a jednoduché. U materiálu lze volit lesk, odrazivost, průhlednost, texturu, drsnost a vyzařovanou barvu. Na další záložce je možné měnit mapování textury. Podporováno je obrovské množství exportních formátů a z tohoto hlediska jsem neshledal žádné problémy. Při využití formátu COLLADA12 , proběhl import do Unity zcela bez problému. 3.3.4
Dostupnost programů
3ds Max je s cenou komerční licence 120 000 Kč (včetně DPH) nejdražší z analyzovaných programů. Pro studenty je dostupná nejnovější neomezená verze zcela zdarma, ovšem licence zcela logicky nedovoluje komerční použití softwaru. Po registraci na stránkách a vyplnění údajů o univerzitě je možné mimo jiné stahovat i přibližně 40 dalších programů od společnosti Autodesk (Autodesk, 2014). Cinema 4D v neomezené verzi stojí téměř 100 000 Kč (včetně DPH). K dispozici jsou i odlehčené verze s cenovkou přibližně 25 000 Kč, základní studentská nebo učitelská verze zdarma a rozšířená studentská verze za 5 000 Kč (Maxon, 2014). Rhino 3D patří s cenou komerční verze za přibližně 32 000 Kč (včetně DPh) k nejlevnějším 3D nástrojům na trhu. Studentskou verzi je možné koupit za 6 000 Kč a lze ji užívat i komerčně. V současné době není možné získat Rhino 3D zdarma (R. McNeel & Associates, 2014). 3.3.5
Vyhodnocení analýzy 3D grafických nástrojů
Jak bylo zmíněno dříve, ve všech programech by bylo možné dosáhnout stejných výsledků, nicméně některé z nich jsou pro dosažení určitých výsledků efektivnější. V oblasti polygonálního modelování vítězí programy 3ds Max a Cinema 4D vzhledem k faktu, že princip modelování i rychlost jsou téměř totožné. 12
Collaborative design activity je formát pro uložení 3D scén a animací založený na XML.
3.4
21
Interakce s modelem
V ovládání z mého pohledu vítězí 3ds Max s programem Cinema 4D. U Rhina 3D je dle mého názoru kladen zbytečně velký důraz na obsažení tlačítka téměř každé funkce v hlavním okně. Nabídky se navíc pro každou kartu mění, a proto není jednoduché naučit se program ovládat zpaměti. V oblasti texturování je opět jasným vítězem 3ds Max. Demoverze programu Cinema 4D obsahuje poměrně výkonný editor materiálů, avšak v rámci této analýzy jsem nemohl vyzkoušet kvalitu exportovaného modelu s texturami. Rhino 3D obsahuje poměrně jednoduchý editor materiálů a exportované modely jsou v pořádku. Z hlediska dostupnosti je rozdíl v přístupu jednotlivých firem k licencování softwaru. Ačkoli 3ds Max je nejdražší z analyzovaných programů, je v neomezené podobě (mimo komerční použití) dostupný pro studenty. Z tohoto pohledu se tedy jedná i přes nejvyšší cenu o vítěze. Nejlevnější neomezená verze programu z trojce je Rhino 3D, ale z osobního hlediska jej nepovažuji jako vítěze v poměru cena za výkon. V tomto poměru považuji za nejlepší program Cinema 4D. Vlastnosti analyzovaných programů jsou shrnuty v tabulce 1. Tabulka 1: Srovnání 3D programů 3ds Max, Cinema 4D a Rhino 3D (plný počet bodů je 5 = nejlepší)
3ds Max Polygonální modelování Uživatelské prostředí Texturování a export Dostupnost programu
3.4
5 4 5 5
Cinema 4D 5 4 3 3
Rhino 3D 2 3 3 4
Interakce s modelem
Pro interakci s modelem jsem se rozhodl využít multiplatformní engine. To je vhodné vzhledem k cílové platformě tvořené aplikace, neboť toto řešení umožňuje pohodlný vývoj a testování na osobním počítači s následným exportem pro operační systém Android. Na trhu je dostupné poměrně značné množství multiplatformních enginů pro vývoj her, nicméně ne všechny jsou vhodné pro 3D interaktivní aplikace a taktéž ne všechny jsou dostupné zdarma. Z tohoto důvodu se výběr zúžil pouze na enginy Shiva a Unity. Původně měl být do srovnání zařazen i Infernal Engine, avšak ten se v posledních měsících potýká s nedostupnými webovými stránkami a celkovým úpadkem zájmu. 3.4.1
Shiva
Mottem tvůrců je v překladu Vyvíjej jednou, publikuj všude“. Program je vyvíjen ” francouzským studiem Stonetrip od roku 2005. Podporováno je celkem 16 platforem jako například populární Android, Wii, Mac, PC, PS3, ale i méně populární platformy jako je Bada nebo Marmalade. Podle vyjádření autorů je důležité podporovat
3.4
Interakce s modelem
22
co nejvíce platforem včetně těch méně používaných, neboť i ty můžou představovat zajímavý trh.
Obrázek 5: Vývojové prostředí programu Shiva.
Shiva obsahuje editor pro vytváření krajiny, oceánů a animací. V editoru je možné vytvářet a modifikovat objekty, materiály nebo vytvářet částice. Editor pracuje na principu WYSIWYG13 . Skripty pro vlastní aplikace je možné psát v programovacím jazyce Lua a využíván je fyzikální engine ODE14 (Shando, 2009). 3.4.2
Unity
Unity je multiplatformní vývojové prostředí a engine vyvíjený společností Unity Technologies od roku 2005. Jádro systému je psáno v programovacím jazyce C++ a vývojové prostředí v jazyce C#. Podporované jsou běžně používané platformy jako je PC, Mac, Linux, Android, Wii, PS3, iOS atd. Editor umožňuje vytváření krajin, vegetace, vodních ploch, objektů, materiálů, částicových efektů, animací a mnoho dalšího. Unity má přibližně 2 000 000 registrovaných uživatelů, čímž se řadí mezi enginy s největší uživatelskou základnou. Jedná se o nástroj vhodný jak pro profesionální studia, tak pro začátečníky teprve pronikající do oblasti vývoje her. V současné době je aktuální verze Unity 4, ovšem nejpozději v roce 2015 se očekává verze Unity 5 slibující vylepšení téměř všech aspektů enginu a přinášející podporu dalších platforem (Unity Technologies, 2014). 13 14
What you see is what you get, v překladu co vidíš, to dostaneš Open Dynamics Engine je pokročilý fyzikální engine.
3.4
Interakce s modelem
23
Obrázek 6: Vývojové prostředí programu Unity.
3.4.3
Vyhodnocení vhodnosti enginů k tématu
Z osobního zde hlediska vyhodnotím uživatelskou přívětivost, tedy zejména jednoduchost ovládání a možnosti přizpůsobení programu. Dalším hodnoceným aspektem je pokrytí daného programu literaturou, případně dokumentací od vývojářů. Rovněž jsou důležité vizuální schopnosti enginu, neboť aplikace by měla zaujmout i po grafické stránce. Z hlediska mé práce je důležitá spolupráce enginů s 3D grafickými programy a bezchybnost importovaného modelu. Nezanedbatelnou položkou je cena, která se u programů liší podle verze. V obou případech je dominantní okno s náhledem scény a nabídky je možné umístit libovolně dle uvážení uživatele. Prostředí je rozdílné, ale oboje vyniká v přehlednosti. V obou případech je ovšem nutný jistý čas pro osvojení si ovládání programu. Pokrytí literaturou není ideální ani v jednom případě. Základy v programu Shiva poměrně dobře popisuje kniha Shando’s ShiVa Book“ (Shando, 2009). Zajímavých ” knih o programu Unity je více a za zmínku stojí Unity 3D Game Development ” by Example“ (Ryan, 2010). Dokumentaci k programu Unity považuji za výrazně obsáhlejší a kvalitnější zdroj informací. Přestože Unity nepatří v grafických schopnostech ke špičce mezi enginy, program Shiva překonává ve všech ohledech. Unity obsahuje více možností grafických postprocess efektů a umožňuje použití textur ve vyšším rozlišení. Shiva spolupracuje s ostatními 3D programy skrze formát COLLADA, který některé 3D programy podporují pouze skrze přídavný plugin. Unity spolupracuje s obrovským množstvím 3D programů a jen zřídka jsem narazil formát, který by program nebyl schopen importovat. Jediná výtka směřuje k občasným výpadkům některých objektů při velmi rozsáhlé scéně. Program Shiva je dostupný zdarma, ale exportovat aplikaci na Android v zá-
3.4
24
Interakce s modelem
Obrázek 7: Přírodní scenérie v programu Unity.
kladní verzi neumožňuje (až od verze Basic za 400 dolarů), zatímco Unity tuto funkcionalitu má již v základní verzi. Plná verze programu Shiva stojí momentálně 1 000 dolarů, plná verze Unity 1 500 dolarů a dalších 1 500 dolarů neomezené nástroje pro Android (Stonetrip, 2014). Z tohoto pohledu je Unity výrazně dražší, nicméně ve verzi zdarma nabízí mnohem větší množství možností. Vlastnosti obou programů pro vývoj her jsou shrnuty v tabulce 2. Tabulka 2: Srovnání enginů Unity a Shiva (plný počet bodů je 5 = nejlepší)
Unity Shiva Uživatelská přívětivost 4 4 Literatura 3 2 Grafické schopnosti 4 3 Spolupráce s 3D prog. 5 3 Dostupnost programu 3 3 V tomto srovnání vítězí Unity, a proto jsem se rozhodl využít tento program pro bakalářskou práci. Oba výše zmíněné nástroje dosahují vysokých kvalit, umožňují vývoj špičkových her a výběrem jakéhokoli z nich nelze udělat chybu. Unity poněkud překonává program Shiva v celkové robustnosti a funkcích, které jsou jednoduše dostupné. K robustnosti programu také přispívá obrovská uživatelská základna, která vytváří velké množství stáhnutelného obsahu a ulehčuje tím práci nejenom začínajícím programátorům.
4
VYTVOŘENÍ MODELU A INTERAKCÍ
4
25
Vytvoření modelu a interakcí
Pro vytvoření modelu byl vybrán program 3ds Max, který je zcela univerzální a umožňuje vytvářet jakékoli 3D scény. Zejména je výhodná bezproblémová spolupráce s Unity, neboť 3ds Max je v oblasti 3D grafiky brán jako základ a programy s ním zpravidla dobře spolupracují. Pro implementaci interakcí s modelem byl zvolen program Unity z důvodů uvedených v předchozí kapitole. Hlavní přednosti programu je jednoduchý export na různé platformy, neboť uživatel se stará pouze o výběr platformy a program export na zvolenou platformu zajistí téměř sám. Unity podporuje nejnovější technologie a má kapacitu pro tvorbu vizuálně atraktivních her. Základní verze je zdarma, avšak v závěrečné části tvorby bakalářské práce jsem využil plnou verzi programu v trial15 verzi na 30 dní. V následujících částech bude popsán program 3ds Max, tvorba modelu a jeho import do Unity s následnou implementaci interakcí, přípravou aplikace pro publikaci a samotné zveřejnění aplikace na Google play.
4.1
Nástroje 3ds Max
Pro vlastní práci je důležité představit základní ovládací prvky a nástroje programu 3ds Max. Zahrnuty jsou pouze nástroje, které jsem v práci běžně používal.
Obrázek 8: Uživatelské prostředí programu 3ds Max.
Hlavní nabídky programu jsou umístěné na panelu v podobě textu, ale nejpoužívanější funkce programu mají vyvedené tlačítka na lištu pod hlavní nabídkou. Důležité nástroje jsou: 15
Zkušební verze programu neobsahující zpravidla omezení.
4.1
Nástroje 3ds Max
26
• Select and Link provede provázání označených objektů s objektem zvoleným přetažením odkazu. Všemi označenými objekty lze poté pohybovat pomocí objektu, ke kterému jsou přidruženy. • Select Object přepne kurzor myši do výběru objektů a poté je možné vybírat objekty bez rizika jejich posunu, nebo otočení. • Select and Move slouží k označení objektu a pohybu s ním. Kliknutím pravým tlačítkem myši lze vybrat umístění v prostoru zadáním souřadnic. • Select and Rotate je používán k označení objektu a rotaci. Stejně jako v předchozím případě je možné pravým tlačítkem myši objektem rotovat pomocí souřadnic. • Select and Uniform Scale umožňuje měnit velikost označeného objektu ve všech osách zároveň, nebo jednotlivě. Pravým myši se otevře nabídka, do které lze zadat velikost procentuálně. • Mirror slouží k zrcadlení objektu podle vybrané osy. Objekty lze zrcadlit jako kopie, instance, nebo odkazy na původní objekt. • Material Editor otevře nabídku materiálů, kde je možné vytvářet materiály, popřípadě používat ty předdefinované od tvůrců programu. • Render Setup otevře nabídku pro nastavení renderování. Je možné zde měnit renderer, rozlišení výsledného obrazu, post-process efekty a mnoho dalšího. V pravě části se nachází menu pro tvorbu objektů. Z nepřeberného množství voleb jsou důležité tlačítka Create a Modify. Create umožňuje tvorbu objektů, tvarů, světel, kamer, pomocníků, sil a systémů. Důležitá je zejména tvorba objektů, ve které lze pomocí rolovacího menu vybírat typy objektů (Standard Primitives, Extended Primitives, Particle Systems atd.) Ve spodní části je umístěna časová osa pro tvorbu animací a pravý dolní roh obsahuje tlačítka pro ovládání pohledů. Důležité je zejména tlačítko se šipkou pro zvětšení aktuálně používaného pohledu přes celou obrazovku. 4.1.1
Editable Poly
V této části se zaměřím na popis základních funkcí při převodu objektu na Editable Poly. Převodem na editovatelný objekt ztrácíme možnost měnit základní parametry objektu jako je výška, šířka, délka nebo počet jednotlivých segmentů. Převod objektu je nevratný, avšak rozměry i počty segmentů se dají nahradit nástroji, které Editable Poly obsahuje. Převod se provádí kliknutím pravým tlačítkem myši na objekt a výběrem Editable Poly z nabídky Convert To. Editable Poly umožňuje volbu z podbjektů bod, hrana a polygon, které obsahují své specifické nástroje používané při modelování. Mezi nástroje často používané při tvorbě modelu budovy patří:
4.2
Tvorba modelu
27
• Extrude je nástroj, který vytáhne označené polygony požadovaným směrem. Má několik podvoleb, kde Group vytahuje označené plochy stejným směrem a zachovává jejich původní křivky, Local Normal vytahuje každou plochu podle její vlastní normály a By Polygon jako jediný nezachovává celistvost vytahovaných ploch a zároveň vytahuje každou plochu zvlášť podle její normály. • Weld a Target Weld umožňuje spojení více bodů do jednoho (vzdálenost účinku je možné nastavit). Target Weld umožňuje spojit dva konkrétní body dle výběru do jednoho a tato funkce je vhodná při snižování složitosti objektů. • Cut umožňuje řezat hrany do polygonů a vytvářet tím nové hrany. Používá se pro vytvoření určitého složitějšího tvaru, popřípadě pokud potřebujeme vytvořit polygon jiného tvaru, než má výchozí polygon. • Inset vytvoří uvnitř polygonu nový polygon stejného tvaru, ze kterého se vycházelo. • Connect vytvoří propojení dvou hran. • Cap v režimu podobjektu hrana vytvoří plochu, kterou označená hrana ohraničuje. • Chamfer je využíván v režimu podobjektu hrana a bod pro přidání detailů. Rozděluje hrany na dvě, popřípadě na okraji objektů vytvoří zkosení. 4.1.2
Modifikátory
V práci jsou používány pouze modifikátory Symmetry, UVW Map a Shell. Symmetry umožňuje zrcadlení objektu podle libovolné osy. Využívá se při modelování symetrických objektů, které by bylo obtížné vymodelovat klasickou úpravou polygonů z obou stran. UVW Map se používá pro mapování textur. Výhodou je, že spolupracuje s editorem materiálů 3ds Maxu a namapování textury se uchová i po exportu modelu. Shell vytvoří povrch inverzní k původnímu a zajistí propojení nově vzniklého povrchu s původním skrze další přidané plochy. Původní plocha díky tomuto modifikátoru získá hloubku.
4.2
Tvorba modelu
V následující kapitole si popíšeme tvorbu modelu a jeho texturování. Vzhledem k rozsáhlosti celého modelu není možné zahrnout popis veškerých vytvořených objektů, a proto se zaměřím zejména na ty významné, které se v budově vyskytují ve větším množství nebo jsou z pohledu modelování zajímavé. Dále je nutné zmínit, že vzhledem k celkovému rozsahu budovy a omezenému hardwarovému výkonu mobilních zařízení, je model budovy značně zjednodušen. Například stůl, který je v kompletním modelu použit na mnoha místech, nemůže
4.2
Tvorba modelu
28
obsahovat příliš mnoho polygonů, neboť by například v přízemí mohl působit propady v plynulosti aplikace na slabších zařízeních. Abych byl schopen vytvořit proporcionálně správný model budovy, rozhodl jsem se vytvářet všechny modely s ohledem na reálné rozměry v metrech. 4.2.1
Podlaha v přízemí
Nejvhodnějším postupem pro tvorbu podlahy budovy je pohled shora. Z tohoto pohledu jsem si vytvořil objekt Plane, kterému jsem přidělil texturu s plánem prvního patra. Model jsem začal vytvářet od podlahy v přízemí, ve které bylo nutné vytvořit otvory na schodiště, segment pro nádvoří a otvor na výtah. Podle tohoto plánu jsem vytvořil objekt Box o šířce 86 m, délce 71 m, výšce 0,5 m a jednom segmentu na všech stranách. Objektu jsem odstranil spodní stěnu a aplikoval modifikátor Symmetry. Díky tomu se objekt bude zrcadlit a není nutné modelovat všechny otvory ze spodní i horní strany. Aby bylo možné podlahu upravovat na úrovni polygonů, převedl jsem objekt na Editable Poly. K vyznačení nových polygonů jsem použil nástroj Cut. Při používání tohoto nástroje je vhodné vycházet z existujících hran, jinak mohou vznikat nežádané polygony komplikující další tvorbu modelu. Rovněž je správné modelovat nejdříve zásadní tvary a až následně doplňovat detaily. Při vytváření objektu pomocí plánu je vhodné nastavit modelovanému objektu průhlednost. To se uskuteční kliknutím pravým tlačítkem na objekt a volbou Object Properties. Zde v sekci Display Properties je nutné povolit See-Through. Nejdříve jsem vytvořil obrys nádvoří uprostřed budovy Q, které sice tvarově z podlahy nevystupuje, ale následně zde bude použita odlišná textura. To proběhlo nástrojem Cut, se kterým jsem nejdříve vyznačil bod z existující hrany a následně pomocí plánu vytvořil nové hrany. Stejným způsobem vznikl otvor v podlaze pro schodiště do dalších pater i otvor pro výtah. Nově vzniklé polygony jsou červeně vyznačeny na obrázku 9. Polygony pro obě schodiště a šachtu výtahu jsem vytáhl
Obrázek 9: Nově vzniklé polygony v podlaze (červeně zvýrazněny).
4.2
Tvorba modelu
29
pomocí nástroje Extrude směrem ke spodní straně podlahy o 0,5 m, čímž vznikl tunel v podlaze. Z pohledu modelování je po tomto kroku podlaha hotová a je možné začít mapovat textury. Základem je vytvoření materiálu přes Material Editor umístěný v horní liště. Zde jsem vybral volný materiál a poklepáním na čtverec vedle volby barvy materiálu (Diffuse) se otevře nabídka materiálů. Pro výběr vlastní textury slouží první položka Bitmap z rolovacího menu Standard. Poté již stačí vybrat z disku soubor s texturou16 . Soubor obsahuje texturu pro jednu dlaždici a je tedy nutné nastavit opakování textury. To jsem provedl nastavením Tilling U na 80 a Tilling V na 72. Stejným způsobem jsem vytvořil materiál pro venkovní prostor uprostřed budovy, kde se nachází o něco světlejší dlaždice. Přidělení materiálu se provádí tlačítkem Assign Material to Selection, které provede přiřazení materiálu právě označenému objektu. Pokud je třeba přiřadit materiál pouze určitému polygonu, lze to provést označením daného polygonu v podobjektu polygon a stiskem tlačítka Assign Material to Selection. Tímto způsobem jsem dosáhl přiřazení obou materiálů jednomu objektu, ovšem dále je nutné správně namapovat textury na objekt. K tomu je určen modifikátor UVW Map, u kterého jsem nastavil Mapping na Box, délku 80 m, šířku 72 m a výšku 1 m. Modifikátor se postará o korektní zobrazení obou textur, které ačkoli nejsou aplikovány na stejně velkou plochu, zobrazují se jakoby obě pokrývaly celý objekt (dlaždice venku i vevnitř mají stejnou velikost).
Obrázek 10: Hotová podlaha s aplikovaným materiálem včetně nastavení modifikátoru UVW Map.
Podlahy ostatních pater se od podlahy v přízemí liší, avšak z pohledu modelování jsou využívány stejné nástroje. Výsledná podlaha přízemí je znázorněna na obrázku 10 včetně okna s modifikátory. 16
Podporována je většina rastrových formátů jako je JPEG, TIFF, BMP, PNG, ale i některé video formáty (AVI, MOV, MPEG).
4.2
Tvorba modelu
4.2.2
30
Stěny budovy
Předem je nutné zmínit, že všechny stěny nebudou vytvářeny jako jeden objekt, ale budou rozděleny, aby nevytvářely příliš velké a složité celky. Stěna oddělující záchody od hlavní chodby a studijního oddělení vznikala z objektu Box. Tomu jsem zadal výšku 3,1 m, šířku 0,3 m a délku podle nejdelší části stěny, kterou jsem modeloval. Všechny strany obsahují pouze jeden segment, aby stěnu bylo možné co nejsnadněji modifikovat. Jeden okraj objektu jsem umístil na konec stěny předlohy a druhý okraj před dveře dámských záchodů. Objekt jsem převedl na Editable Poly dříve zmíněným způsobem. Abych ve stěně vytvořil prostor pro umístění dveří, vybral jsem podobjekt polygon a zvolil boční hraniční polygon od zamýšlených dveří. Pomocí nástroje Extrude jsem tento polygon vytáhl o 1,1 m a vytvořil tím nové segmenty. Opětovným použitím nástroje Extrude jsem stejným způsobem vytáhl stěnu až po hranici dveří na pánské záchody. Nyní jsem vybral všechny polygony tvořící 1,1 m širokou část a smazal je. Nově vzniklé neuzavřené hrany na okrajích smazané části je nutné uzavřít, což jsem provedl přepnutím do výběru podobjektu hrana a použitím nástroje Cap. Výsledek po těchto krocích je zobrazen na obrázku 11.
Obrázek 11: Modelovaná stěna po vytvoření mezery na dveře.
Tento postup jsem opakoval pro vytvoření mezery na dveře od pánských záchodů. Změnu směru stěny o 90° jsem prováděl dvěma způsoby: • pomocí Cut byla vytvořena hrana 30 cm od okraje stěny a na nový byl polygon použit Extrude. • pomocí Extrude byla prodloužena stávající stěna o 30 cm. V tomto případě vzniknou nepotřebné body i z opačné strany stěny, avšak ty lze jednoduše odstranit funkcí Target Weld. V obou případech další modelování probíhá stejným způsobem, jakým jsem stěny tvořil dosud. Celek jsem zpravidla ukončil v případě spojení konce s původní
4.2
Tvorba modelu
31
začátkem objektu (viz obrázek 12). Tímto způsobem byla vytvořena většina stěn budovy.
Obrázek 12: Jeden dokončený celek stěny v budově.
4.2.3
Dveřní zárubeň
Model dveřní zárubně, se skládá ze dvou částí. V horní části je umístěno průhledné sklo a ve spodní, větší části, samotné dveře. Jako základní objekt jsem zvolil Box o délce 1,2 m, šířce 0,15 m a výšce 3,1 m. Každá strana se skládá pouze z jednoho segmentu, neboť případné další potřebné segmenty lze doplnit po převedení objektu na Editable Poly. Protože dveřní zárubeň je symetrická, aplikoval jsem na ni modifikátor Symmetry. Následně jsem smazal zadní stěnu zárubně a z přední strany pomocí Inset vytvořil dva nové polygony, jejichž okrajové body jsem přesunul tak, abych vystihl zamýšlený tvar dveřní zárubně a okna nad ní (obrázek 13).
Obrázek 13: Dveřní zárubeň po použití funkce Inset pro vytvoření nových polygonů.
4.2
Tvorba modelu
32
Poté jsem použil funkci Extrude k vytažení obou nově vzniklých ploch směrem k zadní straně zárubně a tyto plochy jsem po tomto kroku smazal, aby bylo možné zárubní procházet. Pomocí funkce Inset jsem v horní části vytvořil nový polygon, jehož zúžením jsem dosáhl zamýšlené tloušťky skla. K vytažení tohoto polygonu jsem opět použil funkci Extrude. Vzhledem k faktu, že zárubeň bude sloužit i pro otevíratelné dveře, nebyly dveře vytvořeny jako součást tohoto objektu. Výsledný model je na obrázku 14.
Obrázek 14: Hotová dveřní zárubeň po aplikaci základních materiálů.
4.2.4
Stůl
Jako výchozí objekt při vytváření modelu stolu jsem zvolil válec s poloměrem 0,5 m, výškou 0,025 m, jedním segmentem na výšku, jedním segmentem na podstavách a 8 stranami. Nízký počet stran jsem zvolil zejména z důvodu co nejnižší náročnosti tohoto objektu, neboť se ve scéně bude vyskytovat mnohokrát. Abych mohl objekt upravovat na úrovni polygonů, převedl jsem těleso na Editable Poly. Po výběru podobjektu polygon jsem pomocí funkce Inset vytvořil v podstavě nový polygon. Vzhledem k tomu, že jsem se snažil model vytvořit co nejméně složitý, vybral jsem podobjekt bod a sloučil výsledné body funkcí Target Weld tak, aby nově vzniklý polygon měl trojúhelníkový tvar (znázorněno na obrázku 15). Následně jsem se opět vrátil do výběru podobjektu polygon a pomocí funkce Extrude vytáhl polygon směrem dolů, čímž vznikla středová noha stolu. Abych středovou nohu zakončil trojnožkou podle reálné předlohy, aplikoval jsem funkci Extrude podruhé, ovšem v tomto případě jsem vytvořil segmenty pouze 0,04 m vysoké. Tyto nové segmenty jsem nechal označené a po opětovné aplikaci funkce Extrude (nyní By Polygon) vzniknou tři samostatné nohy. V poslední fázi jsem označil koncové body jednotlivých noh a posunul je nástrojem Select and Move o přibližně 10 cm níže.
4.2
Tvorba modelu
33
Obrázek 15: Nově vzniklý polygon v podstavě válce po aplikaci funkce Target Weld.
Výsledný model je znázorněn na obrázku 16. Na objekt nebyl aplikován žádný vyhlazovací modifikátor (například Meshsmooth) z již zmíněných výkonových důvodů.
Obrázek 16: Hotový model stolu.
4.2.5
Židle
Model židle jsem začal vytvářet pomocí krychle se stranou 0,6 m a koule upravené nástrojem Select and Uniform Scale. Rozmístění objektů je zobrazeno na obrázku 17. Na tyto objekty jsem aplikoval Boolean operaci rozdíl, kterou lze nalézt na kartě Create v Compound Objects z rolovacího menu. Při označeném objektu krychle jsem pomocí tlačítka Pick Operand B vybral kouli a zvolil operaci Subtraction (A-B). Tím se provede odečet koule od krychle a ta část krychle, která se protíná s koulí, se odstraní. Krychli jsem dále převedl
4.2
Tvorba modelu
34
Obrázek 17: Rozmístění objektů krychle a koule před boolean operací.
na Editable Poly a odstranil všechny strany krychle nedotčené operací rozdíl (viz obrázek 18).
Obrázek 18: Stěny krychle označené ke smazání.
Tímto krokem vznikl plášť části koule, který se nacházel v krychli. Tento plášť jsem z poloviny označil v podobjektu polygon a smazal. Pro zrcadlení zbylé poloviny jsem použil modifikátor Symmetry. Dále jsem označil jeden z polygonů v zadní části, ve kterém by se měl nacházet otvor a pomocí funkce Inset jsem vložil nový polygon, který jsem smazal. Okrajové body polygonu jsem v podobjektu bod umístil tak, aby tvořili přibližný kruh. Následně došlo k úpravě mnoha bodů tak, aby se výsledek podobal předloze. Přidání bodů do přední části jsem prováděl pomocí funkce Chamfer v podobjektu bod. Pokud vzniklo více bodů, než bylo potřeba, odstranil jsem je nástrojem Target Weld. Na závěr vytváření modelu židle jsem vytvořil pomocí Cut ze
4.2
Tvorba modelu
35
spodní části modelu trojúhelníkové polygony, které jsem nástrojem Extrude vytáhl, čímž vznikly nohy židle. Aktuálně vytvořený model obsahuje pouze jednostranný povrch, který je z jedné strany průhledný, a proto jsem na závěr použil modifikátor Shell. Výsledný model po aplikaci materiálů je na obrázku 19.
Obrázek 19: Hotový model židle.
Tento model se nenachází ve všech částech budovy, neboť obsahuje poměrně velké množství polygonů a například v učebnách byl nahrazen modelem jednodušším. 4.2.6
Export modelu do FBX
Před exportem modelu je nutné zkontrolovat veškeré objekty, zda jsou řádně uzavřeny. Na některé problémy upozorní 3ds Max a pokud jakýkoli objekt nebyl správně vytvořen, nebude možné ho korektně importovat do Unity. Doporučuji po vytvoření modelu, který bude v budově využíván na mnoha místech, vyzkoušet export do FBX, aby nebylo nutné model opravovat v mnoha výskytech. Popřípadě lze problém s mnohačetným výskytem řešit vytvářením kopií objektů jako instance výchozího objektu17 . Pokud je poté provedena jakákoli úprava objektu, ovlivní se tím i všechny další výskyty daného objektu. Export se provádí výběrem z horní nabídky Logo → Export. Z nabízených formátů jsem vybral FBX, který je ve velké míře podporován 3D softwarem. Po klepnutí na tlačítko Save se zobrazí nastavení exportu. K ideální spolupráci s programem Unity doporučuji zvolit verzi FBX 2012 na kartě Advanced Options. Export textur modelu se provede zaškrtnutím Embed Media na kartě Include. Animace, světla a kamery není nutné exportovat, neboť jejich tvorba bude probíhat v programu Unity. 17
V 3ds Max lze vybrat z nabídky pro vytvoření kopie.
4.3
Ovládání a nástroje programu Unity
4.3
36
Ovládání a nástroje programu Unity
Hlavní nabídka programu je umístěna na panelu v horní části okna. File slouží pro práci se soubory projektu a scény, popřípadě pro export aplikace. Výběr Build Settings provede otevření nabídky pro export aplikace. Zde se provádí nastavení cílové platformy, přidávání scén do exportované aplikace a volba z několika nabídek lišících se podle platformy. Klepnutím na tlačítko Player Settings se v okně Inspector zobrazí podrobné nastavení pro jednotlivé platformy. Edit obsahuje řadu voleb z nichž nejdůležitější jsou Preferences pro nastavení programu a Project Settings s několika podnabídkami, které se vztahují k nastavení ovládání, zvuku, času18 , fyziky a grafických detailů. Nabídka Assets slouží pro práci se stavebními prvky aplikace. Pokud se provede například import modelu do prostředí, je tento model označen jako Asset. Přetažením Assetu do scény se vytvoří instance daného Assetu. Zde je možné vytvářet například skripty, materiály, animace, popřípadě importovat a exportovat Assety. GameObject se používá pro tvorbu různých objektů jako jsou primitivní tělesa, světla, kamery atd. Obsahuje také volbu pro zarovnání náhledu scény s ohledem na označený objekt. Component umožňuje přidávání komponent scény objektům v aplikaci. Pokud je například třeba přidat fyzikální model označenému tělesu, je možné to provést skrze Component → Physics → Box Collider. Terrrain obsahuje řadu nástrojů pro tvorbu a texturování krajiny. Také jsou zde umístěny nástroje pro tvorbu vegetace jako jsou stromy, keře a trávy. Skrze nabídku Window je možné zobrazit různá okna používaná v Unity. Důležitá okna jsou Inspector pro zobrazení a úpravu informací nebo skriptů vztahujících se k označeném objektu, Scene pro hlavní pohled na scénu při tvorbě, Game zobrazující pohled na hru z pohledu hlavní kamery, okno Project obsahující souborovou hierarchii projektu, Profiler pro aktuální využití hardwarových prostředků. Dále jsou zde umístěné nástroje Lightmapping, Occlusion Culling a Navigation, kterými se budu zabývat v dalších částech. Help obsahuje odkaz na manuál programu, odkaz na fórum, informace o programu, licenci atd.
4.4
Příprava projektu a scény
V Unity jsou odlišeny projekty a scény. Projekt může obsahovat mnoho scén, které sdílejí importované Assety projektu. Při práci na scénách je vhodné pamatovat, že úprava Assetu v jedné scéně ovlivní jeho výskyty ve všech dalších scénách. Pokud změním tedy texturu Assetu, je na změnu nahlíženo globálně z pohledu projektu. Nový se projekt se vytváří skrze File → New Project. Při vytváření projektu je možné zahrnout Assety, z nichž běžně používané jsou Standard Assets (Mobile) pro ovládací prvky na dotyková zařízení, Character Controller pro ovládací rozhraní při 18
Čas pro opakované volání skriptů a rychlosti aplikace.
4.5
Import modelu do Unity
37
testování v editoru, Image Effects pro vizuální post-process efekty a Skyboxes pro předpřipravené oblohy. V následujícím kroku je vhodné scénu uložit a před importem modelu provést nastavení některých parametrů scény. V nastavení Edit → Render Settings je možné nastavit Skybox 19 scény. Klepnutím na Skybox Material jsem provedl výběr Skyboxu západu slunce.
4.5
Import modelu do Unity
V nově připraveném prostředí je možné začít vyvíjet aplikaci. Vytvořený model lze do Unity importovat skrze nabídku Assets v horní liště. Pomocí Import New Asset se provede vyhledání modelu na disku a jeho následný import. Po importu se model objeví v okně Project a lze mu nastavovat řadu voleb. U modelu budovy jsem povolil Use File Units pro použití původních měrných jednotek modelu a zakázal Generate Colliders. Důvody k tomuto kroku budou zmíněny v sekci 4.6. Dále jsem využil funkce Generate Lightmap UVs pro generování UV souřadnic pro lightmapy. Import Materials zajistí načtení materiálů modelů a v případě problémů je možné změnit Material Naming na Model Name + Model’s Material.
4.6
Fyzikální model
Fyzikální model Unity může vytvořit ihned po importu modelu budovy povolením položky Generate Colliders. Tato volba vytvoří automaticky každému objektu modelu Mesh Collider, neboli fyzikální reprezentaci stejného tvaru, jakou má těleso. Vzhledem k množství objektů ve scéně a faktu, že zmíněné Mesh Collidery jsou výpočetně velmi náročné, není vhodné generovat fyzikální model automaticky. Například pro stůl a k němu umístěné židle jsem čtyři poměrně složité Mesh Collidery nahradil jedním Sphere Colliderem, který jsem přidal pomocí Component → Physics → Sphere Collider. Tomuto Collideru jsem nastavil takový poloměr, aby pokrýval i židle přilehlé ke stolu. Všem objektům, kterým bylo třeba, jsem přiřadil fyzikální model manuálně. Sloupy mají Cylinder Collider, jinak naprostá většina objektů obsahuje Box Collider. U dveří a výtahu bylo nutné modelům přidat Rigidbody, protože statické fyzikální objekty by se neměly během aplikace pohybovat, neboť to způsobuje násobné zvýšení náročnosti výpočtu fyzikálního modelu. Přidání Rigidbody se provádí skrze Component → Physics → Rigidbody. U nově přidaného Rigidbody je nutné zakázat Use Gravity a povolit Is Kinematic, což znamená, že objekt nebude ovlivňován gravitací a není možné ho ovlivnit fyzikou aplikace. Jediný způsob pohybu tělesa v tomto případě je skrze skript. 19
Jedná se texturu, která vytváří ve scéně dojem vzdálené oblohy.
4.7
Interakce s modelem
4.7
38
Interakce s modelem
V této části upřesním tvorbu skriptů pro interakci s modelem budovy. Nebudu zde umisťovat kompletní skripty, ale pouze ukázky jejich důležitých částí. Skripty jsou psány v programovacích jazycích C# a Java Script. 4.7.1
Pohyb postavy scénou
Pro pohyb postavy jsem využil již připravený Prefab20 z knihovny Standard Assets (Mobile), neboť nevidím veliký přínos v programování něčeho již hotového a dobře fungujícího. To jsem provedl přetažením First Person Controller do scény. Důležité je umístění na pozici x=0, y=0 a z=0. V jiném případě se nebudou ovládací prvky tohoto objektu nacházet na korektním místě obrazovky. Výchozí texturu obou joysticků jsem nahradil vlastními texturami, které obsahují název ovládacího prvku v angličtině (Move pro pohyb a Look pro ovládání kamery). Dále jsem objektu Player přiřadil zdroj zvuku Audio Source se zvukovou stopou kroků při chůzi skrze nabídku Component → Audio → Audio Source. U zvuku jsem povolil Play On Awake, což zajistí přehrávání zvuku při spuštění aplikace, Loop pro přehrávání zvuku ve smyčce a Volume 0 pro ztlumení zvuku, neboť o zesílení se bude starat skript pohybu. Zavedení proměnné tohoto zvuku do skriptu FirstPersonControl.js jsem provedl v deklaraci: ... var stepSound : AudioSource; ...
Dále ve funkci Update jsem do části kódu starající se o pohyb doplnil stepSound.volume=0.18; pro zesílení zvuku. V poslední fázi je nutné v okně Inspector zvuk kroků ke skriptu přiřadit přetažením. 4.7.2
Ovládací prvky
Pro ovládání aplikace jsem zavedl několik prvků. Do levého horního rohu jsem umístil tlačítko pro aktivaci a deaktivaci hudby, do pravého horního rohu tlačítko volby nastavení a přibližně doprostřed levé části tlačítko akce, které vyvolává interakci podle objektu v blízkosti uživatele. Každý ovládací prvek představuje prázdný herní objekt přidaný skrze nabídku GameObject → Create Empty. Tomuto objektu je nutné přiřadit GUI Texture v nabídce GameObject → Create Other. GUI Texture zajišťuje zobrazení požadovaného tlačítka dle volby textury. Původní GameObject má přiřazený skript v závislosti na funkci. Tlačítko na displeji se při doteku v principu chová jako bychom akci provedli myší a Unity zajišťuje detekci stisknutí v závislosti na pozici textury. public class Button : MonoBehaviour { public static bool actionB; ... void OnMouseDown(){ actionB=true; 20
Prefab zpravidla obsahuje předpřipravenou skupinu komponent včetně skriptů.
4.7
Interakce s modelem
39
Obrázek 20: Ovládací prvky aplikace. } void OnMouseUp(){ actionB=false; } }
Stejným způsobem je vytvořeno tlačítko volby nastavení. Po kliknutí na něj se zobrazí menu s možnostmi volby jazyka, grafických detailů a velikost ovládacích prvků. O vykreslení tlačítek a dalších ovládacích prvků se v Unity stará funkce void OnGUI(). Základem je tlačítko, které se vykreslí zadáním polohy a velikosti plochy. Při stisku tlačítka je vrácena hodnota true. Stavba uživatelského prostředí pak probíhá následujícím způsobem: void OnGUI(){ GUI.skin=SelectedGUIskin; if (showMenu){ if((hideLowerLevel==false)&&(GUI.Button(new Rect(Screen.width/2-76, Screen.height/2-gap,140*multiplicator,26*multiplicator), Language.graphicSettings))){ showMenuGraphic=true; hideLowerLevel=true; } ... if(showMenuGraphic==true){ if(GUI.Button(new Rect(Screen.width/2-75,Screen.height/2+gap, 140*multiplicator,26*multiplicator), Language.low)){ QualitySettings.SetQualityLevel(0,true); showMenuGraphic=false; hideLowerLevel=false; showMenu=false; } } ... }
4.7
Interakce s modelem
40
To znamená, že pokud je stisknuto tlačítko pro nastavení detailů, skryje se předchozí nabídka a zobrazí se vyšší vrstva menu s výběrem jednotlivých grafických nastavení. Těchto principů je využíváno u všech nabídek včetně hlavního menu aplikace. 4.7.3
Označení interaktivních prvků
Vzhledem k faktu, že některé objekty v budově je možné používat, je vhodné tyto objekty vizuálně odlišit od prostředí, které není interaktivní. Rozhodl jsem se možnou interakci pro uživatele označit pozvolnou změnou materiálu na jasně zelený a následně zpět na původní materiál. Nový materiál se vytváří stiskem pravého tlačítka v okně Project a výběrem Create → Material. Z možnosti Shader jsem vybral Transparent → Diffuse a nastavil zelenou barvu. Vytvoření proměnných materiálů C# skriptu se provede pomocí: public Material original; public Material glowingMaterial;
Po tomto kroku se okně Inspector zobrazí sloty, do kterých lze přidat materiál jeho přetažením. Samotná změna materiálu probíhá ve funkci Update() pokud se uživatel nachází v blízkosti interaktivního prvku (enter): if(enter){ changeTime=Mathf.PingPong(Time.time, changeInterval) / changeInterval; renderer.material.Lerp(original, glowingMat, changeTime); } else { renderer.material=original; }
Mathf.PingPong(Time.time, changeInterval)/changeInterval mění plynule hodnotu changeTime od 0 do 1. Funkce Lerp(original, glowingMat, changeTime) volí poměr materiálu podle hodnoty třetího argumentu (changeTime). 4.7.4
Otevírání dveří
V budově je umístěno velké množství dveří, z nichž některé se dají otevírat. Základem je vytvoření hierarchie, kde neviditelný pant je nadřazený dveřím. K detekci přítomnosti hráče v okolí dveří se používá Collider větších rozměrů, u kterého je povolena volba Is Trigger, což zajistí možnost procházet objektem a kolize detekovat pomocí funkce OnTriggerEnter() ve skriptu. Tato detekce byla mimo jiné použita i u předchozího skriptu 4.7.3. void OnTriggerEnter(Collider other){ if (other.gameObject.tag == "Player") enter=true; } void OnTriggerExit(Collider other){ if (other.gameObject.tag == "Player") enter = false; }
4.7
Interakce s modelem
41
Zdrojový kód je poměrně samovysvětlující a po detekci kolize je ověřováno, zda se jedná o hráče. Pokud je vyhověno podmínce, atribut enter je nastaven na true, což zpravidla spouští další funkce skriptu. Nejdůležitější části skriptu pro otevření dveří je funkce Update a část kódu starající se o změnu objektu: if(open){ transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, openRot, Time.deltaTime * smooth); } else { transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, defaultRot, Time.deltaTime * smooth); }
V závislosti na tom zda jsou dveře otevřené, nebo zavřené (open), se provede plynulá změna z aktuální nastavení rotace transform.eulerAngles do cílového nastavení rotace (openRot) pro otevřené dveře, nebo defaultRot pro zavřené dveře. Nicméně celkový kód pro práci se dveřmi je poměrně rozsáhlý, neboť ošetřuje například příliš rychlé výstupy ze zóny pro otevření dveří. V aplikaci se také nachází modifikovaný skript pro automatické otevírání dveří u vstupu do budovy. 4.7.5
Výtah
Při použití výtahu jsem zavedl některá omezení, aby jeho ovládání bylo jednoduché a funkce spolehlivá: • Výtah je přístupný pouze z přízemí. • Je možné cestovat pouze směrem nahoru. • Výtah po dosažení nejvyššího patra a vystoupení uživatele provede automatický návrat do nejnižšího patra. if(up){ transform.position = Vector3.Slerp(transform.position, newPos, Time.deltaTime * smooth); }
Principem je změna o jedno patro směrem nahoru v případě stisknutí tlačítka akce a je zde využíváno podobného kódu jako u otevírání dveří. Hlavní rozdíl spočívá ve faktu, že u výtahu se nemění rotace, ale pozice. Inkrementální výpočet nové pozice výtahu v tomto případě nebylo možné použít, protože přepočet se provádí v momentě stisknutí tlačítka akce a pokud by se tak stalo například při jízdě výtahu směrem nahoru, nebyla by nová pozice vypočítána správně. Z tohoto důvodu byla zavedena proměnná, do které se aktuální pozice ukládá. Výchozí pozice výtahu je uložena do vektoru, aby bylo možné po dosažení nejvyššího patra a vystoupení umístit výtah na původní pozici (přízemí). 4.7.6
Nápojové automaty
Abych aplikaci zajistil určitou dávku zábavnosti, snažil jsem se přidat co nejvíce interaktivních prvků. Ačkoli funkční nápojové a jídelní automaty žádným způsobem nesouvisí se zvolenou problematikou aplikace, přináší z herního hlediska vítané oživení prostředí.
4.7
Interakce s modelem
42
if(MouseButton.actionB & enter ){ coins.Play(); var clone = new Rigidbody(); clone = (Rigidbody)Instantiate(selectedObject, transform.position, transform.rotation); }
Při přítomnosti hráče v zóně a stisku tlačítka akce se přehraje zvuk zaplacení a vytvoří se pomocí Instantiate(original, position, rotation) kopie objektu přiřazeného v Inspectoru. Výsledná kopie má pozici a rotaci aktuálního herního objektu, ke kterému je skript přiřazen. Tento skript je poté použit na prázdný herní objekt umístěný před automatem v aplikaci. 4.7.7
Navigace
Vzhledem k velikosti a složitosti budovy bylo nutné navrhnout systém navigace uživatele. Unity obsahuje pro tento účel nástroj Navigation pro navigaci. Nejdříve je nutné skrze Window → Navigation označit celý model budovy jako Navigation Static. Program již model prozkoumá a vygeneruje cesty pro navigaci. O navigaci uživatele se stará model šipky, který má přiřazen Unity skript Nav Mesh Agent. V nastavení Nav Mesh Agent jsem změnil poloměr (Radius) agenta na 0,11, aby nedocházelo k problémům při průchodu zúženými místy. Speed, neboli rychlost agenta, jsem nastavil ve výchozím stavu na 0, neboť o změnu rychlosti se bude starat podpůrný skript. Dále je vhodné upravit Angular Speed pro lepší manévrovatelnost na přibližně 350 a ostatní položky lze ponechat ve výchozím nastavení. Pro ovládání navigace jsem vytvořil skript NavigationController, který obsahuje funkce pro změnu cílové lokace a změnu polohy agenta. void Awake() { Controller = GetComponent
(); Controller.enabled=false; }
Funkce Awake() slouží pro nastavení proměnných při startu stejně jako Start(). Awake() funkce jsou volány ještě před Start(), čehož lze využít v případě, že je třeba využít některou komponentu ihned po startu a je nutné zajistit, aby byla již správně navázána. GetComponent() vrátí komponentu herního objektu dle definovaného typu a aby bylo možné měnit cílovou destinaci agenta, musí být agent deaktivovaný. public static void ChangeDestination(Vector3 recievedVector){ controller.destination = recievedVector; }
Funkci ChangeDestination(newVector) lze volat z jakéhokoli místa v aplikaci a tím přiřadit navigačnímu agentovi cílovou destinaci. Princip funkce pro změnu pozice agenta je stejný a není tedy nutné ho uvádět. void OnTriggerEnter(Collider other){ if(other.tag=="Player")
4.8
Přizpůsobení aplikace pro slabší zařízení
43
controller.speed=8; }
Agent se pohybuje pouze v případě, že je hráč v jeho blízkosti, což je opět zajištěno funkcí OnTriggerEnter(). Zastavení agenta je řešeno ve funkci OnTriggerExit() nastavením controller.speed=0. 4.7.8
Studijní agendy
Studijní agendy využívají navigačního systému, který jsem popsal v předchozí v předchozí části. Dostupné simulace studijních agend jsou: • pozdní zápis předmětu, • potvrzení o studiu, • ukázka zkoušky. Výběr ze studijních agend probíhá u informačního pultu v blízkosti vstupu do budovy. Po volbě některé z nich jsou zobrazeny informace o úkolu a zapnuta navigace. Splnění studijní agendy Pozdní zápis předmětu probíhá tak, že po volbě dané agendy je uživatel navigován na studijní oddělení. Zde dostane informaci, že pozdní zápis je nutné si nechat schválit u garanta předmětu a navigace pokračuje do jedné z kanceláří na ústavu informatiky. Po svolení garanta předmětu je uživatel doveden zpět na studijní oddělení, kde proběhne zápis. Při výběru Potvrzení o studiu je uživatel navigován nejdříve k počítači ve studovně, aby zadal do tiskárny tisk svého potvrzení. Navigace pokračuje k tiskárně odkud uživatel pokračuje na studijní oddělení. Ukázka zkoušky se odehrává v učebně Q05, kde je uživatel doveden navigačním systémem. U cílového počítače je na obrazovce zobrazeno postupně šest otázek a po jejich zodpovězení je vypsán počet správných odpovědí a výsledná známka. U všech studijních agend využíváno funkcí OnTriggerEnter() a OnTriggerExit() a jsou dány lokace, ve kterých když se uživatel objeví, provede se nastavení příslušných atributů na hodnotu true. Dále je využito funkce ChangeDestination(newPos) pro nastavení nové cílové destinace pro navigačního agenta. Cílem těchto jednoduchých úkolů je motivace k prohlídce budovy.
4.8
Přizpůsobení aplikace pro slabší zařízení
Unity obsahuje několik nástrojů, které snižují hardwarové nároky aplikace. Mezi nástroje použité v mé aplikaci patří viditelnost objektů a lightmapping, které zmíním v samostatných podsekcích. Velice výkonným nástrojem pro získání odezvy z hlediska hardwarové náročnosti je tzv. Profiler. Profiler zobrazuje, kolik procent času procesor stráví výpočtem fyziky, animace, voláním skriptů atd. Tato funkce se uvede
4.8
Přizpůsobení aplikace pro slabší zařízení
44
do chodu pomocí nabídky File → Build settings povolením položek Development Build a Autoconnect Profiler. Okno Profileru se zobrazuje pomocí Window → Profiler. Aplikace se s Profilerem propojuje automaticky a to dokonce i skrze bezdrátovou síť. V praxi vše probíhá tak, že po spuštění aplikace například na tabletu lze sledovat v reálném čase využívání jednotlivých hardwarových prostředků na monitoru počítače. 4.8.1
Occlusion Culling
Occlusion Culling zajišťuje redukci vykreslovaných objektů, které nejsou v pohledu kamery, popřípadě se nacházejí za neprůhlednou překážkou. Pokud se tedy stěnou nachází jakýkoli objekt, není zohledňován při vykreslování a nezatěžuje tím vykreslovací algoritmus. Panel tohoto nástroje se zobrazuje výběrem Window → Occlusion Culling z hlavní nabídky. Nejdříve se provádí výběr objektů, které budou při viditelnosti používány. Každý objekt má na výběr z voleb Occluder Static a Occludee Static. Jako Occludee Static je možné označit všechny objekty, čímž se zamezí jejich vykreslování pokud nejsou viditelné. Jako Occluder Static je možné označit pouze neprůhledné, popřípadě dostatečně velké objekty. Skla v budově tedy nemohou být označeny jako Occluder Static, neboť se jedná o průhlednou překážku, za kterou je nutné vykreslovat další objekty.
Obrázek 21: Vzhled scény s jednotlivými segmenty při použití metody Occlusion Culling.
Na záložce Bake je několik možností nastavení viditelnosti. View Cell Size zpřesňuje vypočet viditelnosti, nicméně používání příliš malých oblastí vede k radikálnímu zvýšení času výpočtu a velikosti výsledného souboru. Near Clip Plane a Far Clip Plane jsou nejbližší a nejvzdálenější hranice, za kterou se objekty nevykreslují a není nutné je nijak měnit. Posledním krokem je samotný výpočet viditelnosti, který se provede tlačítkem Bake ve spodní části okna Occlusion Culling.
4.9
Export a zpřístupnění v Google play
4.8.2
45
Lightmapping
Lightmapping přináší obrovské snížení nároků na vykreslování. Tento nástroj provede výpočet nasvícení textur a tuto informaci uloží jako novou texturu, kterou aplikuje na objekt. Nevýhodou je, že tyto stíny jsou statické. V praxi se běžně používá statický Lightmapping pro vzdálenější objekty od hráče a předměty blíže se automaticky přepočítávají dynamicky.
Obrázek 22: Scéna s nabídkou nastavení Lightmappingu.
Nástroj se nachází v nabídce Window → Lightmapping. Nejdříve se provádí výběr objektů označením jako Lightmap Static. V aplikaci jsem vybral podlahy a zejména menší předměty. Problémem bylo využití na stěny budovy, které nemají žádnou texturu a vznikaly na jejich povrchu barevné skvrny, popřípadě posterizace. Na záložce Bake se provádí nastavení Lightmappingu a nachází se zde značné množství voleb, z nichž většinu lze nechat ve výchozím nastavení. Pro zkrácení výpočtu lze zmenšit hodnotu Bounces, čímž se určuje maximální počet odrazů světla. Výpočet se provádí tlačítkem Bake Scene a je časově velmi náročné. Po výpočtu se automaticky provede přiřazení vypočítaných lightmap.
4.9
Export a zpřístupnění v Google play
Abych zajistil dostupnost aplikace pro co nejširší publikum, využil jsem oficiální distribuční službu Androidu – Google play. Důvodů k využití Google play je hned několik: • Jedná se o výchozí aplikaci na Androidu a díky tomu ji používá nejvíce lidí. • Registrace jako vývojář není nikterak obtížná. • Možnost prodeje aplikací.
4.9
Export a zpřístupnění v Google play
46
• Umožňuje jednoduchou aktualizaci aplikací nainstalovaných v zařízení. Před samotným nahráním aplikace do obchodu je ale vhodné věnovat pozornost několika položkám v Unity. 4.9.1
Nastavení v Unity pro export
Nejdříve se prování volba platformy skrze File → Build settings. Pokud je vybrán Android, požádá Unity o lokaci Android SDK (3.1.3). Nastavení aplikace pro export se v Unity nachází ve File → Build settings → Player settings. V okně Inspector je nutné vybrat nastavení platná pro platformu Android (Per-Platform Settings) a následně se objeví několik nabídek pro export: • Resolution and Presentation – zde se nastavuje zobrazení aplikace na obrazovce zařízení. V sekci Resolution jsem zvolil z nabídky Default Orientation možnost Landscape Left pro standardní zobrazení na šířku. To znamená, že tlačítko pro návrat na domovskou obrazovku bude standardně vlevo. Pro skrývání spodní lišty jsem povolil Status Bar Hidden v sekci Status Bar. Další položky jsem nechal v původním nastavení, neboť je nutné je měnit až v případě problému s během aplikace. • Icon – v této sekci je možnost přidat vlastní ikonu aplikace. Je vhodné vytvořit ikonu rovnou v rozlišení 512×512 pixelů ve formátu PNG, aby ji bylo možné použít i při nahrávání aplikace na Google play. V této nabídce jsem dále povolil Override for Android, aby byla moje ikona platná pro platformu Android. Ikonu použitou v aplikaci jsem vytvořil v programu Adobe Photoshop CS4. • Splash Image – nastavuje obrázek, který se zobrazí při spuštění aplikace. V tomto případě byl zvolený obrázek pořízen v aplikaci a doplněn o nápis Loading. V podsekci Splash scaling jsem zvolil Center (only scale down), což vynutí zobrazení obrázku na středu a jeho zmenšování při snižujícím se rozlišení. • Other Settings – tato nabídka se zabývá během aplikace, její identifikací, konfigurací a optimalizací. V sekci Rendering jsem povolil Static Batching, což díky snížení počtu vykreslovacích volání (Draw calls) pro statické objekty sdílející stejný materiál přinese pokles náročnosti na procesor. Povolení Dynamic Batching umožní vykreslovat dynamické objekty a díky tomu můžeme měnit scénu při běhu (např. otevření dveří). V sekci Indentification u Bundle Identifier jsem zvolil název aplikace. Ten by měl být ve tvaru com/cz.autor/firma.nazevapk, tedy např. cz.MarekMusil.MendeluQ. Bundle Identifier a Bundle Version Code označuje verze balíku, které je nutné při každé aktualizaci navyšovat. Z nabídky Minimum API Level je možné vybrat API21 , na kterém bude aplikace běžet. V tomto případě jsem zvolil verzi 14 z důvodu výkonnostních problémů u nižších verzí. V sekci Configuration je možnost De21
Application Programming Interface.
4.9
Export a zpřístupnění v Google play
47
vice Filter, kde jsem ponechal ARMv7only, dále v Install Location jsem zvolil Automatic, což ponechá výběr lokace pro instalaci na systému. V sekci Optimization jsem nastavil API Compatibility Level .NET 2.0 pro zajištění maximální kompatibility. Možnost Enable Internal Profiler slouží pro získávání zpětné vazby ze zařízení při vývoji aplikace a při publikaci je nutné tuto položku zakázat. Optimize Mesh Data zamezí exportu nepoužívaných dat objektů (např. normály, UV mapy, barvy) a tuto nabídku jsem tedy povolil. • Publishing Settings – jedná se o velmi důležitou část při publikaci aplikace na Google play, neboť slouží k jejímu podepsání. V sekci Keystore jsem zvolil Create New Keys a nastavil heslo pro tento klíč. V sekci Key kliknutím na Create a new key dojde k vytvoření nového klíče, kde je možné nastavit Alias → release, Password → například na MendeluQapp, Validity (years) → 50, First and Last Name → Marek Musil, Organization → MarekMusil, City or Locality → Brno a State or Province → Czech Republic. 4.9.2
Publikování v Google play
Po exportu aplikace přichází čas pro registraci na Google play jako vývojář. Ta je uskutečněna na stránkách https://play.google.com/apps/publish/, kde po přečtení podmínek, jejich odsouhlasení a zaplacení poplatku 25 USD, můžeme začít nahrávat aplikace do obchodu. Na https://play.google.com/apps/publish/ jsem vybral možnost Přidat novou aplikaci, zvolil jako výchozí jazyk češtinu, vypsal název aplikace a označil soubor s koncovkou apk, který jsem měl v úmyslu nahrát. Název jsem zvolil jako Mendelu Q z důvodu jednoduché zapamatovatelnosti a dohledatelnosti v obchodě. Po nahrání aplikace do obchodu je nutné v sekci Záznam v obchodu vyplnit název, popis, propagační text, nedávné změny (informace o změnách v jednotlivých verzích), alespoň dva snímky z běhu aplikace, ikonu ve formátu PNG (zde lze využít dříve zmíněnou ikonu v rozlišení 512×512 pixelů). Dále je nutné vyplnit typ aplikace (Hry), Kategorie (Pro příležitostné hráče) a Hodnocení obsahu (Zralost: střední). V závěrečné části doplníme kontaktní informace, jako webové stránky, e-mail a telefon. V sekci Cena a distribuce jsem pro svou aplikaci nastavil cenu zdarma a distribuci ve všech dostupných zemích. K uvolnění aplikace zdarma na Google play mě vedla mimo jiné snaha o zajištění co nejširšího publika pro aplikaci. Ostatní položky jako např. Google play pro vzdělávání jsem nechal v původním nastavení, tedy zakázané.
5
ZÁVĚR
5
48
Závěr
Práce se zabývá programováním pro Android, srovnáním jednotlivých nástrojů pro vytváření 3D modelů, tvorbou modelu budovy Q, vytvořením požadovaných interakcí a publikací výsledné aplikace. Cíl vytvořit aplikace pro simulaci studijních agend považuji za úspěšně splněný. Vymodeloval jsem v rámci možností reálný model, kterým je možné interaktivně procházet. Vytvořeny byly všechny patra budovy, ovšem ne všechny učebny jsou z důvodu hardwarových nároků přístupné. Mezi celkové dostupné interakce patří plnění studijních úkolů, otevírání a zavírání dveří, fungující výtah i nápojové automaty a možnost navigace do různých míst budovy. Původní požadovanou funkcionalitu aplikace tedy považuji za splněnou. Grafickou stránku aplikace považuji za poměrně zdařilou a představuje z mého pohledu dobrý poměr mezi hardwarovými nároky a vizuálním zážitkem. Aplikace byla umístěna na Google play ještě poměrně dlouhou dobu před dokončením. Díky tomu někteří uživatelé svými připomínkami a zkušenostmi z testování pomáhali při vývoji aplikace. Je možné ji nalézt vyhledáváním dotazu Mendelu Q, případně pod přímým odkazem22 . Dosud bylo provedeno přibližně 30-50 instalací.
5.1
Přínos práce
Za hlavní přínos považuji možnost ulehčit orientaci v budově novým studentům Provozně ekonomické fakulty Mendelovy univerzity. V současné době by aplikace zejména potřebovala vstoupit do podvědomí studentů jako jejich pomocník při nástupu na univerzitu. To by bylo možné skrze odkaz na stránkách univerzity nebo upoutávku v prostorách školy. V současné době aplikaci propaguji na webových stránkách www.mendelu.marekmusilfoto.cz a na portálu YouTube pod odkazem http://youtu.be/2MzAl24MGVE. Rovněž v aplikaci vidím reklamu Mendelově univerzitě, která by při řádné propagaci mohla zvýšit podvědomí o univerzitě u budoucích studentů.
5.2
Problémy při řešení
Základním problémem byla obrovská variabilita zařízení, pro které je aplikace určena. Zejména je problém v jemnosti displejů, která se pohybuje od 80 dpi po přibližně 450 dpi. Přizpůsobit uživatelské prostředí krajním hodnotám jemnosti rozlišení nebylo jednoduché, neboť spolu s ní se může měnit taktéž úhlopříčka displeje. Ve finální aplikaci se volí velikost ovládacích prvků v závislosti na jemnosti displeje ze tří přednastavených voleb s tím, že uživatel může tuto volbu ovlivnit v menu. Zcela nevypočitatelně se na některých zařízeních objevuje grafická chyba v podobě pravidelných pruhů. Tento problém se často ztrácí po reinstalaci aplikace, nebo opětovném spuštění aplikace, a opět objevuje po aktualizaci. U testovaného zařízení 22
https://play.google.com/store/apps/details?id=com.MarekMusil.MendeluQ
5.3
Budoucí rozšíření
49
se grafická chyba nikdy neprojevila, a proto jsem ji v současné době nedokázal zcela odstranit. Několik problémů přinesl odlišný čas mezi opakovaným voláním funkce Update u skriptů na platformě Android. To vyústilo zejména v chyby při používání výtahu, konkrétně občasné propadnutí podlahou. To bylo vyřešeno ne zcela ideálně pomocným skriptem pro podlahu výtahu, který jakýkoli objekt postavený na této ploše převezme jako potomka, a díky tomu se herní postava pohybuje zároveň s podlahou výtahu. Po vystoupení z výtahu je herní postavě rodič odstraněn. Další problém byl s fyzikálním modelem budovy, který byl při automatickém generování tzv. Colliderů příliš složitý a bylo nutné ho nahradit co nejjednoduššími tvary. Po tomto nahrazení klesla náročnost na výpočet fyzikálního modelu na třetinu. Po celou dobu vývoje jsem se taktéž potýkal s nedostatkem výkonu mobilních zařízení. Aplikace byla záměrně testována na starším zařízení osazeným Tegrou 223 , ačkoli v dnešní době jsou běžně dostupné telefony s čtyřjádrovými 1.8 GHz procesory. Díky tomu je aplikace spustitelná i na slabších zařízeních a dostupná pro více uživatelů.
5.3
Budoucí rozšíření
Způsobů jak rozšířit současnou aplikaci se nabízí hned celá řada. Za jeden z nejzajímavějších považuji možnost propojení aplikace s informačním systémem univerzity a následné předávání cílených informací uživateli. Například by aplikace mohla uživatele navádět na jeho konkrétní studijní oddělení, popřípadě spolupracovat s jeho rozvrhem. Rovněž zajímavé by bylo dotvoření veškerých učeben a do těchto učeben by bylo možné vytvořit kompletní navigaci, která je již v současné verzi částečně implementována. Vytvořené prostředí by výrazně oživilo přidání modelů lidí, se kterými by bylo možné interagovat. Díky využití multiplatformního enginu je také možné aplikaci exportovat na operační systém Windows a využít vyššího výkonu desktopové platformy. Ovšem to je již v rozporu s primárním cílem aplikace, který spočívá v možnosti kdykoli si nechat od aplikace poradit v navigaci budovou.
23
System on a chip řešení společnosti Nvidia s dvoujádrovým ARM Cortex-A9 procesorem taktovaným na 1 GHz.
6
6
50
REFERENCE
Reference
Android-App-Market. Android Architecture – The Key Concepts of Android OS. 2012 [cit. 2014-04-22]. Dostupné z: http://www.android-appmarket.com/android-architecture.html. AndroidGuys. A brief history of Android releases. 2014 [cit. 2014-5-10]. Dostupné z: http://www.androidguys.com/2013/10/10/key-moments-historyandroid-releases/. Autodesk. 3D modeling, animation, and rendering software. 2014 [cit. 2014-5-10]. Dostupné z: http://www.autodesk.com/products/autodesk-3ds-max/overview. Burnette, E. Hello, Android: Introducing Google’s Mobile Development Platform. Raleigh: Pragmatic Bookshelf, 2009. ISBN 1-9343-5656-5. Creighton, R. Unity 3D Game Development by Example. Birmingham: Packt Publishing Ltd., 2010. ISBN 978-1-849690-54-6. Goldstone, W. Unity Game Development Essentials. Packt Publishing Ltd., 2009. ISBN 978-1-847198-18-1. Google. Android Developers Guide. 2014 z: http://developer.android.com/index.html.
[cit.
2014-05-10].
Dostupné
Koenigsmarck, von A. Cinema 4D R10 – Praktický výukový kurz. Brno Computer Press, 2008. ISBN 978-80-251-2056-9. Kříž, J. Mistrovství v 3ds Max. Brno: Computer Press, 2010. ISBN 978-80-251-2464-2. Maxon. Cinema 4D Studio - Everything you need for high-end 3D. 2014 [cit. 20145-10]. Dostupné z: http://www.maxon.net/products/cinema-4d-studio/whoshould-use-it.html. R. McNeel Associates. Rhinoceros – NURBS modeling for Windows, uživatelská příručka.. R. McNeel Associates. Rhinoceros – Learn. 2014 [cit. 2014-5-10]. Dostupné z: http://www.rhino3d.com/learn. Shando. Shando’s ShiVa Book. 2009 [cit. 2014-5-10]. Dostupné z: http://www.shivaengine.com/developer/320-shandos-shiva-book. Šlesová, I. Interaktivní průchod scénou s využitím nástrojů Blender a Python. Bakalářská práce. Brno: PEF MENDELU, 2012. Stonetrip. Shiva 3D Game Engine with Development Tool. 2014 [cit. 2014-5-10]. Dostupné z: http://www.stonetrip.com.
6
REFERENCE
Unity Technologies. Unity Manual. 2014 [cit. 2014-5-10]. z: http://docs.unity3d.com/Documentation/Manual/index.html.
51 Dostupné
Žára, J. a kol. Moderní počítačová grafika. 2. vyd. Brno: Computer Press, 2004. ISBN 80-251-0454-0.
Přílohy
A
A
SNÍMKY Z VÝSLEDNÉ APLIKACE
53
Snímky z výsledné aplikace
Obrázek 23: Výběr studijní agendy u informačního pultu, který je jako interaktivní prvek označen zeleně.
A
SNÍMKY Z VÝSLEDNÉ APLIKACE
Obrázek 24: Ukázka zkoušky v učebně Q05 po dokončení testu.
Obrázek 25: Čtvrté patro budovy.
54
B
DVD
B
DVD
Přiložené DVD obsahuje: • kompletní adresář Unity včetně skriptů, modelů a materiálů, • návod na ovládání aplikace v podobě obrázků, • prezentační video, • propagační video aplikace použité na YouTube, • práci v elektronické podobě.
55