Augmented Reality – tweede poging!

Augmented Reality – tweede poging!

Ik heb nu een tijdje zitten spelen met FlashDevelop, en ben al een heel stuk bedrevener in ActionScript 3. Met behulp van de FLARManager had ik mijn eerste augmented reality experimentje gedaan, en inmiddels heb ik een mooiere demo. Hij is nog niet af, maar “by popular demand” zet ik hem toch online, en iedereen mag het zelf proberen:

http://geedesign.com/test/FLAR2/bin/Main.swf

Wat heb je nodig?

Allereerst moet je een “marker” uitprinten. Dit is de marker die ik gemaakt heb:

(Rechts klikken op het plaatje en dat plaatje dan afdrukken.) Vervolgens gebruik je een computer met een webcam, en ga je naar het bovengenoemde webadres. Dan wordt er een Flash applicatie gestart, die vraagt of hij je webcam mag gebruiken, en in dit geval is dat echt nodig. Dan leg je de uitgeprinte marker voor de camera, en voila!

De opstelling is bedoeld als een soort “doorkijkje”, vandaar dat het beeld ook niet gespiegeld wordt zoals vaak gebruikelijk.

Wat zie je en wat doet het?

Je ziet een ninja op de marker staan, en als je de marker voorzichtig beweegt, dan beweegt de ninja mee. Maar de ninja kan nog meer:

  • met de pijltoetsen <– en -> kun je de ninja draaien.
  • met de pijltoets ^(omhoog) loopt de ninja naar voren, en je hoort zijn stappen. (Met de toets 8 op het numerieke keyboard kan hij ook sluipen).
  • met de spatiebalk kan hij springen.
  • met de HOME toets doet hij een aanval, met PageUp een andere aanval. Met PageDown een kick.
  • de toets End laat de ninja sterven … maar een druk op Home of een van de andere toetsen brengt hem weer tot leven.
  • (voor geïnteresseerden) met een druk op TAB ga je naar een toestand waarin hij alle animaties doorloopt. Nog een druk op TAB en hij gaat lopen. Druk je tijdens het lopen nog een keer op TAB, dan komt hij in een toestand waar hij frame voor frame alle animaties  doorloopt.  Met de 0 (ins) op het numerieke toetsenbord ga je een frame verder, met . (del) een frame terug. Je kunt deze toestand verlaten door bijvoorbeeld op de spatiebalk te drukken.

Wat heb ik gedaan?

In mijn eerste Augmented Reality (AR) applicatie kon ik alleen een poppetje laten zien dat bewoog. Ik kon het poppetje niet besturen, de animatie niet kiezen of onderbreken, geen geluidjes laten horen, etcetera. Dus wat heb ik voor deze demo gedaan:

  • Ik wilde de Sandy3D engine gebruiken voor 3D modellen en animaties (in combinatie met de FLARmanager). Deze engine ondersteunt o.a. QuakeII MD2 modellen met animatie. De animaties kunnen ook op een frame-by-frame basis aangestuurd worden.
  • Ik heb hele mooie Half-Life MDL files met animaties. (Download de Half-Life Model Viewer hier vandaan, en de MD2 Viewer is daar ook te vinden).
  • De tutorial op deze plek bleek heel nuttig om in Milkshape3D een Half-Life model met animaties om te zetten naar een MD2 model met animaties.
  • Ik heb daar wat mee zitten spelen, daar kan ik nog heel veel leren. Maar vooral het UV-mappen bleek erg lastig te zijn in Milkshape, ik denk dat daar het hulpmiddel UVMapper Pro erg nuttig is, maar daar heb ik nog niet echt mee gewerkt.
  • Wel vond ik CharacterFX, een gratis animatie tool, en hele nuttige tutorials over Milkshape3D, UV-mapping en animatie bij http://www.psionic3d.co.uk/, en daar vond ik ook het gratis model van de ninja met animaties.
  • Dus ik heb in Actionscript een aantal classes gedefinieerd, voor het werken met MD2 modellen en hun animaties in Sandy3D.   Kijk ook naar de bron code van http://geedesign.com/test/FLAR2/bin/ninja.xml Dit is een XML file, in een formaat dat ik heb gedefinieerd, voor modellen met animatie: hier kun je eigenschappen van het poppetje opgeven, en (offline) aanpassen. Hier staat ook per animatie waar en welke geluidjes gespeeld worden.
  • Ik gebruik Finite State Machines (FSM) voor het gedrag van het poppetje, dus ik heb een FSM class gemaakt in ActionScript. (Inmiddels heb ik in diverse projecten ervaring opgedaan met FSMs).
  • Het laden van de geluiden heb ik van hier, maar dat moet nog verbeterd worden.
  • Dat geheel heb ik gecombineerd met de FLAR manager, en het werkt!

Wat wil ik in de volgende demo’s?

  • Meerdere markers in beeld, met verschillende poppetjes
  • De poppetjes moeten (autonoom) op elkaars nabijheid reageren
  • 3D-geluid (zodat het geluid zachter wordt als het verder van de camera af is)
  • Verbeterd laden van geluiden, textures en modellen (je ziet het niet, maar het kan netter, misschien wordt de applicatie sneller en het maakt aanpassen zeker eenvoudiger).
  • De AI kan ook nog verbeterd worden (HFSMs in plaats van FSMs, misschien alle scripts in XML files plaatsen).
  • Steering behaviors: het poppetje moet autonoom naar plekken kunnen lopen.
  • Verbeterde keyboard handling en display.
  • Tests met andere modellen (auto?) en objecten (bijvoorbeeld huisjes).

Wat zou ik willen?

Eigenlijk wil ik natuurlijk, dat een menselijke speler kan interacteren met een virtueel poppetje, op een voor de mens natuurlijke manier. Dus de mens zegt iets, het poppetje op het scherm reageert erop, etcetera. Maar het zou al mooi zijn als we dat kunnen faken: de mens zegt iets, dat is een trigger voor het poppetje om iets te doen, etcetera. En liefst wil ik dat het poppetje zoveel mogelijk autonoom is, en (dus) ook automatisch op andere poppetjes kan reageren. Daar kan ik mooi naar toe werken.

Om te laten zien dat er met simpele middelen al wel het een en ander kan, heb ik met behulp van (gratis programma) GlovePIE een bijzonder simpel scriptje gemaakt, en gebruik ik via GlovePIE (onder XP) de (gratis) Microsoft speech recognition om de toetsen te activeren:

httpv://www.youtube.com/watch?v=SClto5h3a7w

(Dus voor de duidelijkheid: als ik nu “banzai!” zeg, dan springt het poppetje omhoog!)

Een idee: AR Schaak

Een van de dingen waar ik op dit moment aan denk is een schaakbord: stel, je ziet een echt schaakbord, maar niet met stukken, maar met platte markers met de schaaksymbolen, zoals

Een menselijke speler beweegt zijn markers op het bord, maar de computer laat er via het scherm poppetjes op zien. Als nu een stuk een ander stuk slaat, dan zie je op het scherm twee poppetjes vechten. (Een beetje zoals in de Harry Potterfilm, deel 1). “Gewone” toeschouwers zien alleen het bord, maar via het scherm kunnen anderen ook zien hoe bijvoorbeeld een loper een bedreiging vormt voor een bepaald stuk, etcetera. (Idee is nog niet echt uitgewerkt).

Geen reactie's

Sorry, het is niet mogelijk om te reageren.