REALTI MEOBJECTOCCLUSI ON I N AUGMENTED REALI TY
Af s t udeer ver s l ag:Denni sDonker 100%FAT
Afstudeerverslag Dennis Donker Real time object occlusion in Augmented Reality
Opleiding: Saxion Hogescholen Afstudeerperiode: Maart t/m Augustus 2011 Afstudeerlocatie: Enschede Student: Dennis Donker - 88157 E-mail:
[email protected] Telefoon: 06-18885475 Afstudeerbedrijf: 100%FAT - Fusion of Art and Technology E-mail:
[email protected] Telefoon: +316 14044471 Bedrijfbegeleider: Floris Schreuder E-mail:
[email protected] Telefoon: +316 14044471 Afstudeerbegeleider: Herman Statius Muller E-mail:
[email protected] Telefoon: 053 537-6245
Voorwoord Na 6 jaar lijkt het dan toch bijna zo ver te zijn, afstuderen. Een afronding van mijn studie en alles wat daarbij komt kijken. Ik heb mijn afstudeerproject met veel plezier afgerond bij 100%FAT en zou daarom ook graag de mensen van 100%FAT, Erik, Floris, Lieven en Patrick heel erg willen bedanken voor hun hulp en voor het beschikbaar stellen van hun werkplek. De prettige en flexibele werksfeer, hun input en hun motivatie hebben zeker bijgedragen aan de kwaliteit en de plezierige beleving van mijn afstudeerperiode. Daarnaast wil ik graag vanuit Saxion mijn afstudeerbegeleider Herman Statius Muller en mijn afstudeercoach Rob Maas bedanken. Ondanks dat ik de afgelopen 5 maanden als een bevredigende uitdaging en als zeer productief heb ervaren, moet ik toegeven dat ze alles behalve rustgevend waren. Ik wil daarom persoonlijk graag een paar regels gebruiken om de mensen te bedanken die mij in de afgelopen, toch wel drukke en vermoeiende tijd, hebben ondersteund en hebben geholpen. Mijn vrienden, mijn familie, Bob van Dijk uit Woensdrecht en mijn collega's en mede- (laten we politiek correct zijn en zeggen) liefhebbers van Molly, tegen deze mensen wil ik graag zeggen: bedankt. Ik sluit af met de hoopvolle gedachte dat ik na afloop van deze afstudeeropdracht terug kan kijken op een succesvol afgeronde studie Kunst en Techniek. Dit is een gedachte die langzaam aan steeds meer en meer gevoed wordt door een lichtelijk verlangen naar een welverdiende, idyllische sereniteit, een gevoel van "the value of a summer spent and a winter earned"… Of, om het op een minder pseudo-intellectuele manier te zeggen: ik ben wel toe aan vakantie.
Dennis Donker, Augustus 2011
Afstudeerverslag Dennis Donker | versie 1.00
4
Inhoudsopgave INHOUDSOPGAVE .......................................................................................................................... 5 SAMENVATTING ............................................................................................................................ 6 BEGRIPPENLIJST ............................................................................................................................. 7 HOOFDSTUK 1: INLEIDING EN SITUERING ....................................................................................... 8 AANLEIDING ................................................................................................................................................. 9 OVER 100%FAT .......................................................................................................................................... 9 GLOBALE DOELSTELLINGEN ........................................................................................................................... 10 WERKWIJZE ................................................................................................................................................ 11 STRUCTUURBESCHRIJVING ............................................................................................................................. 12 HOOFDSTUK 2: VRAAGSTELLING EN RANDVOORWAARDEN .......................................................... 13 PROBLEEM STELLING .................................................................................................................................... 14 SPECIFIEKE DOELSTELLING ............................................................................................................................. 15 PAKKET VAN EISEN ...................................................................................................................................... 16 HOOFDSTUK 3: AANPAK ............................................................................................................... 17 AFBAKENING .............................................................................................................................................. 18 VOORONDERZOEK ....................................................................................................................................... 19 VERANTWOORDING KEUZES ........................................................................................................................... 19 REALISATIE ................................................................................................................................................. 19 EVALUATIE ................................................................................................................................................. 19 HOOFDSTUK 4: RESULTATEN PER FASE .......................................................................................... 20 VOORONDERZOEK ....................................................................................................................................... 21 VERANTWOORDING KEUZE ............................................................................................................................ 24 REALISATIE ................................................................................................................................................. 25 EVALUATIE ................................................................................................................................................. 34 HOOFDSTUK 5: CONCLUSIES EN AANBEVELINGEN ......................................................................... 35 CONCLUSIES ............................................................................................................................................... 36 AANBEVELINGEN: ........................................................................................................................................ 37 LITERATUURLIJST .......................................................................................................................... 38 BIJLAGE ......................................................................................................................................... 39 BIJLAGE 1 ‐ TIJDSPLANNING ........................................................................................................................... 39
Afstudeerverslag Dennis Donker | versie 1.00
5
Samenvatting Dit afstudeerverslag is de documentatie van de afstudeeropdracht die ik heb gedaan ter afronding van mijn opleiding Kunst en Techniek. Ik ben voor deze afstudeeropdracht terechtgekomen bij 100%FAT, een bedrijf uit Enschede dat in 2009 is opgericht door 4 oud studenten KNT. Bij 100%FAT ben ik bezig geweest met augmented reality en met name met het zogeheten 'occlusion probleem'. Bij augmented reality worden videobeelden 'real time' gemaakt en bewerkt waardoor de illusie gecreëerd wordt dat de realiteit aangepast is. De gebruikers of toeschouwers zien op een scherm de ruimte waar hij of zij zich bevind met aangepaste of toegevoegde elementen. Omdat dit gebeurt doordat een computer de aangepaste beelden over de originele beelden plaatst, moet alles in de voorgrond gebeuren. Als dit niet in de voorgrond gebeurt zijn virtuele objecten die eigenlijk achter de echte, of 'real life', objecten in de voorgrond staan wel gewoon te zien. Aangezien dit niet klopt qua perspectief breekt dit de illusie. Dit probleem heet binnen augmented reality het 'occlusion probleem'. Hierdoor worden de mogelijkheden van augmented reality zeer sterk beperk. Om dit op te lossen moet de computer weten hoe de ruimte die gefilmd wordt er in 3 dimensies uit zien. Met andere woorden, de computer moet naast een videobeeld ook informatie hebben over de afstand van de objecten in de ruimte. Aangezien het zeer lastig, of bijna onmogelijk is om voor een computer een 2dimensionaal videobeeld om te zetten in 3d moet er een andere oplossing gebruikt worden Als oplossing is er in dit project gebruik gemaakt van de Microsoft Kinect. Dit apparaat bevat naast een gewone camera ook een diepte sensor. Deze sensor kijkt naar de vorm van de ruimte en meet hoe ver alles van de camera verwijderd is. De combinatie tussen het videobeeld van de videocamera en de diepte informatie maken het mogelijk om object occlusion te realiseren. Het eindresultaat van dit afstudeerproject was een werkende demo en een werkend framework. Dit betekend dat 100%FAT in toekomstige AR producties object occlusion kan toevoegen. Persoonlijk ben ik zeer tevreden over het eindresultaat en over de afronding van mijn dit afstudeer project.
Afstudeerverslag Dennis Donker | versie 1.00
6
Begrippenlijst TERMINOLOGIE AR Augmented Reality Beta Casual Gamer Comments Driver/drivers Framerate Framework Kinect Kinect hacks Masking Mesh Motion capture multi-array microfoon Object occlusion Opensource Photoshop Plane Primesense Quest 3D Real life Real time Rendering Shader Skeleton tracking Texture Tracker/trackers TwentseWelle Unity 3D Wrapper
BESCHRIJVING Zie augmented reality. Op (meestal) een videoscherm word een opnamen laten zien van dat moment waarop de beelden worden aangepast om een andere realiteit te creëren. Officiële testuitgave van een nog niet uitgebracht of afgerond product. Lastig definieerbaar. De definitie verschilt lichtelijk onder development en onder marketing teams. Commentaar wat in code staat ter verduidelijking van de code voor zowel de codeur zelf, als voor andere mensen. Software ter aansturing van hardware Aantal plaatjes die per seconden gerenderd word, dit wordt gebruikt om o.a. te kijken hoe soepel een programma draait. Raamwerk waar vanuit een nieuw project gebouwd kan worden. Een sensor van microsoft die ik tijdens dit afstudeerproject gebruikt heb. Origineel bedoeld als controler voor games. Project waarbij de Kinect voor andere doeleinde gebruikt word Het maskeren van de achtergrond door de voorgrond Driedimensionaal object. Het vastleggen van menselijke beweging voor al dan niet real time gebruik in animatie en/of games. Meerdere microfoons die positie van geluidsbron kunnen bepalen. Onderwerp wat ik onderzocht heb, zie verslag. Software die vrij toegankelijk en vrij bruikbaar is. Software pakket voor het maken en bewerken van foto's en andere 2D bestanden. Driedimensionale interpretatie van een tweedimensionale vorm. Software fabrikant verantwoordelijk voor de originele software achter de Kinect en de meest populaire drivers. Software pakket voor het maken van 2D/3D games en andere applicaties. De term die binnen augmented reality gebruikt wordt voor de alles wat in de 'echte' wereld wordt gefilmd. Proces waarin het resultaat direct berekend en weergegeven wordt. Het proces van het berekenen van hoe een scene afgebeeld moet worden. Stuk script wat berekend hoe en met welke effecten een 3D object gerenderd moet worden. Zie motion capture 2D beeld wat om een 3D object 'gevouwen' wordt. Software wat in augmented reality gebruikt wordt voor het vastleggen van de camera positie en beweging. Een museum in Enschede. Software pakket voor het maken van 2D/3D games en andere applicaties. Zie framework
Afstudeerverslag Dennis Donker | versie 1.00
7
Hoofdstuk 1
Inleiding en situering
“I reject your reality and substitute it for my own.” - Adam Savage
“Reality is that which, when you stop believing in it, doesn't go away.” - Philip K. Dick
Afstudeerverslag Dennis Donker | versie 1.00
8
Hoofdstuk 1: Inleiding en situering Aanleiding Ter afronding van de studie Kunst en Techniek (KNT) behoort iedere student een afstudeeropdracht te volbrengen. Het doel van deze afstudeeropdracht is om studenten de kans te geven, te laten zien dat zij voldoen aan de competenties die horen bij een HBO student KNT. Als documentatie van het afstudeerproject dient er een afstudeerverslag geschreven te worden. Dit verslag markeert voor mij het einde van mijn afstudeerperiode en daarmee dus ook van mijn studie Kunst en Techniek. Persoonlijk wil ik er graag een mooie afronding van maken zodat ik met plezier, trots en voldoening terug kan kijken op mijn studie en op mijn studententijd. Ik heb daarom gekozen voor een afstudeerbedrijf waar ik af kon studeren in een sfeer en in een vakgebied waar ik me thuis bij voel, maar waar ik mezelf toch kan verdiepen in nieuwe dingen.
Over 100%FAT Voor mijn afstudeeropdracht ben ik terecht gekomen bij 100%FAT. Dit bedrijf uit Enschede is ontstaan vanuit een afstudeerproject van 4 KNT studenten. De naam komt voort uit: 100% Fusion of Art and Technology, ofwel 100%FAT. Ze specialiseren zich hier voornamelijk in het bedenken en het maken van interactieve multimedia installaties. Voorbeelden van projecten zijn bijvoorbeeld Digixperiment en de AgingMachine voor de expositie Beter dan God. Beide projecten zijn gemaakt in opdracht van en in samenwerking met museum TwentseWelle te Enschede. Naast het werk rond multimedia installaties organiseert 100%FAT eens in de zoveel tijd, in samenwerking met Heinze Havinga, workshops onder de naam freaky friday. Op deze dagen komen enthousiastelingen samen om te leren, knutselen en brainstormen over onderwerpen zoals: Max/MSP/Jitter, VVVV, OpenFrameworks, Motion detection, OpenCV, Kinect en Arduino.
Afstudeerverslag Dennis Donker | versie 1.00
9
Globale Doelstellingen Ik ben in het begin van Maart 2011 bij 100%FAT geweest om te praten over mogelijke afstudeeropdrachten. Er is toen een aantal mogelijkheden over tafel gegaan waaronder een opdracht rond augmented reality. Aangezien ik tijdens mijn studie al bezig ben geweest met het maken van een AR game, was de keuze snel gemaakt. De vraag was of ik kon kijken naar de mogelijkheden rond object occlusion in augmented reality door middel van de Microsoft Kinect. Makkelijker gezegd betekend dit: ervoor zorgen dat virtuele objecten zich achter real life objecten kunnen bewegen. Dit is iets wat standaard in augmented reality niet kan omdat virtuele objecten over een videostream heen worden geprojecteerd. Als een virtueel object zich achter een real life object bevind, dan is het toch zichtbaar. Hierdoor klopt het beeld niet met de verwachting van de toeschouwer en breekt de illusie. Het proberen op te lossen van dit probleem voor 100%FAT is het doel van mijn afstudeerproject.
Afstudeerverslag Dennis Donker | versie 1.00
10
Werkwijze De werkwijze rond dit afstudeer project bestaat uit 5 fases. Wat hier volgt, is een korte samenvatting van de werkwijze en de tijdsplanning van dit afstudeerproject. In hoofdstuk 3 en 4 ga ik dieper in op de werkwijze, de keuzes en de resultaten van dit afstudeerproject. De planning hieronder is een vereenvoudigde versie. Voor een gedetailleerde planning verwijs ik naar Bijlage 1 op blz. 39.
Onderdeel Voorbereiding Vooronderzoek Realisatie Afronding Documentatie
Maart
April
Mei
Juni
Juli
Aug.
Tijdsplanning vereenvoudigd - voor gedetailleerde versie zie 1 op blz. 39
1. Voorbereiding Tijdens de voorbereiding heb ik mij bezig gehouden met de benodigde formulieren, het vaststellen van de opdrachtomschrijving, het schrijven van het plan van aanpak, het vast stellen en regelen van de benodigde hardware, software en de goedkeuringen van dit alles door 100%FAT en KNT. 2. Vooronderzoek Tijdens het vooronderzoek heb ik gekeken naar mogelijkheden voor het realiseren van de eindopdracht. Ook ben ik tijdens het vooronderzoek bezig geweest met het leren werken met de benodigde hardware en software. Qua software was met name het leren werken met Unity 3D een van de belangrijkste punten. 3. Realisatie Tijdens de realisatie is gewerkt aan de prototypes voor het eindproduct. Er is gekeken naar verschillende methodes voor het realiseren van object occlusion in augmented reality beelden in Unity 3D. 4. Afronding Tijdens de afronding zijn de losse prototypes omgezet naar een framework, een demo en documentatie over deze twee. Dit alles is gedaan met in het achterhoofd de gedachte dat alles voor 100%FAT bruikbaar moet zijn, ook na mijn vertrek. 5. Documentatie Tijdens het complete afstudeerproject worden belangrijke stappen en keuzes gedocumenteerd. Dit gebeurt door middel van het bijhouden van een logboek, het maken van screenshots en video´s van tests en het schrijven en bijhouden van dit verslag.
Afstudeerverslag Dennis Donker | versie 1.00
11
Structuurbeschrijving Dit verslag is onderverdeeld in 5 hoofdstukken, zoals aangegeven in de Handleiding afstudeerverslag van KNT. Dit is een korte uitleg over de inhoud en het doel van deze hoofdstukken.
Hoofdstuk 1: Inleiding en situering Dit is het huidig hoofdstuk en hierin wordt uitgelegd hoe en waarom het afstudeerproject is begonnen. Het doel van dit hoofdstuk is om de lezer een inzicht te geven in de achtergrond van mijn afstudeerstage en om de lezer voor te bereiden op de rest van het verslag. Hoofdstuk 2: Vraagstelling en Randvoorwaarden In dit hoofdstuk wordt de beginsituatie geschetst. Het doel is om uit te leggen wat het exacte doel van dit afstudeerproject is en wat 100%FAT van mij verwacht. Er wordt uitgelegd wat de specifieke randvoorwaarden zijn en waarom deze randvoorwaarden zo zijn gedefinieerd. Hoofdstuk 3: Aanpak In dit hoofdstuk wordt uitgelegd wat de vorm, structuur en planning voor de realisatie was. In dit hoofdstuk gaat het meer om de vorm van het proces dan om de inhoud. De inhoud wordt besproken in hoofdstuk 4. Het doel van dit hoofdstuk is om een duidelijk inzicht te geven in het verloop van het proces. Hoofdstuk 4: Resultaten per fase In dit hoofdstuk licht ik de realisatie toe. Dit is vermoedelijk het meest technische onderdeel van het verslag. Ik beschrijf welke bevindingen ik heb gedaan en waarom ik specifieke keuzes heb gemaakt qua methodes en middelen. Het doel van dit hoofdstuk is om een duidelijk inzicht te geven in de technische onderbouwing van de gemaakte keuzes rond de realisatie. Hoofdstuk 5: Conclusies en aanbevelingen In dit laatste hoofdstuk leg ik uit wat het eindresultaat is. Ik beschrijf welke conclusies er getrokken zijn vanuit de resultaten zoals beschreven in hoofdstuk 4. Ook geef ik aanbevelingen over hoe ik denk dat 100%FAT kan profiteren van mijn afstudeerproject.
Afstudeerverslag Dennis Donker | versie 1.00
12
Hoofdstuk 2
Vraagstelling en Randvoorwaarden
“Reality is merely an illusion, albeit a very persistent one.” - Albert Einstein
“Reality leaves a lot to the imagination.” - John Lennon
Afstudeerverslag Dennis Donker | versie 1.00
13
Hoofdstuk 2: Vraagstelling en Randvoorwaarden Probleem stelling Binnen 100%FAT ligt op het moment een aantal concepten voor Augmented reality projecten klaar. Helaas blijft een groot deel van deze projecten op het moment nog op de plank liggen. Een van de belangrijkste obstakels is, dat op dit moment virtuele objecten nog niet geloofwaardig 'door' een ruimte kunnen worden geplaatst. Dit komt omdat bij Augmented Reality virtuele objecten over een videostream geplaatst worden. Hierdoor is het onmogelijk om virtuele objecten achter real life objecten te laten verdwijnen. Het (deels) laten verdwijnen van virtuele objecten achter real life objecten wordt masking of object occlusion genoemd. Een oplossing hiervoor die bij 100%FAT ligt en onderzocht moet worden, is om het occlusion probleem op te lossen met behulp van de Microsoft Kinect. Een van de rode draden die door de verschillende projecten van 100%FAT loopt, is het begrip beweging. Beweging en augmented reality zijn twee makkelijk met elkaar te verbinden begrippen. De mogelijkheden voor beweging in Augmented Reality worden vele malen vergroot als virtuele objecten de illusie kunnen wekken dat ze zich daadwerkelijk door de ruimte bewegen.
Augmented Reality ‐ geen object occlusion Augmented Reality ‐ geen object occlusion Zonder obstructie Met obstructie
Augmented Reality ‐ met object occlusion Met obstructie
Afstudeerverslag Dennis Donker | versie 1.00
14
Specifieke doelstelling Ik ga mij dus bezig houden met object occlusion in augmented reality. Het ideale eindresultaat is natuurlijk de realisatie van een eindproduct dat voldoet aan de eisen van 100%FAT. Mocht dit niet haalbaar blijken dan moet beargumenteerd kunnen worden waarom het (deels) niet mogelijk is. Mocht het wel haalbaar blijken, dan moet het eindproduct bestaan uit 2 onderdelen:
Een demo Het doel van de demo is om aan (potentiële) klanten van 100%FAT de techniek en de mogelijkheden ervan te demonstreren en te verduidelijken. De demo moet met name qua content en eventueel qua features aan te passen zijn, zodat hij beter kan aansluiten bij de wensen van een potentiële klant. Een Framework Het framework moet dienen als kale basisversie voor toekomstige projecten. Het framework is in feiten een kale en inhoudsloze versie van de demo. Het doel ervan is om 100%FAT in staat te stellen object occlusion in toekomstige projecten toe te passen.
Afstudeerverslag Dennis Donker | versie 1.00
15
Pakket van Eisen Het is belangrijk om te onthouden dat ik bezig ben met het creëren en bestuderen van een middel. Het uiteindelijke doel of de uiteindelijke doelen zullen los van deze afstudeeropdracht door 100%FAT bedacht en besloten worden. Het is daarom belangrijk dat de beide onderdelen zonder mijn aanwezigheid door de mensen van 100%FAT te gebruiken zijn. Belangrijk hiervoor is dus dat alles goed gedocumenteerd is, dat de code voorzien is van commentaar en dat belangrijke instellingen duidelijk te vinden zijn. Ik zal daarnaast natuurlijk de mensen ook mondeling onderdelen toelichten ter verduidelijking.
Randvoorwaarden rond de Hardware In principe zijn er geen specifieke eisen gesteld aan de hardware. Het eindproduct moet draaien op een PC en eventueel op een MAC. Ik heb ervoor gekozen om tijdens dit afstudeer project op een vast systeem te werken. Hierdoor is het makkelijker om verschillende testresultaten en methodes snel met elkaar te vergelijken. Tijdens dit afstudeer project is gewerkt op een laptop. Om specifiek te zijn op een Asus N53S, Intel I7-2630QM 2.0GHz, Geforce GT 540M 1GB met 6GB RAM.
Randvoorwaarden rond de Software Er zijn net zoals bij de hardware geen specifieke eisen gesteld aan het OS. Qua OS zal er in het begin dan ook alleen gewerkt worden onder Windows 7 - 64 Bit. Als alles onder deze versie van Windows draait, dan zal het eindproduct ook getest worden met andere besturingssystemen om te kijken hoe het daarop draait. Het eindproduct moet makkelijk te implementeren zijn in toekomstige AR projecten van 100%FAT. Heel kort samengevat moet het eindproduct draaien in Unity 3D en zonder mijn hulp te implementeren zijn in toekomstige projecten. Dit zijn dus de 2 belangrijke randvoorwaarden voor de software. Het moet werken in Unity 3D, en makkelijk implementeerbaar zijn. Op het moment worden binnen 100%FAT het grootste deel van de 3D applicaties zoals bijvoorbeeld Digixperiment gemaakt met behulp van Quest 3D. Er word nu langzaam de overstap naar Unity 3D gemaakt. Dit is omdat Unity een stabieler platform biedt, op zowel Mac al PC draait en een betere ondersteuning en community heeft. Unity 3D is een zeer veelzijdig pakket voor het maken van 3D games en andere 3D applicaties. Het eindproduct moet draaien in Unity. Hierdoor zijn de mogelijkheden voor toekomstige projecten veelzijdig en is het geheel relatief simpel te implementeren en te koppelen aan andere systemen van 100%FAT. Om ervoor te zorgen dat het eindproduct makkelijk implementeerbaar is, moet de code toegankelijk zijn. Dit betekend goed gedocumenteerd en voorzien van comments. De belangrijke variabellen moeten duidelijk herkenbaar zijn. Ook moet het eindproduct naast Unity en de drivers zo min mogelijk, en het liefste geen, andere software nodig hebben. Bij de AR game die ik destijds gemaakt heb voor KNT draaide 2 programma's in de achtergrond om de game daadwerkelijk te draaien in Quest 3D. Dit betekend een instabiele en minder flexibele applicatie. Als dit scenario echter onvermijdelijk is omdat bijvoorbeeld een videostream in Unity te krijgen niet lukt, dan zal er in overleg gezocht worden naar de beste ballans tussen haalbaar en wensbaar.
Afstudeerverslag Dennis Donker | versie 1.00
16
Hoofdstuk 3 Aanpak
“Reality can be beaten with enough imagination.” - Mark Twain
“He who has the bigger stick has the better chance of imposing his definitions of reality.” - Peter Berger
Afstudeerverslag Dennis Donker | versie 1.00
17
Hoofdstuk 3: Aanpak Afbakening Dit afstudeerproject is in principe door mij individueel uitgevoerd. 100%FAT is als opdrachtgever betrokken geweest bij het maken van keuzes. Het afstudeerproject liep van 15 Maart t/m 15 Augustus. Zoals in de opdrachtomschrijving beschreven is, is het uiteindelijke doel geweest het maken van een augmented reality applicatie in Unity 3D met object occlusion capaciteiten. De focus lag dus op de object occlusion en niet op de trackers van augmented reality. Een belangrijk punt vooraf was, dat ik mezelf niet in de vingers moest snijden door alles zelf te willen maken. Als tijdens het vooronderzoek of tijdens de realisatie zou blijken dat bepaalde onderdelen makkelijk te realiseren zijn door gebruik te maken van bestaande technieken en software, dan zal daarnaar gekeken worden. De keuzes van deze aard zijn eigenlijk altijd in overleg met 100%FAT gebeurd. Tijdens de afronding is gekeken naar hoe de gevonden resultaten voor 100%FAT het meest efficiënt omgezet kunnen worden in een bruikbaar eindproduct. Belangrijk om in het achterhoofd te houden is dat een optimaal eindproduct niet alleen technisch interessant moet zijn, maar ook vanuit een zakelijk perspectief mogelijkheden moet bieden voor 100%FAT. Vandaar nogmaals het punt dat goed overleg een noodzaak is. Ontdekkingen die alleen relevant zijn voor 100%FAT of voor andere projecten zullen wel gerapporteerd en eventueel gedocumenteerd worden, maar zullen niet altijd in dit verslag naar voren komen. Hierbij moet je denken aan ontdekkingen en input van mij, die relevant zijn voor andere lopende projecten van 100%FAT.
Onderdeel Maart April Mei Juni Juli Aug Voorbereiding Vooronderzoek Realisatie Afronding Documentatie Tijdsplanning vereenvoudigd - voor gedetailleerde versie zie Bijlage 1 op blz. 39
Afstudeerverslag Dennis Donker | versie 1.00
18
Vooronderzoek Het doel van het vooronderzoek is om vooraf uit te zoeken wat de beste route is om af te leggen tijdens dit afstudeerproject. Daarnaast is het belangrijk dat de benodigde voorbereiding gedaan wordt, zodat alle benodigde kennis, software en hardware aanwezig is. Dit hield in dat ik mij vooraf moest gaan verdiepen in Unity 3D, de Kinect en augmented reality en object occlusion.
Verantwoording keuzes Tijdens het gehele project zijn keuzes gemaakt. Bij iedere belangrijke keuze is gekeken naar de technische en zakelijke onderbouwing. De technische onderbouwing betekent meestal: wat zijn de technische voor- en nadelen van de verschillende mogelijkheden en welke sluiten het best aan op de wensen van dit project? De zakelijke onderbouwing van de verschillende keuzes komt voort uit de vraag welk resultaat de beste potenties biedt met de laagste risico's voor de laagste kosten. Kosten betekent naast financieel gezien, ook tijdskosten. Bij zowel de technische als de zakelijke onderbouwing is het belangrijk dat je naar je doel kijkt.
Realisatie De realisatie liep van April tot en met Juni. In de daaropvolgende tijd ben ik voornamelijk bezig geweest met de afronding. De realisatie hield in het produceren van een werkend prototype dat voldoet aan de wensen van 100%FAT. Tijdens de realisatie is gekeken naar verschillende middelen en methodes die tijdens het vooronderzoek naar voren zijn gekomen. Er zijn uiteindelijk 2 methodes bedacht en uitgewerkt tot proof of concept versies. Uit die resultaten is uiteindelijk in overleg gekozen voor de meest stabiele en daardoor meest bruikbare versie. Tijdens de afronding is deze versie omgezet tot een eindproduct voor 100%FAT.
Evaluatie Na afloop van dit afstudeerproject zal ik evalueren hoe alles is gegaan. Dit doe ik op basis van mijn eigen bevindingen en op basis van commentaar en beoordelingen van de mensen van 100%FAT. De evaluatie gaat zowel over de resultaten van het project als over het proces. De evaluatie van het proces staat beschreven in Hoofdstuk 4. De evaluatie van de resultaten is vooral terug te vinden in hoofdstuk 5.
Afstudeerverslag Dennis Donker | versie 1.00
19
Hoofdstuk 4
Resultaten per fase
“Reality is frequently inaccurate.” - Douglas Adams
“Reality is an illusion that occurs due to the lack of alcohol.” - W. C. Fields
Afstudeerverslag Dennis Donker | versie 1.00
20
Hoofdstuk 4: Resultaten per fase Vooronderzoek Unity 3D Voordat ik met deze afstudeeropdracht begon, had ik nog geen tot weinig ervaring met Unity 3D. In ieder geval te weinig om dat project tot een goed einde te laten verlopen. Ik heb er daarom voor gekozen om een los Unity project te starten als speeltuin voor experimenten rond Unity. Dit is iets wat ik bij mijn stage bij T-Xchange ook heb gedaan toen ik leerde werken met Quest 3D. Het belangrijkste doel van dit project was om bekend en vertrouwd te raken met Unity 3D voordat ik mezelf ging storten op de daadwerkelijke eindopdracht. Ik heb gekozen voor het maken van een simpele flightsimulator. Hierbij heb ik niet echt gelet op de vormgeving of op de gameplay elementen, maar ben ik voornamelijk bezig geweest met het leren werken met de interface, de editor, de verschillende script talen en de algehele structuur van Unity. Het handige van beginnen met een afzonderlijk project is dat je daar van alles fout kan doen en daarvan kan leren, voordat je begint met de realisatie van het daadwerkelijke eindproduct. Het eindresultaat van dit losse project is niet echt een grafisch hoogstandje of een enigszins noemenswaardige game, maar dat was ook niet het doel van dit project. Het doel was om vertrouwd genoeg te raken met Unity voordat ik verder kon gaan met dit project. En dat doel is, in mijn optiek tenminste, zeer zeker gehaald. Ik ben zelf veel met Quest 3D bezig geweest (onder andere met augmented reality) en ik vind persoonlijk Unity 3D een verademing. De toegangsdrempel ligt misschien iets hoger omdat alles in scripttaal en niet visueel geschreven moet worden, maar als je over deze drempel heen bent of als dit geen drempel voor je is, dan is Unity in mijn optiek een veel fijner product om mee te werken. Het is stabieler, veelzijdige, wordt beter ondersteunt en heeft een undo functie.
Over de Kinect Microsoft bracht in November 2010 de Kinect op de markt. Een van hun belangrijkste doelen was om met de Xbox 360 een betere concurrentiepositie te creëren ten opzichte Nintendo's Wii. Belangrijkste doelgroep waar Microsoft grip op wil krijgen is de lastig definieerbare 'Casual Gamer'. Het product waar Microsoft mee op de markt kwam zetten, was de Microsoft Kinect. Deze aanvulling voor de Xbox 360 bestaat uit een sensormodule/camera, bijbehorende software en een serie van voornamelijk vrolijk getinte, familiegerichte games. Alhoewel games als Kinect Adventures en kinectimals bij de meeste gamers niet echt in de smaak vielen, is de Kinect commercieel gezien zeker een succes. Daarnaast is de Kinect omarmd door techneuten, kunstzinnige types en andere enthousiastelingen die geïntrigeerd waren door de vele mogelijkheden die deze techniek brengt. In de maanden die volgden op de officiële release verschenen er tal van voorbeelden van mensen die de Kinect sensor voor compleet andere doeleinden gebruiken. Op internet zijn veel voorbeelden te vinden van deze 'Kinect Hacks'. Een voorbeeld zijn de robots die zichzelf met behulp van de diepte-informatie van de Kinect door een ruimte kunnen bewegen. Ook is er een serie artistiek getinte installaties die visuele effecten genereren op basis van de gebruiker.
Afstudeerverslag Dennis Donker | versie 1.00
21
De techniek achter de Kinect De sensor van de Kinect heeft 3 middelen voor het verzamelen van informatie over de omgeving. Hij bevat een RGB camera, een Infrarood Sensor en een multi-array microfoon. Daarnaast beschikt hij ook over een motor om zichzelf verder omhoog of omlaag te richten. Door middel van de IR en de RGB sensoren produceert de Kinect 2 matrices. Een matrix voor de 640x480 RGB waarde (het videobeeld), en de andere voor de 320x240 dieptewaarde (het dieptebeeld). Hierdoor is het dus per pixel van het videobeeld bekend hoe ver deze van de camera verwijderd is. Aangezien de camera en de IR sensor niet op dezelfde plek zitten, ontbreekt er van een deel van de pixels van de video de bijbehorende dieptewaarde. Hierdoor is het helaas zo dat het videobeeld met bijbehorende diepte-informatie kleiner is dan 640x480. De software die bij de Kinect hoort is in staat om met behulp van deze informatie een beeld te scheppen van de vorm en de beweging in de ruimte waar de Kinect zich bevind. De software bevat een serie van methodes voor het herkennen en interpreteren van (menselijke) bewegingen. Het meest indrukwekkende hiervan is de skeleton tracking ofwel motion capture. Dit deel van de software herkent de menselijk vorm en herkent hierin de pose en de beweging van die persoon. Vervolgens kan deze beweging overgenomen worden door de applicatie. Op deze manier is het mogelijk om de beweging van de gebruiker te kopiëren naar een karakter in de game. Een ander doeleinde is de interactie met bijvoorbeeld menu's door middel van handgebaren en bewegingen.
Een ontlede Microsoft Kinect ‐ Foto afkomstig van www.ifixit.com
Afstudeerverslag Dennis Donker | versie 1.00
22
Augmented reality en object occlusion Heel grofweg kan er gesproken worden van twee manieren om object occlusion te realiseren, namenlijk statisch en dynamisch. Een statische oplossing houdt in dat je de omgeving op de een of andere manier van tevoren twee of driedimensionaal namaakt. Vervolgens kun je deze informatie gebruiken om te bepalen of, en hoe, virtuele objecten wel of niet gemasked moeten worden. Een dynamische oplossing houdt in dat je de benodigde informatie over de omgeving real time verzamelt en direct gebruikt voor de masking. Een statische oplossing betekent dat je de omgeving, of de relevante objecten uit de omgeving, in 2D of in 3D namaakt en hun locatie en oriëntatie ten opzichte van de camera vastlegt. Vervolgens kun je deze informatie gebruiken om te bepalen of virtuele objecten zich voor of achter real life objecten bevinden. Het voordeel hiervan is dat je zeer accuraat kan aangeven hoe een object eruit ziet en welke eigenschappen het bevat. Zo kan bijvoorbeeld van transparante materialen zoals glas of plastic worden aangegeven wat hun transparantie en refractie eigenschappen zijn. Het nadeel is dat alle benodigde informatie van tevoren gemaakt moet worden. Dit betekent een zeer tijdrovend proces met een eindresultaat dat alleen werkt in de specifieke situatie waarvoor het gemaakt is. Zodra de applicatie in een andere ruimte geplaatst wordt, zal deze nieuwe ruimte opnieuw gemaakt moeten worden. Een ander groot probleem is, dat als de ruimte verandert doordat objecten verschoven worden, de informatie niet meer klopt en de masking incorrect gebeurt. Daarnaast is het bijna onmogelijk dynamische of bewegende objecten, waaronder mensen te masken. Dit betekent dat je zeer beperkt wordt in mogelijkheden qua uitvoering, locaties en cameraposities. Een dynamische oplossing betekent dat de benodigde informatie over de omgeving real time verzameld wordt en direct gebruikt wordt. Het betekent dat je een 3D scan van de omgeving maakt en deze informatie koppelt aan je camerabeeld om te bepalen wat zich wel of niet voor je virtuele objecten bevindt. Het voordeel hiervan is dat een applicatie zonder (veel) extra werk op een andere locatie gebruikt kan worden. Een ander heel groot voordeel is dat deze ruimte ook dynamisch kan zijn en dynamische objecten, waaronder mensen, kan bevatten. Mensen kunnen dus voor virtuele objecten langs lopen, waardoor de beleving dat een object zich daadwerkelijk in de ruimte bevindt vele malen versterkt wordt. Een groot nadeel is dat deze manie een stuk complexer is dan een statische manier. Complexer betekend dat er meer mis kan gaan wat de kans op een breking van de illusie vergroot. Eventueel zou een combinatie van een statische en een dynamische oplossing ook een mogelijk zijn. Dit zou gedaan worden door een deel van de omgeving na te maken en een deel wan de dynamische aspecten van de omgeving real time te berekenen. Een combinatie van deze manieren betekend ook een combinatie van beide voor en nadelen. Dit betekend dat het project wel aan een specifieke omgeving gebonden is, dat de productietijd per project relatief hoog is en dat er door de complexiteit relatief veel mis kan gaan. De voordelen daar in tegen zijn dat een hoop objecten zeer accuraat gemasked kunnen worden, de ruimte dynamische objecten kan bevatten.
Afstudeerverslag Dennis Donker | versie 1.00
23
Verantwoording Keuze Statisch of dynamisch Er zijn situaties te bedenken waarin een statische oplossing een beter alternatief is dan een dynamische oplossing. Dit is echter compleet van de situatie afhankelijk. Als deze situatie zich voordoet, kan er voor dat specifieke project gekeken worden naar een statische oplossing. Voor een combinatie van statisch en dynamisch is met name het dynamische aspect de grootste bottleneck. Dit aspect is namelijk een stuk minder onderzocht. Daarnaast is voor 100%FAT is een direct implementeerbare, dynamische oplossing een stuk interessanter. Vandaar dat de focus van dit afstudeerproject ligt op de realisatie van een dynamische oplossing voor object occlusion.
Keuze voor de methode Om real time object occlusion in Unity te realiseren, zijn er meerdere methodes te bedenken. De twee methodes die ik heb bedacht, zijn een layer based en een 3D mesh generation based. Een layer based houdt in dat je net zoals in bijvoorbeeld Photoshop, in lagen werkt. Dit houdt in: een achtergrond laag, een 3D objecten laag en een voorgrond masking laag. Een 3D mesh methode betekent dat je de dieptemap van de Kinect real time omzet in een 3D mesh, die de omgeving representeert. Deze mesh gebruik je vervolgens om de 3D objecten op de juiste manier te masken. De voorkeur is om beide methodes ver genoeg uit te werken om een goed onderbouwde keuze te maken. Dit is dan ook tijdens de realisatie gedaan.
Afstudeerverslag Dennis Donker | versie 1.00
24
Realisatie Aansluiting Kinect op de PC De eerste stap, voordat met de realisatie van het eindproduct gestart kon worden, was om de Kinect aan te sluiten op de PC. Aangezien de Kinect niet met PC drivers geleverd wordt en eigenlijk voor de Xbox 360 bedoeld is, valt hier niet echt te spreken van een 'plug and play' situatie. Er is voor gekozen om de drivers van Primesense te gebruiken. Dit is mede gedaan op aanraden van het officiële Unity forum en omdat ten tijde van het begin van dit afstudeerproject de officiële drivers van microsoft al wel waren aangekondigd maar nog niet uitgebracht waren. De non-commerciële Beta van die officiële SDK is pas op 16 Juni 2011 uitgekomen en bracht met name technisch gezien voor dit project niet veel nieuws ten opzichte van de drivers van Primesense. De gebruikte drivers bestaan uit de OpenNI binaries, de NITE middleware en de OpenNI compliant hardware binaries. Deze drivers en middleware worden geleverd met een serie opensource samples die de verschillende mogelijkheden laten zien. Zo zijn er samples voor user en skeleton tracking, hand tracking en scene analysis.
Microsoft Kinectbeeld ‐ Video Microsoft Kinectbeeld ‐ Diepte (Donker = Verder weg)
Afstudeerverslag Dennis Donker | versie 1.00
25
Kinect beeld in Unity 3D Nadat de Kinect werkte en ik mijzelf enige tijd vermaakt heb met de verschillende samples van OpenNI en Nite, was de logische volgende stap om het videobeeld en de dieptemap van Kinect in Unity te krijgen. De vorige KNT student (Thomas van den Berg) die bij 100%FAT bezig is geweest, is ook bezig geweest met video en Unity. Hij heeft uitgelegd dat videostream en Unity niet echt een gouden combinatie zijn. Ik ben daarom eerst gaan zoeken naar oplossingen voor dit probleem. Via het officiële Unity forum ben ik terecht gekomen bij een opensource Unity wrapper van Noicecrime. Deze wrapper werk op basis van openGL en is gemaakt voor het gebruik van de Kinect in combinatie met Unity. Deze wrapper bestaat uit een sample project in Unity waarin onder andere de videostream en de bijbehorende dieptemap te zien zijn. De keuze om met behulp van deze wrapper te gaan werken, is vrij logisch. Het opnieuw maken van iets wat al bestaat en voorhanden is, is tijdrovend, voegt weinig toe en is zeker vanuit een zakelijk oogpunt verspilling.
Eerste Kinect beelden in Unity via de wrapper van Noicecrime
Afstudeerverslag Dennis Donker | versie 1.00
26
Eerste Proof of Concept layer based masking De volgende stap is het maken van de eerste proof of concept versie. In principe zijn nu alle noodzakelijk onderdelen aanwezig, maar moeten ze samengevoegd worden om het gewenste eindproduct te realiseren. De eerste proof of concept versie gaat uit van de meest simpele methode. De methode bestaat uit 4 objecten in Unity 3D: een orthografische camera, een 3D object en 2 planes met de Kinect videostream als texture. Het 3D object wordt voor de camera geplaatst, zoals het in de ruimte zou moeten staan. De 2 planes worden recht op de camera gezet zodat ze het gehele beeld vullen. 1 plane staat voor het 3D object, en 1 plane staat achter het 3D object. De voorste plane bevat een shader met daarin 2 textures, de videostream en de bijbehorende dieptemap. Daarnaast bevat de shader een handmatig in te stellen variabele. De shader kijkt naar de grijswaarde van de dieptemap en als die lager is, (dichter tegen zwart aan) dan de variabele, dan maakt hij de bijbehorende pixel van de video transparant. Het moeilijkste hieraan is het creëren van de voorste plane, de daadwerkelijke masking omdat hier een shader gemaakt moet worden. Mijn kennis van shaders is niet een van mijn sterkste punten, dus vandaar dat ik hier redelijk mee geworsteld heb. Voor een groot deel van het gebruik van shaders in Unity kun je terecht bij de shaders die met Unity mee geleverd worden. Voor het grootste gedeelte van de verschillende 3D applicaties en visualisaties kun je gebruik maken van een visuele shader editor zoals de populaire strumpy shader editor. Als je echter complexe of zeer specifieke shaders wil maken of bewerken, dan moet je gaan werken in de daadwerkelijke shader. Dit heeft redelijk wat tijd en hulp van het Unity forum gekost. Uiteindelijk is het gelukt de shader te laten doen wat hij moet doen. Dit betekende dat de eerste proof of concept versie werkte. Op dit zeer hoopgevende moment kon ik laten zien dat real time object occlusion in augmented reality beelden in Unity 3D mogelijk was. Helaas zat er nog wel een aantal vervelende haken en ogen aan deze versie dus er moest nog genoeg gedaan worden.
Afstudeerverslag Dennis Donker | versie 1.00
27
Scene gerenderd met een perspectief camera scene gerenderd met een orthografische camera
Afstudeerverslag Dennis Donker | versie 1.00
28
Perspectief Het grootste probleem met de eerste proof of concept versie is het gebruik van de orthografische camera. Hierdoor is het 3D object niet in perspectief te renderen en dus is het geheel niet echt mooi bruikbaar voor augmented reality. Mijn eerste instinct was om de camera te vervangen voor een perspectief camera en de plane in de achtergrond simpelweg te vergroten. Dit is echter niet de meest elegante optie en ik verwachtte problemen door eventuele verschillen tussen het beeld op de voorgrond en op de achtergrond. Vandaar dat ik ben gaan kijken naar een iets professioneler ogende oplossing. Geïnspireerd door de developpers commentary uit Portal 2 over de background scenery ben ik gaan zoeken naar een mogelijkheid voor het gebruik van 2 perspectief camera's in Unity 3D. deze mogelijkheid heb ik uiteindelijk gevonden. Een hoofd camera die de scene en het 3D object normaal rendert met een plane met een masking shader tussen de camera en het 3D object. Ergens anders in de scene staat er buiten het beeld van de hoofd camera, een 2e camera die de achtergrond filmt. De achtergrond bestaat uit een plane waarop het volledige videobeeld te zien is. Deze 2 beelden worden vervolgens over elkaar gelegd net zoals bijvoorbeeld layers in Photoshop. Eerst wordt het volledige videobeeld in de achtergrond gerenderd en daaroverheen wordt vervolgens het 3D object gerenderd. Als laatste wordt de masking laag over het geheel gelegd. Het resultaat is dus een 3D object wat met perspectief gerenderd wordt en waarvan het lijkt alsof het daadwerkelijk in de ruimte staat. Met andere woorden: real time object occlusion.
Afstudeerverslag Dennis Donker | versie 1.00
29
Dynamische afstand De volgende stap was om ervoor te zorgen dat de masking van het virtuele object dynamisch verandert op basis van de locatie van het object. Als het object zich door de ruimte beweegt, moet de variabele in de shader worden aangepast, zodat hij correspondeert met de afstand van het 3D object ten opzichte van de camera. Dit is gedaan door een simpel script gekoppeld aan de masking plane. Het script kijkt naar de afstand van het bijbehorende 3D object en zet dit om en stuurt het naar de variabele in de shader. Het resultaat is dus, dat als het 3D object dichter bij de camera is, alleen de voorste objecten uit de videostream gebruikt worden voor de masking. Als het object verder van de camera verwijderd is, dan worden er dus ook objecten verder in de achtergrond gebruikt. Zodra het 3D object nu beweegt, geeft dit dus het effect dat het lijkt alsof het daadwerkelijk door de ruimte beweegt. Met andere woorden: alles wat nodig is om te spreken van succesvolle real time object occlusion in augmented reality. Het enige nadeel ligt bij meerdere objecten. Het is in theorie mogelijk om per object een nieuwe layer te creëren maar dit kan voor problemen zorgen bij onder andere interactie tussen meerdere objecten of bij objecten die qua positie tov de camera en elkaar veranderen. Er zijn een aantal 'work arounds' te bedenken en in principe stoort dit niet met de originele opdrachtomschrijving. Er is daarom in overleg gekozen om niet teveel focus op te leggen op dit probleem.
Afstudeerverslag Dennis Donker | versie 1.00
30
Real time mesh generation Tijdens de realisatie van een layer-based masking effect, heb ik ook gekeken naar de mogelijkheid om een 3D mesh te genereren vanuit de Kinect diepteinformatie. Dit is vergelijkbaar met het genereren van een terrein vanuit een heightmap. Dit is best lastig om real time voor elkaar te krijgen in Unity. Ik heb gekeken naar de mogelijkheden via een vertexshader en via scripting. Via een vertexshader is het me niet gelukt maar via een script wel. Via deze versie kan ik kijken naar de potenties van deze methode. Ik ben echter op 2 grote nadelen gestuit. Problemen met perspectief en met de framerate. Aangezien het real time aanpassen van een grote hoeveelheid polygonen zwaar is voor de computer betekent dit dat je een stuk lagere framerate krijgt dan dat je krijgt met de layer-based methode. Het andere probleem zit in het perspectief. Aangezien er perspectief in de dieptemap zit krijg je een dubbel perspectief zodra je die met een perspectief camera rendert. Om deze 2 redenen en omdat er niet veel voordelen zijn, is er besloten af te zien van deze methode.
3D mesh real time gegenereerd op basis van de Kinect diepteinformatie (65025 polygonen)
Afstudeerverslag Dennis Donker | versie 1.00
31
AR trackers Het grootste gedeelte van alle augmented reality toepassingen maken gebruik van de een of de andere methode voor het registeren van de camera positie en beweging. Dit gebeurt met behulp van trackers. Aangezien het doel van dit project niet zozeer lag bij het linken tussen een AR tracker en Unity 3D, heb ik me daar ook niet op gefocust. Er is op het moment een aantal AR trackers die op verschillende manieren werken. Grootste verschillen zijn trackers die met of zonder behulp van markers werken. Welke tracker het beste is, ligt voor een groot deel aan het project. Dit is een van de belangrijkste redenen dat ik me hier niet heel erg op gefocust heb. Ik heb wel gekeken naar de tracker die de vorige afstudeerder Thomas aan Unity heeft weten koppelen. Persoonlijk vond ik deze tracker niet stabiel genoeg werken om direct te koppelen aan de object occlusion software, zonder een helder en specifiek doel of project voor ogen te hebben.
Kinect Tests Tijdens het vooronderzoek en de realisatie ben ik regelmatig op verschillende limitaties van de Kinect gestuit. In bepaalde situaties geeft het dieptebeeld niet het gewenste beeld. Bepaalde materialen en bepaalde lichtsituaties storen met de IR sensor, waardoor niet het juiste beeld gegenereerd kan worden. Hierdoor wordt het beeld minder goed bruikbaar of soms zelfs compleet onbruikbaar voor de masking. Materialen met een hoge reflectie die met een hoek op de sensor gericht staan vallen weg in de achtergrond. Dit zelfde geldt ook voor deels transparante materialen, zoals bijvoorbeeld plastic. Daarnaast blokkeren voorste objecten nog wel een terugkomend IR licht. Dit creëert een soort van schaduw in het beeld waarop geen informatie over de diepte is. Maar verreweg de grootste boosdoener is zonlicht. Bij een test buiten viel al snel op dat de masking niet goed functioneerde. Dit komt omdat zonlicht teveel infrarood bevat, wat stoort met de IR sensor. In eerste instantie dacht ik dat regen of water op de grond misschien de boosdoener was maar na een 2e test op een droge en zeer zonnige dag bleek dat de dieptemap in deze lichtsituatie compleet zwart is. Dit betekent dat de Kinect voor dit project en voor andere projecten buiten, problemen op gaat leveren.
Microsoft Kinectbeeld ‐ Video Microsoft Kinectbeeld ‐ Diepte (zwart = geen bruikbare diepteinformatie)
Afstudeerverslag Dennis Donker | versie 1.00
32
Afronding Het omzetten van de laatste layer based versie van het eindproduct is in principe heel makkelijk. De productie van de demo en de framework versie is eigenlijk al gedaan tijdens de realisatie. Ik heb tijdens de realisatie geprobeerd om alles zoveel mogelijk van commentaar te voorzien. De framework variant is een gestripte versie met alleen noodzakelijke elementen. De demo is een gepublishte versie die stand alone kan draaien. Om de demo visueel aantrekkelijker te maken is voor het virtuele object voor een UFO gekozen. Dit is gedaan omdat deze qua beweging zeer makkelijk vrij rond kan bewegen en niet in contact hoeft te komen met de grond. Er zijn 2 varianten, eentje die bestuurbaar is en eentje die een vast pad volgt. Binnen het projectsysteem van 100%FAT is een Wiki aanwezig. In deze Wiki heb ik de handleiding voor de demo en het framework geschreven. Daarnaast heb ik een installatie guide voor de Kinect en Unity toegevoegd, inclusief de juiste drivers en benodigde bestanden. Het doel van al deze documentatie is om ervoor te zorgen dat de mensen van 100%FAT, zonder mijn directe hulp, mijn eindproduct in toekomstige AR projecten kunnen implementeren.
Screenshots uit een opnamen van de demo 3D T‐Rex skelet die bij het atalier van 100% FAT naar binnen loop
Afstudeerverslag Dennis Donker | versie 1.00
33
Evaluatie Terugkijkend op het afstudeerproject ben ik zeer tevreden over zowel het proces als over de resultaten. Ik kan aan mezelf zien dat ik zeer sterk gegroeid ben tijdens mijn studie KNT. Valkuilen waar ik in een eerder project nog wel eens ingevallen ben, heb ik deze keer naar mijn mening redelijk goed weten te ontwijken. Qua proces heb ik mij sterk aan de planning gehouden zonder daarbij de potenties van de resultaten ernstig tekort te doen. Ik denk dat er een aantal keer de juiste keuze is gemaakt om niet te diep op onderdelen in te gaan zoals bijvoorbeeld de 3D mesh generation. Ik denk dat ik doelgericht te werk ben gegaan en dat heeft in mijn optiek dan ook zijn vruchten afgeworpen. Verder heb ik het proces als druk doch aangenaam ervaren. Over het eindresultaat ben ik ook zeer zeker te spreken. Ik ben zeer tevreden en trots op alle voor dit project significante momenten. Vanaf de eerste keren dat er een kubus door de kamer vloog en met ieder stapje waarop de illusie van augmented reality groter en groter werd. Professioneel gezien ben ik van mening dat het eindproduct een zeer nuttige toevoeging is voor de projecten van 100%FAT.
Screenshot van de demo ‐ flying cube Screenshot van de demo ‐ T‐Rex
Afstudeerverslag Dennis Donker | versie 1.00
34
Hoofdstuk 5
Conclusies en aanbevelingen
“Reality exists in the human mind, and nowhere else.” - George Orwell
“Beauty is the fragile point at which perfection and reality meet.” - Author Unknown
Afstudeerverslag Dennis Donker | versie 1.00
35
Hoofdstuk 5: Conclusies en aanbevelingen Conclusies Het eindproduct Het eindproduct voldoet in principe aan alle eisen die 100%FAT en ik er vooraf aan gesteld hebben. Bovendien functioneert het geheel boven mijn initiële verwachtingen. De demo en het framework staan in het systeem van 100%FAT inclusief documentatie, benodigde drivers, documentatie en Wiki. Alhoewel de Kinect en de software wel limitaties hebben, is de toegevoegde waarde die ze geven door object occlusion vele malen groter. Een van de grootste limitaties is de problemen met meerdere objecten in een scene. Er zijn hier een aantal oplossingen en work arounds voor te bedenken dus dit probleem stoor mij niet heel ernstig. Bovendien zijn de reacties van mensen over de rest sterk genoeg om aan te nemen dat het een geslaagd eindproduct is.
Mogelijkheden voor 100%FAT Door de implementatie van object occlusion in AR projecten is voor 100%FAT een serie projecten een stuk beter realiseerbaar geworden. De toevoeging van object occlusion betekent dat virtuele objecten nu vrij en ongelimiteerd door de ruimte kunnen bewegen in plaats van op de voorgrond geforceerd te moeten zijn. Een combinatie van een van de bestaande motion tracking systemen van 100%FAT en object occlusion, biedt daarnaast vele mogelijkheden voor interactie tussen mensen en virtuele objecten. Dit betekent dat je meer met de kracht van augmented reality kan bereiken.
Conclusies rond Kinect De Kinect biedt voor 100%FAT naast object occlusion in augmented reality veel meer mogelijkheden. Alhoewel de real time 3D mesh generation voor dit project misschien niet heel veel toegevoegde waarde had, is het misschien wel een handig middel voor andere ongerelateerde projecten. Zo kun je denken aan het scannen van mensen in 3D en deze real time gegenereerde standbeelden gebruiken voor verschillende creatieve of entertainende doeleinden. Daarnaast is de mogelijkheid om de Kinect te gebruiken voor bewegingsherkenning ook in meerdere scenario's een handig middel. Wat wel belangrijk is om te onthouden, is dat de Kinect een serie technische limitaties kent die in een project naar voren kunnen komen.
Technische limitaties van de Kinect - De Kinect is niet in sterk zonlicht of buiten te gebruiken. - De dieptemap heeft af en toe last van schaduwen. - De dieptemap bedekt niet het gehele beeld van de video. - De dieptemap kan afstanden meten tussen de 0.5 tot 7 meter. - De meest correcte metingen liggen tussen de 1 tot 5 meter.
Afstudeerverslag Dennis Donker | versie 1.00
36
Aanbevelingen:
Postprocessing shaders Een andere mogelijkheid om Object occlusion in AR beelden te realiseren, is met behulp van een postprocessing shader. Hiervoor zijn per pixel 4 waardes nodig. De RGB waarde van de scene, de dieptewaarde van de scene, de RGB waarde van het camerabeeld en de dieptewaarde van het camerabeeld. De postprocessing shader moet per pixel kijken naar de 2 dieptewaardes en de RGB waarde van de laagste dieptewaarde kiezen. Als 100%FAT deze optie wil realiseren dan is hier iemand voor nodig met een zeer gedegen kennis en ervaring met shaders en post-processing in Unity 3D. Dit is iets wat in theorie mogelijk moet zijn, maar vermoedelijk nog wel problemen gaat creëren rond de dieptewaarde van de scene. Aangezien de Depth of Field postprocessing shader ook met diepte informatie werkt, zou dit mogelijk moeten zijn. Een bijkomend nadeel is, dat om in Unity postprocessing shaders te gebruiken, de Pro versie van Unity nodig is.
Trackers Een van de dingen waar 100%FAT zich binnenkort mee bezig moet gaan houden als ze willen gaan werken met augmented reality, zijn AR trackers. Ze zullen moeten kijken naar wat er op de markt is en wat de verschillende voor- en nadelen zijn. Dit is een tijd geleden al een keer gedaan, maar een deel van deze info is helaas verouderd. De keuze voor welke tracker het meest interessant is ligt voor het grootste deel aan het AR project. De tracker is een middel en moet zo gezien worden. Zo zullen voor verschillende projecten verschillende trackers effectiever of bruikbaarder zijn. Daarnaast is voor bijvoorbeeld een stationair AR project in principe helemaal geen tracker nodig. Het grote voordeel is, dat als er een tracker gevonden wordt en die werkt met Unity en een Kinect als camera, de object occlusion vrijwel direct zou kunnen werken.
Afstudeerverslag Dennis Donker | versie 1.00
37
Literatuurlijst Gebruikte boeken Rijkers, T. (2004), Succesvol werken aan je competenties; Een persoonlijk werkboek voor de baan die je wilt. 2℮ druk, Uitgeverij Nelissen: soest.
Gebruikte websites Unity 3D http://unity3d.com http://forum.unity3d.com http://answers.unity3d.com
- De officiële Unity 3D website - Het officiële Unity 3D forum - Antwoord en hulp bij specifieke vragen
Gebruikte websites Microsoft Kinect http://www.openni.org - Website van OpenNI en Kinect drivers http://www.mathnathan.com - Veel tests rond technische specs Kinect
Afstudeerverslag Dennis Donker | versie 1.00
38
MAART
APRIL Week 14
Week 15
Week 16
MEI Week 17
Week 18
Week 19
Week 20
JUNI Week 21
Week 22
Week 23
Week 24
JULI Week 25
Week 26
Week 27
Week 28
AUGUSTUS
Week 11
Week 12
Week 13
Week 29
Week 30
Week 31
Week 32
Voorbereiding:
Afstudeerovereenkomst
Opdrachtomschrijving
Plan van aanpak
Goedkeuring bedrijf
Goedkeuring KNT
Set‐up hardware
Vooronderzoek
Unity 3D Flightsim
AR occlusion onderzoek
Kinect onderzoek
Realisatie
Aansluiting Kinect op de PC
Kinect beeld in Unity 3D
Eerste Proof on Concept
Perspectief
Dynamische afstand
Realtime mesh generation
Afronding
Productie demo
Productie framework
Documentatie
Documentatie
Logboek
Afstudeerverslag
Bijlage 1 - Tijdsplanning
ONDERDEEL