„Sztuczna Inteligencja” i przyjaciele – Nagrania stylizowane na „ruchome obrazy” oraz automatyczne teksturowanie map
Jeżeli oglądaliście kiedyś film „Loving Vincent”, to pewnie zastanawialiście się, jak bardzo angażujące może być wykonanie animacji widocznych tam „ruchomych obrazów”. Obrazów przemawiających do nas nie tylko sztuką, ale również swoim ruchem i gestem. Jak można uzyskać podobny efekt nie zaprzęgając do tego masy zawodowych grafików oraz animatorów? Wbrew pozorom jest to możliwe, dlatego dziś postanowiłem opisać, w jaki szybki i prosty sposób, dzięki użyciu prostych narzędzi, z lekką pomocą tzw. „AI”, możemy to zrobić. Dodatkowo przedstawione tu narzędzie (wbrew swojemu przeznaczeniu) używane jest przez niektóre osoby w procesie wstępnego teksturowania map do gier oraz modyfikacjach do gier.
W ostatnim czasie wiele pisałem na temat tzw. „sztucznej inteligencji” (której efekty sobie tutaj wykorzystamy), tym razem jednak nie ona doprowadzi nas do sukcesu, lecz synteza nieparametryczna oparta na przykładach. Opisana tu aplikacja nie wykorzystuje tzw. „AI”, jednak bazując często tylko na jednej, odpowiednio spreparowanej klatce filmowej, potrafi dostosować całe nagranie (lub serię zdjęć czy grafik), do stylu z dostarczonej klatki. Tym samym przy pomocy kilku kliknięć może zmienić normalny film w animację komiksową lub poruszający się obraz. Skrypt po odpowiednim pocięciu wejściowej klatki kluczowej na wiele małych fragmentów, chwilę później składa z nich finalną klatkę wyjściową. Wspomnianą klatkę kluczową dostarczymy mu natomiast z innego prostego narzędzia, opartego o tzw. „AI”. Efekty mogą zaskoczyć.
EbSynth – przerób swój film na piękną animację!
EbSynth to obecnie darmowy program beta do automatycznej konwersji nagrań, animacji, czy paczek ze zdjęciami, do wyglądu tzw. „stylizowanych ruchomych obrazów”. Wskazując mu materiał źródłowy oraz odpowiednio spreparowaną na interesujący nas styl malarski/graficzny klatkę nagrania, aplikacja automatycznie przerabia całe nagranie na dokładnie taki sam styl. Dzięki temu z realnego nagrania jesteśmy w stanie utworzyć wideo w stylu komiksowym albo ruchomego obrazu olejnego (iście z filmu „Loving Vincent”).
Na rynku spotyka się osoby, które wykorzystują go również do automatycznego teksturowania map w niektórych grach i modyfikacjach, jednak nie do tego został on stworzony. Dlatego też nie radzi sobie za dobrze w tym aspekcie. Aplikacja do czasu, aż nie wyjdzie z fazy beta, dostępna jest za darmo również do zastosowań komercyjnych.
Program pobrać można ze strony: https://ebsynth.com/.
Poniżej postanowiłem opisać, jak przygotować materiały graficzne i wideo do końcowej obróbki, jak odpowiednio przygotować mapy do automatycznego nakładania tekstur oraz jak przeprowadzić już finalne działania.
Przygotowanie materiałów do obróbki filmu, zdjęć lub obrazków:
W przypadku zwykłych nagrań wideo lub zdjęć – co jest przeznaczeniem tego programu – postępować należy następująco:
- Przygotuj odpowiednio nagranie wejściowe lub paczkę grafik wejściowych do przetwarzania. Aplikacja EbSynth wymaga, by każda klatka filmu, który chcemy zmienić oraz grafika, były zapisane jako osobny plik graficzny (najlepiej *.jpg albo *.png) w folderze [SampleProject -> video] – znajduje się on w katalogu programu (lub innym, jeżeli zmieniliśmy ścieżkę). Każdą klatkę należy odpowiednio nazwać, nadając jej kolejny wolny numer i rozszerzenie pliku (w naszym przypadku przyjmijmy nazewnictwo plików od 0000.jpg do 0129.jpg). Ważne! Pamiętaj, że wszystkie pliki graficzne, wykorzystywane przez program, muszą mieć dokładnie tą samą rozdzielczość.
Klatki z filmu wyciągnąć możemy np. przy pomocy programu VirtualDub. Uruchamiając aplikację, przeciągamy nagranie na okno VirtualDub, a następnie wybieramy z menu [File -> Export -> Image Sequence…]. Zmieniamy format zapisu plików na *.jpg i zapisujemy je we wskazanym folderze „video”.
- Przygotuj odpowiednio przerobione klatki nagrania lub przykładowe obrazki, tak by program mógł porównać oryginalną klatkę przed konwersją (dostępną w folderze „video”) oraz taką, którą chcemy uzyskać po całym procesie. Dla przykładu jeżeli chcemy zmienić zdjęcie na styl komiksowy lub przypominający obraz olejny, skorzystać możemy z gotowych, darmowych serwisów wykorzystujących tzw. „AI” do zmiany zdjęć w grafikę (mogą to być np. https://imglarger.com/Cartoonizer lub https://www.instapainting.com/assets). Najlepiej przygotować tak kilka różniących się od siebie klatek, by skrypt miał więcej punktów odniesienia do porównania. Tak przygotowane grafiki zapisujemy w folderze [SampleProject –> keys], w katalogu programu (lub innym, jeżeli zmieniliśmy ścieżkę) – nadając im dokładnie takie same nazwy i format, jak odpowiadające im oryginały w katalogu „video”.
Przygotowanie materiałów do automatycznego teksturowania map:
Jeżeli natomiast zainteresowani jesteśmy automatycznym teksturowaniem map, to niestety w tym przypadku algorytm bardzo często nie radzi sobie z tym (w końcu nie do tego został stworzony). Niektórzy próbują jednak w tym swoich sił, dlatego jeżeli jednak chcesz spróbować, to wcześniej musisz przygotować odpowiednio materiały, zgodnie z poniższą instrukcją. W niektórych przypadkach efekty mogą wyjść zadawalające.
- Przygotuj odpowiednią paczkę map wejściowych do teksturowania. Aplikacja EbSynth wymaga, by każda mapa, którą chcemy automatycznie teksturować, była zapisana jako osobny plik graficzny (najlepiej *.jpg albo *.png) w folderze [SampleProject -> video], mieszczącym się w katalogu programu (lub innym, jeżeli zmieniliśmy ścieżkę). Każdą mapę należy odpowiednio nazwać, nadając jej kolejny wolny numer w nazwie (w naszym przypadku przyjmijmy nazewnictwo plików od 0000.jpg do 0129.jpg). Ważne! Wszystkie mapy muszą być tej samej rozdzielczości – jeżeli któreś są mniejsze, po prostu dodajmy do nich czarne tło.
- Przygotuj odpowiednio spreparowane mapy z nałożonymi teksturami, z których program będzie mógł pobrać próbki tekstur do dalszej analizy. W tym celu musimy do katalogu [SampleProject –> keys], mieszczącego się w katalogu programu (lub innym, jeżeli zmieniliśmy ścieżkę), wrzucić jedną lub lepiej kilka wcześniej teksturowanych map. Następnie do folderu „video” wrzucamy te same mapy (jak w punkcie wyżej), jednak w wersji przed ich teksturowaniem, by program mógł porównać materiał przed i po teksturowaniu, a następnie ten sam szablon tekstur wykorzystać w nowych mapach.
Generowanie efektu końcowego:
Kiedy mamy już przygotowane pliki wejściowe, czas przejść już do właściwych prac.
- Uruchom program EbSynth.exe.
- Sprawdź, czy wszystkie materiały wejściowe zostały przygotowane zgodnie z poprzednimi punktami.
- Przy pomocy opcji „Open” (1) w programie wybierz dołączony z aplikacją projekt „lynx.ebs” znajdujący się w folderze „SampleProject”, w katalogu programu lub po prostu stwórz nowy projekt w tym folderze.
- Upewnij się, że polu „Keyframes” (2) wprowadzona jest ścieżka „keys[####].jpg” (dla plików *.jpg znajdujących się w tym katalogu) lub „keys[####].png” (dla plików *.png). Nazewnictwo plików musi być zgodne z szablonem numerowania, jaki przyjęliśmy we wskazanym folderze.
- Upewnij się, że polu „Video” (3) wprowadzona jest ścieżka „video[####].jpg” (dla plików *.jpg znajdujących się w tym katalogu) lub „video [####].png” (dla plików *.png). Nazewnictwo plików musi być zgodne z szablonem numerowania, jaki przyjęliśmy we wskazanym folderze.
- Do listy zakresów przetwarzanych klatek (4) dodaj tyle pozycji (klikając „+”), ile posiadasz przekształconych klatek kluczowych w katalogu „keys”. Dla przykładu, jeżeli posiadasz tam tylko grafiki o numerach 0000.jpg i 0113.jpg, to na liście tworzysz dwie pozycje, kolejno nadając im w pierwszym przypadku: startową klatkę „0”, klatkę kluczową „0”, ostatnią klatkę „113” oraz ścieżkę zapisu w formie np. „out-0[####].jpg” – pamiętając by liczba pól na cyfry (czyli #) była taka sama jak przy plikach wejściowych. W drugiej pozycji natomiast klatka startowa to „113”, kluczowa również „113”, końcowa np. „129” (jeżeli tyle plików mamy w folderze „video”), a ścieżka „out-113[####].jpg. Możemy też dla obu klatek kluczowych wygenerować wszystkie pliki (od 0 do 129), wtedy po prostu w obu pozycjach na liście wybieramy klatkę startową „0” oraz klatkę końcową ostatnią jaką mamy (w naszym wypadku „129”). Otrzymamy wtedy więcej plików do wyboru na wypadek, jakby któreś nie wyglądały zadowalająco po opracowaniu na podstawie konkretnej klatki kluczowej.
- Klikamy „Run All” i czekamy, aż wszystkie obrazy zostaną przetworzone.
- Gdy mamy już tak wygenerowane klatki, w przypadku nagrania wystarczy już tylko, że złączymy je znów w film (np. prostym edytorem filmów jak Lightworks) lub w animację (ulubionym programem graficznym, np. Photoshopem lub GIMP). Natomiast w przypadku zdjęć, grafik, czy tekstur do map, to właściwie już koniec. We wskazanych folderach znajdować się będą gotowe, przetworzone grafiki, jakie chcieliśmy uzyskać.
Poniżej załączam kilka przykładów wygenerowanych przeze mnie animacji.
Oryginał:
Efekt finalny:
Autor: Daniel 'zoNE’ Gabryś