Autor Wątek: Zastosowanie eye trackingu w grach komputerowych.  (Przeczytany 2502 razy)

Offline 0pako0

  • Użytkownik

# Grudzień 15, 2009, 01:32:44
Eye tracking, czyli śledzenie ruchów gałek ocznych dzięki coraz lepszym kamerom internetowym i coraz szybszym komputerom staje się dostępne dla każdego, bez potrzeby posiadania specjalnego sprzętu. Już wkrótce ta technologia powinna się rozpowszechnić. Na razie sprawdza się świetnie jako np. pomoc dla sparaliżowanych którzy mogą sterować komputerem tylko za pomocą oczu.

Zastosowanie tej techniki w grach komputerowych może dać ciekawe efekty.
Wyobraźcie cobie że możecie grać w pasjansa bez pomocy rąk: http://www.youtube.com/watch?v=XwMoAqgikRM
Do dopiero wygoda heh. To samo w FPS'ach. Możesz celować tam gdzie naprawdę patrzysz... eee... wiecie co ja chyba wole myszkę. Wnerwiał by mnie kursor w każdym miejscu w które spojrzę, niezależnie od tego czy to saper czy quake.

Do czego więc używać eye tracking'u w grach ? Depth of field ! Tak to jest to. Gramy sobie w CoD'a, spoglądamy w dal i widzimy rozmycie które po chwili znika, tak jakby nasze oczy przyzwyczajały się do zmiany odległości. Zerkamy na kumpla w okopie który stoi zaraz obok i znowu rozmycie na ułamek sekundy. To by było coś.

No tak ale czy to wszystko ? Parę efektów bez których można się obejść ? Ja mam pomysł zasadniczo inny. Nie wiem czy ktoś nie wpadł na coś podobnego wcześniej ale nie znalazłem nic na ten temat.
Na początek mały eksperyment. Mam tu filmik na YouTube który należy oglądać w HD i na pełnym ekranie. Na samym początku zatrzymajcie filmik żeby się cały załadował, jest krótki więc nie ma problemu. Na środku ekranu jest biała kropka. Po paru sekundach od uruchomienia filmiku kropka zacznie wędrować po ekranie, zadanie polega na tym żeby przez cały czas patrzeć dokładnie w jej środek, nie spuszczając z niej oczu nawet na ułamek sekundy.

Ok, gotowi ? No to jazda:
http://www.youtube.com/watch?v=wtDF6oB44Ew

Pewnie niektórzy zauważyli co jest grane ponieważ oczy mimowolnie starają się zerkać na boki. Jeśli ktoś nic dziwnego nie zauważył to niech uruchomi filmik jeszcze raz i tym razem patrzy na środek ekranu nie zwracając uwagi na kropkę. Teraz widzicie o co chodzi ?
Nasze oczy tak naprawdę widzą ostro tylko niewielki fragment obrazu na który patrzymy, to co jest po bokach zawsze jest rozmyte, a efekt ostrości powstaje w naszym mózgu który zapamiętuje obrazy na które wcześniej patrzeliśmy bezpośrednio i tworzy z nich większą całość.
Pewnie domyślacie się już do czego zmierzam. Otóż gdyby ta kropka była sterowana przez eye tracking w czasie rzeczywistym, a najlepiej sam obszar wysokiej jakości. Wtedy nawet byśmy nie zauważyli że większość obrazu ma mniejszą rozdzielczość niż miejsce w które patrzymy, a gdybyśmy spojrzeli na coś innego jakość tego obszaru by się poprawiła.
Czyli można by renderować większość ekranu w niskiej rozdzielczości, z mniejszymi teksturami, bez mipmap, bez antyaliasingu, bez blurów i bez masy innych efektów, a cały miód pakować tylko w niewielki fragment obrazu na który patrzy gracz, a efekt dla niego będzie taki sam. Wyobrażacie sobie ile można by w ten sposób zaoszczędzić na wydajności ?
Oczywiście są też minusy takiego rozwiązania. Mianowicie rozgrywkę będzie mogła obserwować tylko jedna osoba. Więc żeby nagrać jakąś machinimę lub gameplay albo zrobić pokaz na targi, czy coś podobnego trzeba będzie użyć jakiejś mega maszyny która wyrenderuje obraz w wysokiej jakości na całym ekranie, ale wydaje mi się że takie ograniczenia są do przyjęcia.
Co myślicie o takim pomyśle ? Może wiecie czy ktoś już pracuje nad podobnym rozwiązaniem ?
« Ostatnia zmiana: Grudzień 15, 2009, 01:37:25 wysłana przez 0pako0 »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kos

  • Użytkownik
    • kos.gd

# Grudzień 15, 2009, 01:38:48
Zgłaszam, że eksperyment się na mnie powiódł (nie widziałem nic dziwnego).

therealremi

  • Gość
# Grudzień 15, 2009, 02:58:43
Czyli można by renderować większość ekranu w niskiej rozdzielczości, z mniejszymi teksturami, bez mipmap, bez antyaliasingu, bez blurów i bez masy innych efektów, a cały miód pakować tylko w niewielki fragment obrazu na który patrzy gracz, a efekt dla niego będzie taki sam. Wyobrażacie sobie ile można by w ten sposób zaoszczędzić na wydajności ?
Nie siedzę w programowaniu grafiki, ale czy czasem potencjalne pole do optymalizacji nie jest zbyt małe żeby zawracać sobie tym głowę? Czy wykonalne jest ładowanie i zwalnianie największych mipmap w ciągu kilku milisekund (bo tyle ci zajmie odwrócenie głowy o kilka stopni żeby spojrzeć na inną część ekranu i inne obiekty)?
Zostają jeszcze efekty post process, ale szczerze mówiąc nie wiem czy da się bez żadnego narzutu zrobić takiego dynamicznego LODa dla fragmentów. Nawet jeśli się da i rzeczywiście efekty będą mogły być lepszej jakości to IMHO srodze przeceniasz ich wpływ na jakość obrazu (typowe dla programistów).

Offline 0pako0

  • Użytkownik

# Grudzień 15, 2009, 04:04:50
Nawet gdyby w grę wchodziła sama rozdzielczość to myślę że i tak się opłaca. Powiedzmy że chcemy wyrenderować obraz 1024x768. Składa się na niego 786432 pikseli. Używając techniki którą wyżej opisałem (nie wymyśliłem jeszcze nazwy, czekam na propozycje  ;) ) możemy najpierw wyrenderować na przykład tło 640x480, a na nim mały kwadracik 200x200. W sumie 347200 pikseli, czyli ponad dwa razy mniej. Mipmapami nie trzeba się przejmować, taka ich magia że w tle zostaną użyte te mniejsze. Glow trzeba by zastosować na całym obrazie bo widzielibyśmy go kontem oka, ale wszelkiego rodzaju rozmycia i antyaliasing tylko na tym małym kwadraciku. Można by też zmniejszyć poziom detali modeli w tle ale z tym mogły by być problemy. Przydatne było by wsparcie sprzętowe dla tej techniki, ale nawet bez tego myślę że można osiągnąć zadowalający wzrost wydajności.

Offline ConayR

  • Użytkownik

# Grudzień 15, 2009, 15:34:00
Tyle że renderując dwa razy wysyłasz dwa razy do karty geometrię. Koniec końców tylko zmieniasz wąskie gardło aplikacji (lub dociskasz istniejące).

Offline _OskaR

  • Użytkownik

# Grudzień 15, 2009, 16:09:15
Niestety na razie, wąskim gardłem jest portfel typowego gracza. :D

Offline 0pako0

  • Użytkownik

# Grudzień 15, 2009, 16:48:35
@ConayR
Dlatego myślę że ta technika dobrze się nadaje do zastosowania w katach graficznych. Gdyby istniało sprzętowe wsparcie można by się pozbyć problemu o którym piszesz.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Grudzień 15, 2009, 18:02:23
Cytuj
Otóż gdyby ta kropka była sterowana przez eye tracking w czasie rzeczywistym, a najlepiej sam obszar wysokiej jakości. Wtedy nawet byśmy nie zauważyli że większość obrazu ma mniejszą rozdzielczość niż miejsce w które patrzymy, a gdybyśmy spojrzeli na coś innego jakość tego obszaru by się poprawiła.
I tu jest pies pogrzebany. Żeby działało to przyzwoicie musiałbyś przewidywać ruchy gałki ocznej. Bez tego można by dostać fioła od ciągłego blurowania się obrazu po każdym ruchu okiem.


Cytuj
Dlatego myślę że ta technika dobrze się nadaje do zastosowania w katach graficznych. Gdyby istniało sprzętowe wsparcie można by się pozbyć problemu o którym piszesz.
Myślę, że w DX11 jest to wykonalne - trzeba tylko odpowiednio użyć antyaliasingu i pixel shaderów per-sample.

Offline 0pako0

  • Użytkownik

# Grudzień 15, 2009, 18:26:00
Im mniejsze opóźnienie tym lepiej, może gdyby było odpowiednio małe nie było by zbytnio uciążliwe. Niestety spore opóźnienie powstawało by używając do badania pozycji gałki ocznej kamerki. Oczywiście można by użyć jakiegoś wyspecjalizowanego sprzętu, jakieś okularki albo coś w tym stylu, ale wstępne założeni było takie żeby nie narażać graczy na dodatkowy koszt. Co do przewidywania ruchu gałek ocznych zanim gracz spojrzy w inne miejsce to nawet dzisiejsze hi-techowe zabaweczki w niektórych instytutach potrafią to zrobić odczytując fale mózgowe, ale minie chyba jeszcze parę lat zanim będziemy mieć takie w domu.
Myślę jednak że można by przetestować tą technikę z jakimś tanim sprzętem do eye trackingu.

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Grudzień 15, 2009, 18:29:26
Kamerki? toż ledwie wyciąga ~24fpsy :)

Offline 0pako0

  • Użytkownik

# Grudzień 15, 2009, 19:56:41
Dlatego piszę że ten sposób będzie dostępny dopiero w niedalekiej przyszłości. Może dzięki kamerką, a może dzięki jakiemuś innemu sposobowi na eye tracking.

Offline Limal

  • Użytkownik
    • http://wolnik.co.uk

# Grudzień 15, 2009, 20:02:45
A co jak cała rodzina siądzie przed telewizorem i wspólnie zechce zagrać w grę?

Offline Troll

  • Użytkownik
    • Oficjalna strona gry Gizarma

# Grudzień 15, 2009, 20:16:48
A co jak cała rodzina siądzie przed telewizorem i wspólnie zechce zagrać w grę?

Przeczytaj zanim skomentujesz, 0pako0 na samym początku napisał, że ten pomysł nie działa w takim wypadku.

Offline rAum

  • Użytkownik
    • blog

# Grudzień 16, 2009, 09:37:33
Wydaje mi się, że LOD dla eye trackingu albo się nie przyjmie albo jakoś nie będzie bardzo popularny...
Za to inne zastosowanie takie jak wyświetlanie głębi - nie widzę przeciwskazań.
http://www.youtube.com/watch?v=KLz3IscAT38 (head tracking, ale widzialem analogiczne na eye trackingu)
http://www.youtube.com/watch?v=Jd3-eiid-Uw (nieco inne podejscie, zwiekszona niezawodnosc)
Kamerki? toż ledwie wyciąga ~24fpsy :)
Co do tego, że kamerki wyciagają ~24 FPS... rozdzialka zaś to 320x240 - no problemo - wraz z wejściem interfejsu USB 3.0 pojawia się kamerka przesyłająca obraz w HD przy 60 FPS (wg. zapewnien producetna) - http://www.swiatobrazu.pl/pierwsza_na_swiecie_kamera_hd_na_usb_30.html

Nie mniej nie rozwiązuje to problemów z warunkami oświetlenia i problemów detekcji, wystarczy że wredne rodzeństwo wpadnie do pokoju i szlag wyświetlanie trafi :P IMHO obecnie jedynym znanym mi rozwiązaniem tego problemu byłyby okulary dla całej rodziny i sekwencyjne wyświetlanie dla poszczególnych osób odpowiednich obrazów.

Tak BTW to skoro juź temat 3d poruszyłem to w domowych warunkach można poeksperymentować z efektem Pulfricha ;)