Audio Color Cubes Visualiser + Augmented Reality

Yesterday I’ve made simple audio visualisation with cubes on wonderfl.net (embedded at the end of the post). User athanassiadis said “really cool effect, would look great in augmented reality“, and I was thinking why not, even if I was never programming using any ARToolki library before. Having 2 hours, I’ve downloaded needed libraries, readed one example and put visualisation code into life in AR. Results
Augmented Reality Flash Results

Flash:

ARVisualiser – only hyperlink because I’ve had weird problems with embedding.

Because of ARToolkit bases on black and white markers, I’ve used one of predefined:
AR marker
So if You want to try given swf You have to print this marker or draw it on some white paper.

And this is standard wersion on wonderfl:

Blob on wonderfl.net

Read the rest of this entry »

Project: DEPTH 01

Ostatnio podróże pociągiem wykorzystuję na kodowanie w ActionScript eksperymentalnej gierki o nazwie “DEPTH 01″. Na podstronie projektu znajdzuje się mini blog z postępów prac, a tutaj napiszę więcej jak już projekt przybierze jakąś konkretną formę.

Podstrona projektu: http://depth.mi-ku.net

Jeżeli ktoś będzie miał jakieś ciekawe idee na rozwinięcie pomysłu to jestem otwarty na propozycje.

SpringBall

W celach nauki Flasha i ActionScript’a stworzyłem prostą mini grę w dwie godziny, w której zieloną kulką trzeba zbić 20 czerwonych w jak najkrótszym czasie.

Sterowanie:
Przeciąganie niebieskiej kulki za pomocą lewego przycisku myszy.

Miałem napisać o projekcie z delfinem w roli głównej, ale zrobię to później, wspomnę tylko, że to projekt do pracy inżynierskiej.

EDIT: Po nauce rysowania w buforze dodałem smugę za kulkami (dla odmiany teraz są dwie zielone)

Porównanie metody Eulera oraz RK4 do integracji równań fizycznych

Swego czasu, tak jak opisywałem wcześniej na blogu implementowałem symulację materiału reprezentowanego przez ciała posiadające jedynie masę połączone sprężynami. Wynik był średnio zadowalający gdyż przy mocnym napięciu sprężyn materiał potrafił „eksplodować”, rezultat ten był spowodowany zastosowaniem „zwykłego” integratora Eulera, czyli inaczej mówiąc wzorów fizycznych pamiętanych ze szkoły średniej. Jako, że nie chciałem żeby materiał zachowywał się jak guma zacząłem poszukiwania rozwiązania tego problemu i natknąłem się na metodę Runge-Kutty rzędu czwartego, dodatkowo pokryło to się jakoś z zajęciami na uczelni na których omawialiśmy RK4 jak i inne metody. Ostatecznie zaimplementowałem ten algorytm posiłkując się tym artykułem: http://gafferongames.com/game-physics/integration-basics/
Wynik jest naprawdę dobry, można napiąć sprężyny bardzo mocno przez co już nie zachowuje się jak guma.
A jako, że ostatnio mieliśmy przygotować referat na zajęcia z Fizyki to ustaliłem z prowadzącym że zaprezentuję ten temat, bo już miałem z tym doświadczenia i pełną implementację. Na potrzeby prezentacji napisałem małe demko w którym można porównać zachowanie materiału z integratorem Eulera oraz RK4

Rezultat:

Do pobrania:

Żeby nie referat to pewnie powróciłbym do tego tematu później, bo w między czasie (teraz a początek semestru) zacząłem robić mini demko symulacji materiału kolidującego z dowolnymi złożonymi siatkami, aktualnie już działa, ale na CPU jest strasznie wolne i przeniosę implementację na GPU – a dokładnie OpenCL a dodatkowo chcę zrobić coś na wzór demka scenowego więc muszę jakoś to poskładać ładnie.

Sense: Skinning

W ramach projektu o którym niebawem napiszę zaimplementowałem do Sense algorytm skinningu. Aktualnie implementacja nie jest uniwersalna, ale do tego projektu wystarczy, tym bardziej, że skinning teraz wykorzystuje “kości” zrobione ze sprężyn :). Rezultat poniżej:

Skinning algorithm presentation

Więcej informacji o projekcie wkrótce, a jakby ktoś w komentarzu napisał żę informacja o algorytmie też by była fajna (ew. ktoś ma problem z implementacją itp.) to opiszę.

Wstępna implementacja GUI 3D z wykorzystaniem Stencil bufora

W tym wpisie chcę się podzielić sposobem implementacji podwalin GUI 3D w swoim frameworku “Sense” przy wykorzystaniu bufora Stencil. Wpis jest prawie artykułem i być może po rozwinięciu tematu taki kiedyś powstanie. Adresatami są osoby zainteresowane tzw. “silnikologią”, czyli pisaniem własnych silników do gier, jednocześnie mające doświadczenie w programowaniu i zaznajomione przynajmniej w minimalnym stopniu z jakimś API graficznym. Pierwsza część wpisu omawia sposób opakowania zdarzeń w system menadżera i jego słuchaczy. Ci co mają taką warstwę abstrakcji już zaimplementowaną (lub po prostu mają ją “gdzieś” :) ) powinni przejść do części opisującej sam system rozpoznawania obiektów pod myszą i przesyłania im zdarzeń.
Read the rest of this entry »

BioShoot

Wprowadziłem kilka poprawek:

  • Kolizje organizm-organizm,
  • kolizje organizm-pocisk.
  • śmierć gracza.
  • dwóch mobilnych “przeciwników”,
  • trochę ładniejsze mutowanie,
  • double-click lewym przyciskiem myszy ustawia cel do strzelania, czyli teraz można poruszać się i strzelać w różnych kierunkach
  • minimalna optymalizacja kodu

Przez te poprawki “gra” nabrała trochę sensu, natomiast brakuje jeszcze celu gry, a tym w zamierzeniu ma być na dojście do odpowiedniego miejsca lub wyeliminowanie wszystkich przeciwników.

Do pobrania

http://www.mi-ku.net/projekty/BioShoot/BioShootR2.zip

Screen shoot’y

BioShootR2 Screenshoot 1

BioShootR2 Screenshoot 2

Rapid Game Prototyping

W zasdzie nie chcę się powtarzać bo na ten temat wypowiedziały już się osoby bardziej zaznajomione z tematem więc dam linka który prowadzi do kolejnych ciekawych artykułów/informacji:

http://www.kloonigames.com/blog/general/articles-about-rapid-game-prototyping

Dla czego o tym temacie wspominam? Otóż na specjalizacji na studiach dostaliśmy zadanie własnie stworzenia prototypu gry w jak najkrótszym czasie. Czyli chcąc nie chcąc (bardziej chcąc :D ) musiałem coś zrobić. Oto wynik pracy która zajęła około 40 godzin:

Opis gry

Jako, że nie mielismy wyznaczonego jasno tematu prototypu to w grze jesteśmy sobie dziwnym organizmem w dziwnym świecie. Chodzi o to żeby zbierać mutatory (power upy) i nie dać się zabić w świecie w którym się znaleźlismy.

Dostępne mutatory:
Zielony – Ciało
Czerwony – Działko (oryginalna nazwa? )
Biały – Osłona
Niebieski – Głowa przy pomocy której możemy się poruszać

Sterowanie

LPM – Poruszanie
PPM – Strzelanie (jeżeli łyknęlismy mutator do strzelania)

Edytor
TAB x1 – tryb edycji świata
TAB x2 – tryb edycji mutatorów

W trybie edytora polecam pobawić się: LPM, PPM, Środkowy przycisk myszy, Del, Shift, Ctrl. Edytor jest w miarę intuicyjny więc się nie rozpisuje – polecam się pobawić. Przeciwnicy są zhardkodowani.

Co nie zostało zrobione

- Tarcie w kolizjach – teraz można się nieźle zaplątać:)
- kolizje między organizmami
- kolizje organizm -> “pocisk” <- co oczywiście chwilowo psuje cały efekt i nie pokazuje gameplayu - co w zasadzie miało być kwintesencją prototypu hehe, ale dodam w kolejnej wersji.
- te kolizje co są nie są oparte na żadnym drzewie ósemkowym itp. w związku z tym gra potrafi nieźle przyciąć kompa

Do pobrania

http://www.mi-ku.net/projekty/BioShoot/BioShootR1.zip

Screen shooty

BioShoot title screen

BioShoot screen shoot 1

Po zjedzeniu zielonego mutatora:
BioShoot screen shoot 1

Pod ostrzałem :)
BioShoot screen shoot 1

Z edytora świata:
BioShoot screen shoot 1

Technikalia

projekt został całkowicie napisany pod frameworkiem PopCap. Z frameworka wykorzystałem głównie: rysowanie przez Graphics, Image, XML, Dźwięki, Obsługę wejścia. Poza frameworkiem dopisalem kilka funkcji pomocniczych do Graphics’a i prostą fizykę sprężyn.

Technicznie trochę prze-engineerowałem jak to się mawia, mam pełny polimorfizm, możliwość dodawania nowych nodów, powerupów, kontrollerów dla organizmów(np. kolejne AI), możliwe jest też napisanie całkowicie innych broni i podpięcie ich w łatwy sposób, np zdalnie naprowadzanych pocisków itp. Wrogowie mogą być również mobilni. Dużo czasu też poświęciłem edytorowi który przynajmniej umożliwia edycje świata i powerupów bo w xmlu bym się zachetał to pisać.

Dźwięki zapożyczyłem ze Starcrafta, więc nie mam do nich praw….. aha odpalając gre lepiej mieć przyciszony dźwięk :P

Podsumowanie

W sumie całość nie jest jeszcze skończona, ale nie mogłem się powstrzymać przed umieszczeniem aktualnej wersji :) a obawiam się że teraz mogę nie mieć już czasu na tą gierkę. Gdy zaimplementuje kolizje pocisków z organizmami i co za tym idzie śmierć gracza to dopiero wtedy okaże się czy gameplay ma sens.

Miłej zabawy z niedokończonym prototypem :) :) :)

Programowanie gier & Biofeedback

Pod koniec zeszłego semestru musiałem wybrać specjalizację kierunku który studiuję (Informatyka na PJWSTK). Do wyboru miałem

  • Bazy danych
  • Programowanie aplikacji biznesowych
  • Sieci komputerowe
  • Multimedia
  • Robotyka
  • Multimedia – programowanie gier

W zasadzie tematyka każdej specjalizacji jakoś bardziej lub mniej mnie interesuje i miałem spory dylemat którą wybrać, w rachubę wchodziło też wybranie dwóch specjalizacji i realizowanie pracy inżynierskiej pod kątem obu. Po długim namyśle wybrałem jakże egzotyczną jak na polskie realia (chociaż ostatnio sytuacja się poprawia) specjalizację “programowanie gier”, gdyż ta bezpośrednio umożliwia mi realizację jednego z pomysłów które siedzą mi w głowie od dawna.

Pomysł

Chcę wykonać grę która będzie wykorzystywała specjalny “kontroler” służący do pomiaru aktywności umysłu, której celem będzie osiąganie stanu relaksu przez grającego. Pomysłów na realizację mam kilka, jeden (podrzucony przez jednego z prowadzących) uwzględnia dwóch graczy gdzie wygrywa ten który szybciej się zrelaksuje, inne pomysły to mini gry w których grający będzie musiał osiągnąć oczekiwany efekt audio-wizualny poprzez relaksację. Taka technika nosi nazwę Biofeedback’u, czyli sprzężenia zwrotnego utworzonego na podstawie odczytu i interpretowania jakiegoś sygnału generowanego przez człowieka i podawania informacji zwrotnych do jakiegoś zmysłu/zmysłów ludzkiego z komputera. Do pomiaru aktywności umysłu chcę wykorzystać metodę pomiaru rezystancji naskórka (galvanic skin response) która jest związana z opornością układu nerwowego, który z kolei pośrednio odpowiada aktywności umysłu.

Biofeedback służący do relaksacji ma poważne zastosowanie w np. w psychoterapii przy leczeniu między innymi ADHD. Może być też wykorzystywany przez ludzi żyjących w ciągłym stresie. W zasadzie zastosowań jest wiele, także mogę coś zrobić co się być może przyda innym.

Wstępna realizacja części sprzętowej

Jako, że do metody którą wybrałem potrzebne jest mi urządzenie komunikujące się z komputerem, a na czas testów nie chciałem projektować własnego układu opartego o mikrokontroler. Między innymi w związku z małym doświadczeniem na tym polu. To wpadłem na pomysł przerobienia analogowego joypada na moje potrzeby. Sposób był prosty, gałki analogowe działają na podstawie odczytanej rezystancji z potencjometru połączonego z gałką sterującą. To jak już pewnie wiecie zamiast potencjometru mechanicznego wystarczy podłączyć rezystancję “ludzką”, oczywiście wbudowane potencjometry mają o wiele mniejszą rezystancję niż skóra i wymagało to drobnych przeróbek, jednak wstępnie się udało. Elektrody na palce wykonałem z rzepów do których wszyłem splotkę przewodzącą prąd (to było najlepsze co mogłem zmontować z materiałów znalezionych w domu), które sprawdzają się całkiem nieźle. W ten oto sposób otrzymałem proste, działające jako tako urządzenie, które po wstępnych testach zachowuje się zgodnie z moimi przewidywaniami, czyli jest

  • nie dokładne – w związku małą rozdzielczość pomiaru, joypad przewidywał tylko 256 próbek, które do gier oczywiście w zupełności wystarczają, jednak tutaj przydało by się przynajmniej tą dwójkę podnieść dwie potęgi wyżej :)
  • nie stabilny odczyt – potrzeba kilka minut na stabilizację układu. To raczej w związku z moją przeróbką
  • Wymagana kalibracja dodatkowym potencjometrem wykonana pod użytkownika

W każdym bądź razie się nie zrażam bo jak na jeden dzień pracy wyniki są zadowalające. W oknie kalibracji joypada da się zaobserwować zmiany rezystancji układu nerwowego. Nawet nie wiedzialem jak bardzo potrafi organizm zareagować na pewne bodźce, np. plasknięcie się po twarzy powoduje gwałtowne przesunięcie wskaźnika kontrolera :) a słuchanie relaksującej muzyki powoduje powolny powrót wskaźnika na dawne miejsce. Kontynuacja relaksacji powoduje jeszcze większe przesunięcie wskaźnika co oznacza, że osiągnąłem większy spokój niż przed zastosowaniem wspomnianego bodźca. Wracając do samego urządzenia to finalnie postaram się zrobić własne na USB typu HID wykorzystujące jakiś mikrokontroler.

Wynik przeróbki joypada:
usb joypad modified to be a biofeedback device

Co dalej?

Pozostaje mi między innymi wymyśleć co dokładnie będzie tematem pracy inżynierskiej i zacząć powoli ją robić (o ile zostanie zaakceptowany :P ).

Sam pomysł biofeedbacku można rozwinąć i połączyć z wspomaganiem samej relaksacji poprzez w pewnym sensie wymuszanie odpowiedniej aktywności umysłowej poprzez pewne bodźce fizyczne, np. poprzez tzw. szumy dudnieniowe służące do synchronizacji półkul mózgowych do pracy w odpowiedniej częstotliwości.

Zainteresowanych odsyłam do poszukania w internecie informacji pod hasłami: biofeedback, gsr, hemi-sync. Swego czasu powstał komercyjny produkt, który w zasadzie odpowiada prawie 1 do 1 temu co chcę zrobić, można o nim poczytać na: www.relaksacja.pl. Do hemi-sync polecam programik Gnuaural. To chwilowo na tyle.