Ez a demónk egy kísérletből született. Egy ideje nagyon foglalkoztat a házi motion capture gondolata, ezért elkezdtem tanulni az OpenCV-t (amiről hamarosan írok egy poszt-sorozatot). Úgy láttam, ez nagyon jó demo-alap lenne, Grass-al ezért elkezdtük tervezni a demót.
A másik lökést az adta, hogy tavaly megemlítettem egy AmiCon-on is, mivel foglalkozom, és Spenot felajánlotta, hogy kölcsönadja a Kinectjét, hogy azzal is kísérletezzem. Decemberben került sor az átadásra, egy hétig játszhattam vele. Gyorsan lementettem néhány videót, amit majd remélhetőleg fel fogok tudni használni a demóban.
Az egyetlen probléma az volt, hogy megközelítőleg 2GB méretűek voltak a mélységi információk. Ez még a legengedékenyebb compó-szabályzatnak sem felelnek meg. Szükség volt valami tömörítésre. Egy viszonylag egyszerű megközelítést alkalmaztam. Ahol a következő képkockában eltérés volt az előzőhöz képest, ott letároltam a koordinátát és a megváltozott értéket. Ezzel 7 és 11 MB méretűek lettek a fájlok. Úgy gondoltam további trükközésre nincs szükség.
Januárban videókat készítettem egy mobiltelefonnal, amit egy Amigás winchester beépítő kerettel rászereltem egy fotóállványra. A telefon videorögzítő képességével nem voltam megelégedve, mert gyakran minden figyelmeztetés nélkül leállt a felvétel. A másik probléma a színhűséggel volt. A fakó színek miatt a videofájlok feldolgozása volt problémás. Közben folyamatosan fejlesztettem egy kontúr detektáló programot, ami OpenCV-n alapult.
Februárban Grass nekem adta az egyik fényképezőgépét, ami már könnyedén ráült a fotóállványra, a videofelvevő képességével is elégedett lehettem. Egyedül az alacsony akkuidő hátráltatott. A kontúrokat már jól felismerte a program, el is készültek a demó felvételei. Annyit azért meg kell jegyeznem, hogy igyekeztem megkönnyíteni a program dolgát, amennyire csak lehetett, ezért fekete szabadidő ruhában, kesztyűben ugráltam a kamera előtt. Ez télen még nem volt akkora probléma (bár a hó a hátamon megolvadt), tavasszal viszont izzasztó volt.
Úgy emlékszem, ez idő tájt született meg a demo címe is, amit Grass talált ki, egy régi együttes után, akiknek hasonló nevük volt, legismertebb daluk pedig megegyezett az együttes nevével.
Márciusban a felvételekkel párhuzamosan írtam a demót, Grass pedig ellátott különböző tartalmakkal és ötletekkel a színekre vonatkozóan. Mivel elég messze lakunk egymástól, és nem volt demo kompatibilis laptopom, a gépemet megosztottam VNC-vel, így igaz, hang nélkül, de Grass is láthatta, hogyan alakul a produkció. Néhány esetben még az is ment, hogy az ötleteit azon nyomban megvalósítottam.
Néhány jelenetet leszámítva elkészült Revisionig, ahol mindenki tudja, mi történt. Parti után egy ideig nem csináltam semmit, majd ismét nekiláttam foltozni a hiányzó részeket.
Egyetlen nagyon komoly hiányossága volt/van a demónak, mégpedig a trianguláció pontatlansága. A demó ugyanis csak a körvonalat tölti be, majd felosztja háromszögekre és textúrázza a poligont. Sajnos egyes esetekben ez a lépés megszakad és üres lyukak maradnak. Rengeteg időt töltöttem, hogy megoldást találjak. Megpróbáltam egy automatikus módszerrel kiszedni a kereszteződött szakaszokat, de ezzel gyakran kivágtam a kontúr nagy részét, így inkább letettem róla. Próbáltam másik algoritmust készíteni, de azzal egy csomó időt elbíbelődtem, és nem készült el. A határidő viszont kérlelhetetlenül közeledett. Végül megpróbáltam csalni. A lyukakat valami gyors módszerrel befoltozom, de ezek általában konvexé alakították a poligonokat, ami ugyancsak rosszul nézett ki. A végén semmit sem változtattam meg.
A demóban igyekeztem OpenGL 4.1-t használni, mert így sok effektet shaderben tudtam programozni. Sokat segített, hogy nem kell újrafordítani a demót, csak a shader forrásában turkálva állíthatom a paramétereket. Ez főleg akkor volt a segítségemre, amikor a tömegközlekedésen kellett tuningolni a demón. Más racionális oka nem volt a választásnak. Egyébként is úgy szeretek demót írni, hogy valami újat tanuljak az elkészítése közben.
Gondoltam megnézem élőben az @Party közvetítést. Az időeltolódás miatt hajnali háromkor keltem. Megközelítőleg egy órát vártam a csúszás miatt, majd elkezdődtek mindenféle más compók, amikre akkor nem voltam kíváncsi. Reggel 6-ra elérkeztünk a demókhoz. A mi alkotásunkkal kezdték, ami azért volt meglepő, mert Windowsnak tűnt a compógép. De megjelent egy videolejátszó, ami rögtön megmagyarázta a dolgot.
A kép és a hang szétcsúszott, amit tessellation shaderrel oldottam meg, az vagy nem látszott, vagy csillag-szerű formákat rajzolt ki (elég érdekesen nézett ki), majd a vége előtt 15 másodperccel a vége előtt megszakadt a videó. A közvetítést ezután nem is néztem tovább. Bevallom, nem számítottam rá, hogy nyerünk.
A produkciót mindenki megtekintheti a fenti linken, vagy a pouet.net-en. A forráskód elérhető GitHub-on. Ez utóbbinak az az előnye is megvan, hogy Gargaj elkészítette a Windowsos válozatát is. Köszönet érte ezúton is.
A korvonalas reszeket miert nem a Kinecttel csinaltad? Nem lett volna egyszerubb az egesz?
Sajnos nem. A Kinect “látótávolsága” úgy saccolom 4 méter. Ezen a távolságon belül nem tudom azokat a “mutatványokat” megcsinálni. A másik ok, hogy a felvételeket szabadtéren csináltam. (Hogy legyen elég hely). Kivinni a Kinectet, valami számítógépet (még ha csak egy laptop is), szünetmentes tápegységet, hogy legyen elég áram, nagyon nehéz. A felvételek egy részét hóban csináltam. Ennyi elektronikát nem szívesen cipelnék. Harmadik ok, hogy csak egy hétig volt nálam Kinect.
A körvonalak igazából nem okoztak problémát. Problémát a zaj okozott, de erről majd az OpenCV tutoriálomban.
travis miért vannak benne azok az arc hibák? egy vonallal rajzolod körbe? integrallal hülyeség lenne..? amúgy lenne még rajta mit csixolni, de yo munka xtem!
Milyen arc hibákra gondolsz? Ha a zajra, amit az arc kirajzolásánál látsz, akkor az a Kinectből jön. A mélységi információk 11 bit pontossággal jutnak el.
Sok vonallal rajzolom ki őket (minden egyes pont egy vonal), ahol a vonal hosszúsága fordítottan arányos a szenzortól való távolsággal.
Nem tudom, mire gondolsz a integrál kapcsán, de több ötlet is felmerült, hogyan használjunk Kinectet demókhoz. Ez csak egy. Valóban, sokat lehetne még javítani rajta.
A demo közben gondolkoztam, hogy vajon mire kellettek a mélység információk, és nagyon tetszett, amikor kiderült :)
Tényleg kár a hibákért, de remek kis cucc lett ebből. Gratulálok az ötlethez és a megvalósításhoz is!
És várjuk a cikksorozatot!
travis, ez opengl? arc=face ra gondoltam mer 1-2 3xög mindig hibás jobbanmondva nincs “kifestve” étedmán ? =)
gondolom az uccsó.. lehet én a figura közepére egy pontba linkelném az öxes pontot, de akkor meg a konkávok lennének problémásak.. naja mnd1 aza lényeg hogy yo. mér dobták ki revizsönröl?? unklar, de ténneg! amellett a sok xar (má bocs) mellett amiket levetítettek (pl. lal “demó” =)).
ja hülye vagyok, csak most olvastam a teljes postot fent.. sorry :-)
Én poénból azért elnyomtam volna egy “State of the Art” tribute-öt, ott 2:35 tájékán :)
Az én tánctudásommal ez inkább tragédia lenne, mint komédia. Ettől függetlenül nem rossz ötlet.
Szóval azok hibák lennének? :D Kérdezte Murphy is, hogy hát nem látom? Nem… nekem feature-nek tűntek.
Szerintem nagyon jó kis demo ez. Az a kár, hogy végignéztem a közvetítést és valahogy lemaradtam róla akkor.
hat nekem fuggetlenul mindentol ez a demotok most nekem bejott, a hibak nem is zavaroak siman felfoghatoak egy kis design trukkozesnek, meg izgalmassa is teszi a sima feluleteket.
a cim a vegen meg talalo
a zene remekul vitte a hangulatot az egeszben
RawBits: Nem volt nehéz lemaradni róla. Magyar idő szerint reggel fél hét körül került vetítésre.