435. SawalaM
Transkrypt
435. SawalaM
XIII International PhD Workshop OWD 2011, 22–25 October 2011 INTERAKTYWNY SYMULATOR FAL Z INTERFEJSEM BEZDOTYKOWYM GESTURE CONTROLED INTERAKTIV WAVE SIMULATOR Maciej Sawala, Uniwersytet Zielonogórski Abstract This application paper presents the issues related to the simulation of water waves and the use of Kinect controller, as the user interface. First presented, are the theoretical backgrounds on the problem. The basics of the iWave method used in this paper and the specifications of the mentioned controller. The practical implementation was presented in the form of a wave simulator. Presenting the structure of the algorithm and its implementations. Also the work environment and used tools was shown. At the end conclusions were formulated, on the basis of carried out studies of the wave simulator application. (1) t jest czasem a k dwu wymiarowym wektorem zawierającym k = (kx, kz), kx = 2πn/Lx, kz = 2πm/Lz, a n i m są liczbami całkowitymi z zakresu −N/2 <= n < N/2 i −M/2 <= m < M/2 1.1. Fale interaktywne iWave Algorytmy symulacji fal oparte o szybką transformatę Fouriera posiadają kilka ograniczeń, które czynią je nieprzydatnymi w interaktywnej symulacji fal. Przy każdym wywołaniu obliczają one wysokość fal w każdym punkcie siatki. Nie posiadają one możliwości obliczania wysokości fal w określonych obszarach. Poprzez takie zachowanie algorytmu, bardzo ciężko jest go przystosować do problemu propagacji fal z jednego punktu do drugiego. Jeżeli chcemy umieścić w wodzie poruszający się obiekt i obliczać jego interakcję z powierzchnią nie powinniśmy używać algorytmów FFT, gdyż sprawią one że obliczenia staną się bardzo skomplikowane i czasochłonne. W ostatnich latach powstał alternatywny sposób przedstawiania interaktywnej powierzchni wody. Metoda ta, ma na celu obliczenie propagacji nie korzystając z algorytmu FFT. Jest ona znana pod nazwą iWave, a podstawą jej działania jest zlinearyzowane równanie wysokości fali: Streszczenie Niniejszy referat opisuje zagadnienia związane z symulacją fal wodnych oraz wykorzystanie kontrolera Kinect jako interfejsu użytkownika. Na wstępie przedstawione zostało tło teoretyczne dotyczące problemu. Zaprezentowano podstawy działania wykorzystywanej metody iWave oraz specyfikację kontrolera. Przedstawiona została praktyczna realizacja w postaci symulatora fal na podstawie której przeprowadzono wstępne badania. 1. Wstęp teoretyczny Najbardziej rozpowszechnionymi metodami symulowania zachowań fal są algorytmy oparte o szybką transformatę Fouriera – FFT(Fast Fourier Transform). Jest to efektywny algorytm potrafiący obliczać dyskretną transformatę Fouriera ( DFT) i jej odwrotność. Szybka transformata Fouriera posłużyła za podstawę do stworzenia praktycznego algorytmu symulującego fale. Reprezentacja ta, wyraża i pozycje wysokość fali horyzontalną , jako sumę sinusoid ze złożonymi zależnymi od czasu amplitudami: (2) - funkcja wysokości dla pozycji horyzontalnej x w czasie t g- stała grawitacyjna Poprzez zamianę pochodnej czasu w skończone różnice czasu dla jednego kroku ∆t i uzyskujemy następujące wyrażenie dla wysokości fali: 435 Przesył danych o 320x240 16-bitowa głębia przy 30 klatkach na sekundę, o 640x480 32-bitowe kolory przy 30 klatkach na sekundę, o 16-bitowe audio z 16 kHz. System śledzenia ciała o obsługa maksymalnie 6 osób, włączając w to 2 aktywnych graczy, o śledzenie 20 stawów na każdego aktywnego gracza, o opcja przekształcania aktywnych graczy w avataryXbox LIVE.System Audio o party chat Xbox LIVE i głosowy chat w grze (wymagane konto Xbox LIVE Gold), o system redukcji echa, o rozpoznawanie mowy w wielu językach. (3) Dzięki temu wyrażeniu możemy przeprowadzić wyraźną zmianę wysokości fali z jednej klatki do następnej. Najtrudniejsze jest tutaj obliczenie ostatniego wyrażenia będącego pierwiastkiem kwadratowym operatora Laplacianu. Rozwiązaniem tego problemu jest użycie splotu. Wysokość fal jest przedstawiona jako kwadratowa siatka punktów, dzięki czemu korzystając z faktu, iż operacja liniowa na takiej siatce może zostać przekształcona w taki właśnie sposób pozbywamy się tego problemu. W książce [1] przedstawiono podstawy matematyczne tej metody i wszystkie detale implementacyjne. Najciekawszą właściwością tego podejścia jest fakt, iż interakcja powierzchni wody z obiektami odbywa się poprzez bardzo prostą operacje liniową, polegającą na maskowaniu siatek. Każdy obiekt reprezentowany jest jako zbiór punktów, w którym 0 oznacza - obiekt znajduje się w danym punkcie a 1 – nie ma go tam. Wartości pośrednie ustawiane na krawędziach obiektu sprawiają, że animacja jest bardziej realna. Po przyrównaniu tej siatki do siatki wysokości fal, dostajemy realnie wyglądającą interakcję, potrafiącą zobrazować odbicia i interferencje fal. Metoda iWave potrafi dzięki tak prostym operacjom wygenerować wyglądające poprawnie fale i ich odbicia. W Czerwcu 2011 roku firma Microsoft udostępniła niekomercyjny pakiet SDK do kontrolera Kinect. Przeznaczony jest on dla systemów Windows 7 i zawiera dedykowane sterowniki dla urządzenia. Pozwala programistom na tworzenie aplikacji w językach C++, C# lub Visual Basic, w oparciu o środowisko Microsoft Visual Studio 2010, z wykorzystaniem następujących cech: 1.2. Kontroler Kinect Bazą interfejsu bezdotykowego jest kontroler Kinect firmy Microsoft. Jego zastosowanie pozwala na intuicyjne kierowanie i interakcje z symulatorem. Jest urządzeniem przechwytującym ruch, zaprojektowanym jako interfejs bezdotykowy do konsoli Microsoft Xbox 360. Oparty jest on na rozwiązaniach programistycznych opracowanych przez należącą do Microsoftu firmę Rare. Technologie wizyjne zastosowane w sensorze to dzieło izraelskiej firmy PrimeSense. Dane techniczne urządzenia to : Dane z sensorów – pozwalające na dostęp do niskopoziomowych danych z sensora głębi, koloru i wbudowanych mikrofonów; Śledzenie szkieletów – pozwala śledzić obraz szkieletu jednej, bądź dwóch osób, pozwalając na tworzenie aplikacji wykorzystujących gesty i ruchy; Dane audio – pozwala na przetwarzanie dźwięku, w tym stosowanie rozpoznawania mowy, zaawansowane metody filtracji echa i tła, Tworzenie strumieni pozwalających na identyfikacje położenia użytkownika; Pakiet zawiera również przykładowe programy i dokumentacje. Czujnik ruchu o kolorowe soczewki z dużą czułością, o zestaw mikrofonów służący rozpoznaniu głosu, o silnik przechyłu służący do regulacji czujnika. Pole widzenia o poziomy -57 stopni, o pionowy -43 stopnie, o fizyczny zakres wychylenia -27 stopni, o zakres głębi czujnika: 1,2-3,5 metra. Ponadto dostępne są również inne biblioteki i sterowniki dedykowane do współpracy z Kinectem takie jak np.: Sterowniki PrimeSense platforma CLNUI 436 przedstawienie sposobu obliczania tej propagacji pokazano w [1]. W kolejnym kroku kalkulowane są informacje dotyczące występujących na powierzchni przeszkód i źródeł falowania. Dzieje się to wewnątrz metody Propagate() poprzez operację przemnażania siatki obstruction i dodawania siatki source do reprezentacji wysokości wierzchołków powierzchni symulowanej wody. Zarówno operacja ComputeVerticalDerivative()jak i Propagate()wykonywane są w każdym cyklu i stanowią podstawę wyznaczania fizyki ciała płynnego. Główną klasa zawierającą wszystkie metody związane z obliczaniem zjawisk fizycznych jest klasa Sim. Zawiera ona metody odpowiedzialne za realizacje algorytmów związanych z metodą iWave. Znajdują się w niej również metody odpowiedzialne za działania powiązane z symulacja takie jak setObject(), clearObject() pozwalające na ustawienie na siatce pozycji obiektu, Initialize()dokonującej inicjalizacji wszystkich wstępnych wartości siatek czy metody związane z ustawianiem obstrukcji SetObstruction(), ClearObstruction() lub zerowaniem fal ClearWaves(). Klasa ta zawiera również implementację obliczeń związanych z funkcją Bessela stopnia zerowego besselj0(). Po stworzeniu obiektu sym tej klasy, podczas inicjalizacji głównego okna programu zostaje z niej wywołana metoda sym.InitializeKernel() odpowiedzialna za wyliczenia niezbędnego do działania algorytmu stempla. Po wyzerowaniu wszystkich początkowych wartości następuje wywołanie metod odpowiedzialnych za obliczenia symulacji. Wywoływana zostaje metoda sym.Propagate(), która odpowiada za wyliczenie propagacji fal powstających na powierzchni wymodelowanej wody. Przebieg działania algorytmu jest następujący: biblioteka OpenNI projekt OpenKnec 2. Implementacja Podstawą realizacji fizyki jest metoda iWave,[1] potrafiąca wygenerować w czasie rzeczywistym dane potrzebne do symulacji zachowania fal. W trakcie inicjalizacji programu zostaje uruchomiona metoda odpowiedzialna za obliczenie jadra ściskającego (stempla) InitializeKernel(), działająca na podstawie wzoru 4: (4) Gdzie: , , , . Aby mogła ona zadziałać poprawnie, potrzebne są dwie wartości: Funkcja Bessela zerowego stopnia J0(X) i wartość liczbowa G0 skalująca rdzeń obliczana z wzoru 5: (5) Gdzie: , , , Obliczenia te są wywoływane tylko raz w czasie działania całego programu. Kolejnym krokiem potrzebnym do obliczenia prawidłowej propagacji fal jest wywołanie metody ComputeVerticalDerivative() odpowiedzialnej za obliczenie dyrektywy pionowej potrzebnej do prawidłowego obliczenia propagacji. Następnie poprzez wywołanie metody Propagate() dokonywane jest obliczanie propagacji dla każdego punktu siatki reprezentującej powierzchnię wody. Pełne 437 Rys.1. Diagram algorytmu iWave. Fig.1. iWave algorithm diagram. Do dyspozycji mamy tablice Symulowana tafla wody jest reprezentowana poprzez siatkę wierzchołków. Algorytm oblicza zależności dla każdego z nich w czasie rzeczywistym z uwzględnieniem pozycji wszystkich jego sąsiadów. Wszystkie dane związane z wysokością fal, występowaniem źródeł, krawędzi i przeszkód zostały zgromadzone w tabelach. Ułatwia to przeszukiwanie i pozwala w prosty sposób dokonywać obliczeń związanych z danym punktem w siatce. Na Rys.2. przedstawiono budowę tej siatki z widocznymi odchyleniami. height, i vertical_derivative, previous_height. Przechowują one kolejno informacje o wysokościach siatki powierzchni wody, poprzednie wysokości tej siatki, oraz wyliczony w poprzednim kroku rozkład poziomy zachowania prędkości. Mamy też dwie tabele source, obstruction, będące swoistymi wzorcami służące do przechowywania informacji o źródłach i elementach odbijających. Wykorzystywane są one podczas procesu obliczania odchyleń powierzchni wody. Operacja ta ma postać: Przeliczamy nowe położenia punktów odbijających; Wywołujemy metodę ComputeVerticalDerivative()w celu wyznaczenia nowego rozkładu poziomego zachowania prędkości fal; Obliczamy wartości niezbędnych współczynników niezbędnych do dalszej pracy algorytmu adt, adt2; Kolejne przeliczanie nowych wartości wierzchołków składowych tafli wody; o Zapamiętanie aktualnej wartości height; o Obliczenie nowej wartości: height=height*(2.0-adt)previous_heightgravity*vertical_derivative; height[i, j] *= adt2; o Dodanie nowych wartości źródeł i punktów odbijających do wartości z tabeli height; Rys.2. Siatka tafli wody. Fig.2. Water grid surface. Aby usprawnić działanie całego algorytmu, a zwłaszcza jego wywołania, symulacja ulega krótkim przerwaniom. Pomaga to uzyskać płynność animacji, dzięki czemu jej jakość wzrasta. 3. Środowisko testowe Do implementacji interfejsu graficznego aplikacji wykorzystano funkcje pakietu XNA Game Studio w wersji 4.0. Implementacja została wykonana w środowisku Visual Studio 2010 firmy Microsoft i napisana w języki C#. W celu osiągnięcia lepszych efektów wizualnych została wzbogacona o kod, napisany w języku cieniowania HLSL. Okno startowe programu wykonane przy pomocy Windows Form również wykorzystuje elementy pakietu XNA Game Studio 4.0. Zawiera ono zestaw prostych przycisków i paneli, Jest to centralna cześć algorytmu i to ona odpowiada za obliczanie rozkładu i interferencji fal. Obliczenie nowej wartości rozkładu poziomego zachowania prędkości odbywa się poprzez przemnożenie jej poprzednich wartości przez wartości stempla kernel i zsumowanie ich. 438 umożliwiających szybką konfigurację podstawowych parametrów graficznych aplikacji. Główne okno programu wyświetla trójwymiarowe środowisko symulacji generowane za pośrednictwem biblioteki Direct3D. Generowana przez program tafla wody oraz otaczający ją teren są reprezentowane, w postaci współrzędnych wierzchołkowych. Informacja o wielkości terenu oraz powierzchni wody jest wczytywana z pliku .BMP, zawierającego czarno-białą mapę odzwierciedlającą topologię terenu, która jest następnie przekształcana na prostą tabelę. Wykorzystywane w symulatorze obiekty są wczytywane z plików .fbx zawierających informacje o definicji siatki, materiałach, normalnych, koordynatach mapowania oraz kolorach wierzchołków. Aplikacją można sterować za pomocą klawiatury i gestów ręki po wcześniejszym włączeniu tej opcji. Rys.4. Błędne zbyt duże fale. Fig.4. Wrong too big waves. Rys.5. Interferencja fal i odbicie od lądu. Fig.5. Waves Interference and reflections. W tabeli przedstawiono krótki opis wartości mających wpływ na poprawne działanie aplikacji. Odpowiedni dobór ich wartości i poprawne obliczenia wykonane w trakcie działania symulatora zapewniają optymalne działanie Algorytmu i całej aplikacji. 4. Wyniki Przeprowadzone zostały testy związane z poprawnym działaniem symulacji. Działanie algorytmu daje bardzo zadowalające rezultaty. Generowany ruch wody jest płynny i wygląda bardzo realistycznie. Możliwe jest wygenerowanie fal powstałych na skutek ruchów ręki przechwyconych przez sensor Kinect. Efekt osiągnięty przy tego typu próbie jest bardzo satysfakcjonujący. Niestety okazało się, że aplikacja potrafi generować fałszywe wyniki w momencie przekroczenia wartości progowych. Gdy wartość wierzchołków generowanych fal z tablicy height przekroczy bezpieczną granicę 2, wygenerowane fale staja się mało realistyczne. Prowadzi to również do destabilizacji zachowania okrętu testowego, którego ruchy stają się nieprawidłowe. Tab.1. Dane testowe. Test data. SYMULACJA Zmienna/ tablica Opis zależności Zakres wartości kernel Tabela ta zawiera informacje o stemplu, który odpowiada za przeliczanie nowych parametrów fal. Złe dobranie jej wielkości skutkuje niedobrymi rezultatami wizualnymi, bądź dużym obciążeniem sprzętu. Wartości odpowiadające za wielkość tafli wody. Ich dobór ma kluczowe znaczenie dla prędkości działania algorytmu i całej symulacji. Poprawne działanie: 12x1215x15; Mniejsze wartości zakłamują wyniki działania terrainWidt h/terrainHe ight Rys.3. Fale wygenerowane poprzez interfejs bezdotykowy. Fig.3. Gesture generated waves 439 obstruction Tabela ta zawiera informacje na temat przeszkód i utrudnień napotykanych przez fale. Jej wartości muszą być dokładnie obliczane, aby zapobiec niechcianym przestojom lub blokadzie fal. source Tabela zawiera informacje na temat siły Optymalna wielkość siatki: 10x10 – 70x70 Większe siatki spowalniają pracę symulacji Wartości w przedziale 01. Błędna lokalizacja ich występowani a powoduje nieprawidło wości. Wartości 0 < Zbyt wysoka height fal i miejsca ich generowania. Zbyt wysoki dobór parametrów spowoduje błędne, nie wyglądające naturalnie zjawiska falo podobne. Główna tabela odpowiedzialna za przechowywanie informacji o wierzchołkach. Na podstawie danych w niej zawartych obliczane są wszystkie kolejne kroki algorytmu. Jeśli wartości w niej zawarte przekroczą wartość progową 20, spowodują anomalie w działaniu programu, a w ekstremalnych przypadkach rozerwanie siatki. the simulation. The usage of the gesture interface has proved to be a good solution. The Kinect sensor allowed a more intuitive operation. Unfortunately, the main disadvantage of the sensor, which is the delay in the interpretation of the captured motion came up. Fortunately, it doesn’t affect significantly the program. This Sensor usage was the first phase of research aimed at using this technology in more advanced systems, such as motion analysis and motion capture. wartość spowoduje błędy w działaniu. Wartości z przedziału -2 – 2 dają zadowalające rezultaty. Bibliografia 1. J. Tessendorf, „Interactive Water Surfaces,” Game Programming Gems 4 ed. A. Kirmse, Charles River Media,(2004). 2. J. Tessendorf „Simulating Ocean Water” SIGGRAPH 2001 Course Notes 3. F. Limsäter M. Larsson„Ocean Water Animation and Rendering” 4. Ch. Tremblay „Mathematics for Game Developers”, Game Development. 5. „Visual Studio“http://msdn.microsoft.com/enus/vstudio/default.aspx 6. „XNA Developer Center" http://msdn.microsoft.com/enus/library/bb203894.aspx 7. K. H. Nielsen, B. D. Larsen „Vertex and Pixel Shader Quick Reference” http://www2.imm.dtu.dk/~bdl/shaders/ shaderdoc.html 8. „Kinect for Windows SDK” http://research.microsoft.com/enus/um/redmond/projects/kinectsdk/guides. aspx 5. Wnioski Wykorzystana w implementacji symulatora metoda iWave okazała się być dobrym wyborem. Dzięki niej możliwe było opracowanie systemu o małym, w stosunku do innych metod, poziomie komplikacji. Pomimo pozornie prostej realizacji, algorytm ten, potrafi w zadziwiająco dobry sposób oddać zachowanie rzeczywistych fal. Wygenerowane na jego bazie wzajemne interferencje tychże fal i ich interakcja z otoczeniem są zaskakująco dobre. Średniej klasy komputer PC powinien być wystarczający, aby spełnić wymagania symulacji. Połączenie symulatora z interfejsem bezdotykowym okazało się być dobrym rozwiązaniem. Sensor Kinect pozwolił na bardziej intuicyjną obsługę. Niestety ujawniła się główna wada sensora, którą są opóźnienia w interpretacji przechwyconego ruchu. Na szczęście nie utrudnia ona w znaczący sposób pracy programu. Powiązanie sensora z aplikacą było pierwszą fazą badań mających na celu wykorzystywanie tej technologii w bardziej zaawansowanych systemach analizy i przechwytywania ruchu ludzkiego. Adres służbowy autora: Mgr inż. Maciej Sawala Uniwersytet Zielonogórski, Wydział Elektrotechniki Informatyki i Telekomunikacji, Instytut Sterowania i Systemów Informatycznych, ul. Podgórna 50 65-246 Zielona Góra, Polska email: [email protected] 6. Conclusions The usage of the iWave method, proved to be a good choice. Thanks to it, a system with a relative small complexity level was developed. Despite his apparently simple implementation, this algorithm, is capable to give surprisingly good behavior results of waves motion. Generated wave interference and their interaction with the environment are surprisingly good. Mid-range PC should be sufficient to meet the requirements of 440