Skocz do zawartości

theMask - cartoon capture engine - v001


olaf

Rekomendowane odpowiedzi

Hej,

nie wiedziałem w jakim dziale to umiescić ale ponieważ postanowiłem sie za to zabrać, to też chcę upublicznić prace, by mieć wsparcie w krytyce i uwagach społeczności. Jeżeli znacie podobne rozwiązania to chętnie o nich usłyszę. Jak macie pytania albo sugestie, to też z miłą chęcią o tym pogadam.

 

co to jest theMask: wsparcie dla animatorów 2d pomagające budować 'motion capture' dla obiektów 2d. Podstawowym założeniem jest wzmocnienie produkcji 2d o możliwości wykorzystania płynnych animacji twarzy z naciskiem na aktorstwo i płynne recytowanie treści.

 

jak będzie działał theMask: zasada jest prosta-zapisane dane będzie można użyć do generowania w czasie rzeczywistym animacji twarzy postaci (wystarczy odpowiednio zbudowana twarz cartoonka). Dane będą przygotowane i oczyszczone wcześniej w edytorze z użyciem nagrania video.

 

timeline: wersja beta za ok 7miesięcy, cały silnik planuję ukończyć prze 2015 rokiem.

 

cel:

-podniesienie jakości 2D do poziomu płynności produkcji 3D bez potrzeby ponoszenia kosztów produkcji o dział 3D.

-Odblokowanie możliwości tworzenia wiarygodnych dialogów dla animacji 2D z poziomem wiarygodności dubbingowanej postaci 3D.

-Odblokowanie segmentu gry aktorskiej dla produkcji mobilnych na poziomie kinowych produkcji 3D

 

Mam nadzieje, że nie opisałem tego zbyt górnolotnie - to taki dodatek do mojej produkcji gier, chciałem wykonać coś nowego jako programista, co będzie jednocześnie skokiem jakościowym dla produktów mojej firmy z jednoczesnym utrzymaniem kosztów/timeline produkcji na poziomie indie developera. Oczywiście jeżeli ktokolwiek uzna to za interesujące będzie miał pełen dostęp do technologii od wypuszczenia bety.

 

Jak komuś nie chciało się czytać, tu ma wizualną interpertację tekstu:

doc_v001_a.jpg

 

doc_v001_b.jpg

Edytowane przez olaf
Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 21
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Świetny pomysł i trzymam kciuki za ukończenie. Kiedyś myślałem by spróbować się pobawić tak by strakować każdy punkt w jakimś afterze czy blenderze no ale wiadomo, że nie było by to w RT więc Twoje rozwiązanie zdaje się być dużo lepsze w związku z czym miał bym kilka pytań.

Czy to będzie miało postać wtyczki do konkretnego softu czy jako osobna aplikacja?

Czy była by możliwość przeniesienia tego do programów 3d oczywiście nie chodzi mi o to by byłe tam 3 osie x,y,z tylko czy tak stworzone kontrolery można by przenieść do 3d?

Czy po wszystkich beta testach planujesz to wypuścić komercyjnie?

Na razie to tyle ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki za koment, tak naprawdę to spodziewam się, ze ktoś mnie oświeci, że takich roziwazań są setki, bo w koncu mamy 2013. Ale przy założeniu, ze moje rozwiązanie będzie z jakiegoś powodu na tyle wygodne, by przydało się innym to na początek planuję przygotować plik wynikowy tak, by nadawał się do szybkiej implementacji w dowolnym środowisku w nadziei, że ktoś zrobi to za mnie :D

Myślę, że będzie to dosyć proste do wtłoczenia w siatkę 3D

Komercja - na razie nie. Jakby spojrzeć 'outside the box' to tylko moze 1% tego co można zrobić jeszcze z grafiką 2D, by była tańsza i efektywniejsza więc kasa to nie jest coś o czym warto teraz myśleć.

Odnośnik do komentarza
Udostępnij na innych stronach

ok poza gadaniem trzeba troche powklejać pracy. Zawsze mi sie dobrze pracuje w piątkową noc, więc udało się przebrnąc przez pierwszy etap pracy - move detection.

Plan pracy mam następujący:

move detection - facial detection - facial tracking - facial recognition.

Po tym dopiero zacznę pracę nad właściwym trackowaniem. Jak widać nie powinno byc problemu by z tego kształtu wytrackować twarz.

 

Co prawda moglbym sie skupić tylko na facial tracking, ale wtedy silnik byłby zbyt skromny i mało elastyczny. Facial recognition nie wyglada na specjalnie skomplikowane zadanie. Będę musiał kupić pozniej lepsza kamerkę, obecnie łapane w 640x480 30fps kamerką z laptopa przy fatalnym oświetleniu. Na razie radze sobie z ziarnem ale pozniej na pewno będę musiał poprawiać oświetlenie i wymienić sprzęt.

 

 

etap trackowania powinien się zakonczyc czyms takim (choc pewnie bedzie to coś znaaaacznie słabszego):

Edytowane przez olaf
Odnośnik do komentarza
Udostępnij na innych stronach

Komercja - na razie nie. Jakby spojrzeć 'outside the box' to tylko moze 1% tego co można zrobić jeszcze z grafiką 2D, by była tańsza i efektywniejsza więc kasa to nie jest coś o czym warto teraz myśleć.

Myśl o komercjalizacji juz teraz - taka moja rada, bo sie mozesz zdziwić ile kasy może przelecieć ci obok nosa jeśli okaze sie ze to co robisz jest bardzo przydatne dla innych.

Odnośnik do komentarza
Udostępnij na innych stronach

tym nie zaprzątam sobie głowy, czas na danie czegoś od siebie.

Poza tym jak sie zorientowałem jak moge jeszcze wykorzystać silnik oparty na widmie (a nie na patternie) to aż nie moge zasnąć więc o kase sie nie martwię, a tymczasem dokończę sobie gierkę ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Ciekawy projekt. O ile rozumiem temat, najtrudniejsza będzie interpretacja danych motion capture w "języku" - czyli przestrzeni - deformacji twarzy cartoon. Jest to chyba trudność większości tego typu projektów - zaczynając od systemów do wspomagania realistycznych animacji twarzy. Jeśli masz na to patent, nic Cię nie zatrzyma :)

Odnośnik do komentarza
Udostępnij na innych stronach

na chwilę obecną mam kilka koncepcji, którymi się podzielę, bo moze ktoś będzie miał jakieś sugeste.

1. doszedłem do wniosku, ze zrobię wszystko na prostej kamerze HD z lapka. Inaczej nie mialoby to sensu. Chcę by grafik nie musiał inwestować kasy w sprzęt, by stać się animatorem, o to chodzi przecież w technologii. Poza tym niezbyt zamożni ludzie mogliby tak dorabiać pracując zdalnie. Po prostu walnę jakieś suwaki do kalibracji i jak defaultowo nie zatrybi (mogę wykryć dosyć prosto zakłócenia widma) to wyświetlę tutorial do suwaków.

2. Ponieważ samo zadanie nie wydaje się tak skomplikowane jak napisanie oprogramowania do montażu scen (takiego przygotowującego zgrzebną sekwencję i wstępnie 'odszumiającą' wynik) pomyślałem, by produkcję sesji FC (facial capture) wykonać w takich krokach.

-najpierw nagrywamy video audio w naturalny sposób jako preview

-następnie wycinamy sobie (w tym właśnie programie) fragment sceny jaka będzie nas interesowała

-software rozpoczyna odtwarzanie sceny z audio 2x wolniejszym, tak by każda 30fps kamerka mogła zarejestrować bardziej płynną sekwencję - w przypadku twarzy jest to do wykonania przez operatora - w motion capture byłoby pewnie trudnejsze ;)

-oglądamy podgląd takiej sceny z podwójną prędkością, by zobaczyć czy nie przesadziliśmy z mikroekspresjami (zakładam, ze operator będzie musiał zrobić za pierwszym razem kilka prób, by się tego nauczyć)

-video '60fps' jest przetwarzane na ruch cartoonka

-operator ma timeline i krzywe ekspresji (czyli np. moze w chwili podnoszenia brwi podbić hiperekspresje w wyniku czego brwi postaci podniosą się 4x wyżej tworzac naturalnie cartoonkowy przerysowany facial expression), pozwoli to też z jednego setupu tworzyc rozne warianty dopasowane do charakteru postaci (moze z czasem powstanie baza takich sekwencji do podpięcia bez tworzenia wlasnej sesji).

 

@Symek - tak to będzie w zasadzie papierek lakmusowy dla przydatności całej aplikacji więc faktycznie jest to coś co może być najtrudniejsze. Mam olbrzymią nadzieję, że krzywe ekspresji załatwią sprawę, plan B jest taki, że na%^$bie suwaków i będę się tydzień wyginał do kamery budując optymalny preset, który pozniej user w mniejszym stopniu zmodyfikuje.

 

I nie pytajcie o kod, jestem zbyt leniwy i nie znam matmy więc stosuje 'brute force'.

Odnośnik do komentarza
Udostępnij na innych stronach

nie szukałem, bo jakby było, to bym wiedział, bo wszystkie animacje dookoła wyglądałyby inaczej ;)

 

ale faktycznie AE ma bardzo fajne narzędzie:

tylko problem w tym, że zawsze czegoś brakuje w takim rozwiązaniu.

Mi potrzebne są krzywe ekspresji, bo szukam raczej czegoś takiego:

 

dodatkowo w otwartym formacie pozwalającym generować animację w grze z danych zamiast z klatek w czasie rzeczywistym, plus łączyć kolejne sekwencje zwyczajnie dodając je do timeline, z taką łatwością z jaką łączy się ze sobą sekwencje dźwięków.

 

A na koniec - dzięki presetom (wspomnianym krzywym ekpresji) mieć bazę najpopularniejszych gestów, ktore mozna dopasować do każdej postaci w przyszłości. Np. jeżeli zrobię klucze dla ust, to moja postać może żonglować własnymi ustami i rozglądać się na boki normalnie oczami, a całość powinna nadal działać poprawnie jako recytowana przez aktora kwestia z jednego obiektu.

Albo zrobić chór podobnych postaci z różnymi wartościami eksprecji i kazdy z jednego presetu i jednego obiektu nieco inaczej będzie się zachowywał śpiewając ten sam refren. I takie tam. Nie wspominajac o fakcie, ze mozna ten sam preset uzyc dla postaci z profilu, półprofilu i stojącej bokiem.

Dlatego na początku napisałem, że gdyby coś takiego było, to by animacje - głownie - domorosłych animatorów wyglądały inaczej.

Odnośnik do komentarza
Udostępnij na innych stronach

Trudno uwierzyć, ze trackery przepypiete do jakiegokolwiek rigu zaowocują dobrą jakością animacji. Im bardziej cartoonowa będzie w zamiarze, tym trudniej będzie ją uzyskać. Te amatorskie mocapy dla AFX są tego najlepszym przykładem. Z punktu widzenia algorytmu to, czy jest to animacja 2d czy 3d nie ma właściwie znaczenia (może dla trackowania), głównym komponentem jest mapowanie animacji wejściowej na docelowe blenshapy - te setki suwaków, o których mówi Olaf. Tylko, że suwaków musiałoby być conajmniej tyle ile trackerów * kontrolki rigu * wymiary. Może w jakiejś uproszczonej wersji to sie uda, ale czy warte będzie zachodu? Chyba, ze dla rozrywki. Zobacz faceshift.com - cały myk tego oprogramowania nie polega na trackowaniu, ale na mapowaniu jednych danych na drugie - a to obawiam się jest ciężka algebra liniowa, interpolacja rozproszonych danych, przemiarowywanie funkcji i takie tam... :) , w faceshift ma sie to za kilkaset euro rocznie z wejściem realtime do unity na przykład... Poprzeczka stoi wysoko :)

Odnośnik do komentarza
Udostępnij na innych stronach

Faktycznie otrzymanie w miare czystego modelu ruchów, dodatkowo na tyle czułego by dało się skalować ekspresję będzie trudne więc podczas pracy nad innymi rzeczami myślałem o rozwiązaniu.

Wstępnie wymyśliłem coś takiego - będę to jeszcze dopracowywał - jak mapy elastyczności. Coś jak specular map w modelu 3D.

 

Poniżej wstępnie wymalowana mapa dla twarzy ruszającej się w jednej osi (zielone) i w obu osiach (czerwone). W miarę produkcji będę dopracowywał detale tej mapy (8bitow dla kazdej wartosci). Dzięki temu skrypt będzie wiedział gdzie może oczekiwać punktu w następnej klatce, co pozwoli mu interpolować rozmazane/zgubione punkty. Dzieki temu będę musiał trackować dokładnie jedynie np. dwa punkty na całej twarzy, reszta nawet błędnie odczytana nadal pozostanie w granicy wiarygodności i zaoszczędzi mi kilkudziesięciu suwaków.

rigStiftnessA.jpg

 

To jest model, ktory bedzie dojrzewał, to czy jest juz w pełni gotowy pokaze próbny skrypt, ktory wygeneruje przypadkowy setup twarzy bez trackowania - cała twarz powinna wygladac nadal wiarygodnie. Podobnie w sytuacji, gdy skrypt zgubi np. 80% punktów ale wytrakuje poprawnie oczy i 20% punktów, powinno się udać wiaygodne odtworzenie mimiki uchwyconej kamerą.

 

Oczywiscie nie bede tego rozpisywał na wzorce tylko - jako grafik - na dane wizualne. Sorry ze pokazuje to na takiej małpiej mordzie, ale tylko taką twarzą dysponuję ;)

Odnośnik do komentarza
Udostępnij na innych stronach

dzięki man, na pewno się przyda jak bede ruszał do inwestorów z produktem.

Oglądałem za namową kumpla możliwości OpenCV (open sourcowa biblioteka do trakowania) ale jednak nie współgra to z moją ideą.

Na chwilę obecną mam w xMind rozpisane sporo rzeczy, głownie założeń edytora, bo styczeń jest miesiącem premier gier mobilnych, ale postanowienie noworoczne mam, by wypuścić dwa programy uzytkowe bazujące na tym silniku. Ten drugi zapowiada się masywnie i pewnie trafi na kickstarter ale muszę zdobyć know-how podczas pracy nad pierwszym ;)

Odnośnik do komentarza
Udostępnij na innych stronach

nie no, soft będzie za free, mysle ze import elementów twarzy z plików png i pozniejszy eksport metadanych lub sekwencji png jest do wykonania - adobe air sobie poradzi z tym spokojnie i pewnie na początek takie coś będzie dostępne.

Inwestorzy potrzebni będą pozniej mam nadzieje, ze uda się w 2015 zrealizowac wieksze plany.

 

Tymczasem niewielkim nakładem godzin, których ciągle mało, zrobiłem generowanie widma i trakowanie twarzy. Ten zoptymalizowany obszar (dolny obrazek, czerwony obszar) będzie finalnym obiektem badania skryptu. Nie wiem czy użyję kaskad (Haar Cascade) czy czegoś indywidualnego. Jak widać na obrazkach A i B mam marker-klip, który będę dopasowywał do obszaru. Pomoże mi złapać skalę twarzy, rotację (w razie jakby ktoś miał krzywy ryj) i inne rzeczy. Niebieskie punkty będą szukały oczu, reszta będzie pomagała interpolować możliwe położenia naszej twarzy, by szukanie oczu było wydajniejsze - szczególnie gdy osoba będzie przypadkowo przybliżać/oddalać głowę od obiektywu.

 

Wiem, że to banalne, każdy 1-szo roczniak z polibudy zrobiłby to w matlabie, ale generalnie początek jest banalny, co nie zmienia faktu, że muszę go mieć zanim pójdę dalej. I najlepiej by nie zabijał kompa durnymi obliczeniami. Myślę, że wystarczy ok 16tys iteracji/klatkę by wytrakować wszytko czego potrzebuje w twarzy ze sporą dokładnością. Kazdy kolejny punkt dzieki mapom elastyczności znajdę w pewnie 64 krokach.

 

hTrace.png

Odnośnik do komentarza
Udostępnij na innych stronach

Ponieważ siedzę w temacie już długo to dam ci trochę referencji do softów, które już istnieją i działają. Jakbyś poszperał trochę na youtubie to znalazł byś masę tego. Od wielu lat już różne firmy probują rozwijać bez markerowe rozwiązania. Parę lat wstecz mi się udało zrobić mały skrypcik pod maxem do animacji twarzy. Działał właśnie z openCV w realtimie. Jedyny minus był taki, że przy dużej ilości markerów max i jego jedno wątkowość, w połączeniu z moim pseudo algorytmem nie wytrzymywał obciążenia, gubiły się klatki i nie działało to super płynnie więc sobie odpusciłem i projekt czeka na lepsze czasy i trochę szerszą wiedzę. W twoim przypadku to jest bez znaczenia czy to jest pod animacje 2d czy 3d, wszystko się opiera o morphy i wartości 0 - 1.

 

a tu popularne softy na czasie:

 

http://facewaretech.com/products/software/

http://www.brekel.com/brekel-kinect-pro-face/

http://www.di-o-matic.com/products/Software/Maskarad/#page=overview

faceshift ktoś podał u góry

 

Powodzenia, będę ci kibicował.

Odnośnik do komentarza
Udostępnij na innych stronach

dzieki, ze rzuciłeś swym super okiem w wątek ;)

video z tych programów przejrzałem i dzieki za cynę. Faktycznie działają bardzo fajnie na szczęście/nieszczęście nie pokrywają się z moimi potrzebami i przeznaczeniem softu.

 

Wczoraj rozpisałem się ale w nocy do głowy przyszedł mi pomysł lepszej optymalizacji. Widać to na video - niebieska otoczka. Teraz trakuję core twarzy i miejsce jej zanikania, co pozwala mi określić jak twarz się porusza, kiedy się np. przechyla i jak zmnienia się odległość od kamery. To pozwoli pewnie w tym mies wstępnie podpiąć cartoonka bez trakowania jeszcze punktów z czego w sumie jestem bardzo zadowolony, bo odpada cała masa obliczeń by ustalić te podstawowe stany.

 

Są też suwaki, by aktor sobie dostosował otoczenie przed nagraniem.

Odnośnik do komentarza
Udostępnij na innych stronach

ok miałem ostry zastój ale było to spowodowane brakami w skillu. Okazało się, ze potrzebuje czegoś znacznie wydajniejszego niż openCV, a wcześniej nie potrafiłem napisać takiej biblioteki.

Teraz powoli sie za to zabieram, ale najpierw chcę mieć bibliotekę, bo mogę ją ładnie zmonetyzować (image recognition/AR), by wesprzec dalszy developement.

Odnośnik do komentarza
Udostępnij na innych stronach

Ok ponizej prosty opis metody.

Oczywiście to tylko syntetyczny przykład ale może ktoś zna już podobne rozwiązania i we pod jakim hasłem szukać cudzej wiedzy.

Metoda na pewno nadaje się do rozpoznawania transformacji np. obrotu, estymowania kształtu obiektu (round/non round to banał, inne to już wyzsza matematyka), mogę też wywnioskować jaki obiekt jest statyczny, a jaki ruchomy więc powinno działać przy kluczowaniu bez greenscreena i inne pierdoły warte zagłębienia się.

Na pewno badanie więcej niż 1piksela daje większe pole do popisu, ale chcę zacząć skromnie ;)

 

Co ciekawe, metoda nadaje się do wszelkich algorytmów probabilistycznych - czy to estymowanie pozycji w bazie danych (redukuje zakres), kompresja pakietu danych, przewidywanie zachowań/detekcja anomalii, o image recognition nie ma co wspominać. Metoda nie wymaga kaskadowej analizy obrazu. Chciałbym więc to rozgryźć matematycznie dlatego wklejam zajawkę, może ktoś poratuje ciekawym linkiem/słowem kluczowym.

 

colorTracking.png

Edytowane przez olaf
Odnośnik do komentarza
Udostępnij na innych stronach

fajny projekcik :) moze te linki Ci się przydadzą :)

 

 

http://blog.mashape.com/list-of-50-face-detection-recognition-apis/

 

 

impresive :)

Displaced Dynamic Expression Regression for Real-time Facial Tracking and Animation

http://gaps-zju.org/DDE/

http://www.fxguide.com/fxguidetv/fxguidetv-198-siggraph-asia-2014/

 

automatic acquisitions of high- fidelity facial performances using monocular videos

Controllable High-Fidelity Facial Performance Transfer

Facial Performance Enhancement Using Dynamic Shape Space Analysis

 

 

http://facetracknoir.sourceforge.net/home/default.htm

http://www.visagetechnologies.com/#&panel1-2

https://facerig.com/

http://www.tastenkunst.com/#/brf/download

Edytowane przez Imperator
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności