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