Skocz do zawartości

[RIGGOWANIE] FACIAL CONTROL PANEL [3dsMAX]


Rekomendowane odpowiedzi

Napisano

facialcontrol2lu5.jpg

 

 

http://pl.youtube.com/watch?v=ZCWpj3zLeec

lepsza jakosc http://rs248gc.rapidshare.com/files/66100767/Facial_cntrl_panel.mov (36mb - link bezposredni, quick time)

 

Witam szanowne grono. Jest to mój pierwszy tutorialek taki wielki, więc proszę nie bijcie po oczach.

 

 

Facial Control Panel - jest to prosty sposób nad zapanowaniem milionów morph targetów, jest to przyjemny interfejsik budowany wyłącznie w maxie miedzy wersjami 8 - 2008 bez dodatkowych scriptów pluginów i innych dupereli. Panel ten jest na pewno nieodłącznym przyjacielem dla animatorów chcących szybko z animować mimikę twarzy. Tutorial ten przeprowadzi was za raczkę, krok po kroczku przez podstawowe czynniki budowania takiego panela. Jak zbudujecie swój własny panel będziecie mogli go później używać w różnych projektach, dopasowywać do indywidualnych postaci bez potrzeby budowania takowego za każdym razem. Pliki które tu znajdziecie możecie używać dowoli, upgradować sobie przekształcać, co tylko dusza zapragnie . Najlepiej oczywiście zbudować taki panelik samemu aby nauczyć się paru fajnych dodatkowych rzeczy, dowiedzieć się jak działają dokładnie takie procesy, co od czego zależy i bla bla bla.

 

No to JAAAAzzzdddaaaaa dalej Biala gwiazda...

 

1. Budowa panela

 

Rys1.

fc1mw5.jpg

 

Ze zwykłych splinów budujemy wygląd naszego panela, może to być cos ala humanoidalnego, może być to panel na zasadzie mixera lub cos podobnego, użyjcie własnej wyobraźni. Na początku trzeba przemysleć, co potrzebujemy aby ożywić naszą twarz jest to o tyle potrzebne, żeby niepotrzebnie nie dodawać miliona funkcji, w których się będziemy tylko gubić. Mój panel składa się z podstawowych rzeczy:

 

- 1 - ZUCHWA - będzie się poruszać: dół, góra, i niewiele na boki czyli lewo i prawo

 

- 2 – KĄCIKI UST – będą poruszać się oczywiście tez góra, dół i na boki

.

- 3 – POWIEKI GÓRNE – Tutaj wystarczy nam ruch po osi Y czyli góra dół

 

- 4 – POWIEKI DOLNE – jak wyżej

 

- 5 – BRWI – tutaj będą nam potrzebne ruchy w 4 strony czyli znowu: góra, dół, lewo, prawo

 

Dzięki tym podstawowym składnikom będziemy wstanie otrzymać typowe wyrazy twarzy

 

1.1 Teraz potrzebujemy aby nasze spliny miały ograniczenia ruchu. Jest to najważniejsza spawa w naszym paneliku. Potrzebujemy tego po to aby nasze części twarzy jak i morphy nie rozjeżdżały się. Wszystko musi być piękne i spójne. Części te ograniczymy polem kwadratu, ja użyłem wartości 5 i 10 uprości nam to później operowanie między wartościami w reaction menagerze.

 

Rys.2

fc2lp8.jpg

 

Zaznaczamy spliny, nazwijmy to Face_Controls, i centrujemy ich pivoty.

 

Rys. 3

fc3qv6.jpg

 

Tworzymy sobie wspomagacze, ja użyłem kółeczek w tym wypadku. Dlaczego je tworzymy? - Będzie wyjaśnienie później. Kopiujemy je tyle razy ile mamy naszych Face_Controlsów (ah te mieszanki angielsko – polskie), tak jak na obrazku – te żółte kółeczka.

 

Rys. 4

fc4et2.jpg

 

Robimy align (alt+a) kółeczek do odpowiadających ich face_controlsom.

 

 

Rys. 5

38475293qf0.jpg

 

Rys. 6

fc6yt7.jpg

 

Na początku trzeba ustawić hierarchie. Zaznaczamy dany kontroler twarzy i linkujemy go z odpowiadającym mu kółeczkiem (Rys.5) nazwijmy je face_IK_controls bo to głupio brzmi - kółeczka. Nastepnie zaznaczamy wszystkie face_IK_controls i linkujemy je z naszą „głową rodziny” (rys. 6). Może to być Ramka czy też obrys głowy, czy cokolwiek (droga wolna) będzie najwyżej ustawionym obiektem w hierarchi. Dzieki temu zabiegowi będziemy w stanie ustawić nasz panel gdzie dusza zapragnie, skalować panel, a także zapisywać później pressety naszych min (o ile powstanie kolejny tutrorial z mojej ręki na ten temat).

 

Rys. 7

91115142hu6.jpg

 

Kiedy zlinkowaliśmy je wszystkie ze sobą to możemy przejść do fazy tworzenia ograniczeń. Zastosujemy w tym wypadku controler FLOAT LIMIT (dostepny od 8v Maxa). Odpalamy CURVE EDITOR. Zaznaczamy jakiś nasz Face_controler, odnajdujemy go na liście -> Transform -> Position - > X Position zaznaczamy lewym - > ciskamy prawym -> z listy wybieramy ASSIGN CONTROLER, pojawia się menu -> wybieramy FLOAT LIMIT, dajemy OK.

 

Rys.8

11696921fe3.jpg

 

Pojawia nam się takie coś jak na obrazku. Wpisujemy poprostu limity dolny i górny.

 

Rys. 9

92814870yu1.jpg

 

To samo robimy dla osi Y, czyli clikamy w Y position - > wybieramy assign controler.

 

Rys. 10

10jd9.jpg

 

Wpisujemy wartości, które będą ograniczać ruch naszych Face_controlerów. W moim przypadku tak jak wspomniałem wcześniej użyłem wartości 10 dla danego boku kwadratu, w którym ten kontroler będzie się poruszał. Aby był on wycentrowany na samym środku wpisujemy wartość od -5 do 5 dla osi X i Y. Możecie oczywiście użyć dowolnej wartości. Po zabiegu tym, powinniście mieć już ograniczone pole manewru w poruszaniu naszymi kontrolerami.

 

Rys. 11

11gl8.jpg

 

Małe podsumowanie. Utorzylismy nasze Face_IK_controlery i zlinkowalismy do nich nasz Face_controlsy, aby stworzyć lokalną hierarchię. Dzięki temu nasze Face_controls będą poruszać się tylko wokół naszych Rodziców - Face_IK_control. Nastepnie nasze Face_IK_controlery zlinkowaliśmy do naszej globalnej główki, która to będzie kontrolować położenie, skalę naszego Facial_control_panelu.

 

Rys. 12

12gl1.jpg

 

Robimy to samo z pozostałymi Kontrolerami naszego panelu. Dla Powiek w tym wypadku ustawiamy tylko jedną oś aktywną Y, dla niej użyłem wartości 2.5 (jak później się okazalo i tak za dużo), Należy ustawić tak wartość najlepiej aby dla minimalnej wartości powieki górnej ( w moim przypadku -2.5) i maksymalnej wartości powieki dolnej (2.5) żeby się nie nachodziły na siebie powieki bo to nieładnie wygląda później na panelu.

 

Rys. 13

13fx3.jpg

 

Przechodzimy do zakladki w Command Panelu -> hierarchy -> Link Info i wyłączamy w rolloucie LOCkS osie X i Z dla Move. Poprostu nie będziemy ich używać, a zablokuje nam to ich przemieszczanie.

 

Rys. 14

14en5.jpg

 

No to mamy gotowe już wszystkie ograniczenia. Nasz Face panelik jest gotowy, zróbmy małe porządki jeszcze.

 

Rys. 15

15ku4.jpg

 

Tworzymy sobie warstwy odpowiadające naszym controlerom. Ukrywamy face_IK_controlsy bo nie będą już nam potrzebne,

 

Rys. 16

16ka7.jpg

 

FINITO

  • Like 7
  • Odpowiedzi 28
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

hyhy... ale szybki odzew.. tak prawde mowiac.. tyle pisania i tyle roboty z tym cholerstwem, ze napewno prosciej byloby zrobic vidiotutka. Problem polega na tym, ze jestem zawalony robota poza praca ;) A w pracy troche nudy czasami i wolnym czasie sobie dlubalem po trochu .. ale cicho sza .. ;). Jak bedzie duze zainteresowania to zrobie vidiotuta ale juz ze wszystkimi opcjami i bajerkami, poki co musze dokonczyc pisac reszte, co mi wiecej zabiera czasu niz zrobienie calego panelu z morphami.

  • Like 1
Napisano

Filmiki tez juz widzialem, powiem tyle, ze jezeli zrozumiecie na czym polega budowanie tego panelu, bedziecie wstanie zriggowac sobie nawet bude dla psa. Najwazniejsze jest zrozumiec jak to sie robi.. a mozna pozniej z tym wiele rzeczy robic. Ogolnie idea dlaczego robie tego tutka jest taka, ze za free nie znajdziecie opisu krok po kroku jak to zrobic, a jest to sprawa banalna. Sam dochodzilem do roziwazania tego dosyc dlugo, bo pierwsze moje nieudolne panele probowalem robic na podstawie scriptu joystic. Tutaj pokazuje zasade - dowolnosc formy, funkcji, wszystko przejrzyscie jak komu sie podoba. Filmiki ktore pokazales bazuja na zasadzie panel - strach bones, moj to panel - morphy ale zasada dzialania jest identyko i robi sie tak samo wszystko.

  • Like 1
Napisano

Czesc druga (ps. nie zmiescily sie wszystkie obrazki w pierwszym poscie i musialem to rozdzielic ;[ )

 

 

2. REACTION MENAGER – przypisywanie naszych morphow do face_controlsow

 

Rys.12

fc12kz9.jpg

 

Zaczynamy zabawę od zbudowania naszych morph targetów. Będzie ich nam troche potrzebne, jak widzicie na rysuneczku. Tyle ile maja kierunków nasze kontrolery twarzy tyle powinniśmy mieć morphów. Ja dzielę sobie zawsze to na grupy i układam w taki sposób jak wygląda panel mniej więcej. Robię to dlatego, ze pozwala mi to w uporządkowany sposób przypisać targety do morpha, a następnie ułatwia mi to życie w reaction menagerze. Jeżeli macie łeb jak kapusta albo i większy to róbcie jak chcecie, ale PONAZYWAC odpowiednio te targety musicie, bez tego ani rusz. Jak widzicie na moim przepięknym rysuneczku podzieliłem sobie je odpowiednio, dla tych co maja słaby wzrok to opiszę. Weźmy dla przykładu grupę Lewego_kącika_ust – są to 4 targety, odpowiadają one wyłącznie za ruchy powiedzmy mięśni lewej strony twarzy(orientacja z naszego punktu siedzenia, patrząc na monitor – czyli ja nazywam wszystko lustrzanie) . Na koniec powiem tylko jeszcze tyle, że nie jesteśmy ograniczeni tylko do 2 czy 4 targetów dla danego controlera – możemy przypisać nawet 8, dodając kolejną oś to możemy dojść do 24 target morphów dla jednego controlera. Jest to niestety bardziej skomplikowana już sprawa, której tutaj nie będę poruszał. Jak widzicie taki panel potrafi naprawdę wiele rzeczy robić. Wyobraźcie sobie teraz jakbyście mieli 100 morph targetów i trzeba było przesuwać każdy po troszku i ustawiać suwaczki. Controlery nasze można przypisywać nie tylko do morphów, można stosować je do przeróżnych różności, o których pewnie sam nie mam pojęcia.

 

Rys.13

fc13nw8.jpg

 

Do głównej główki (o ile można to coś na obrazku tak nazwać) trzeba przypisać morph targety. Jest to prosta sprawa. Wybieramy pusty slocik, ciskamy lewym klawiszem gryzonia w guziczek PICK_OBJECT_FROM_SCENE i wyszukujemy odpowiedniego targeta, następnie lecimy z kolejnym slotem.

 

Rys. 14

fc14ra8.jpg

 

Odpalamy reaction menagera. Znajdziecie go w menu ANIMATION ->

 

Rys. 15

17ml4.jpg

 

Ponieważ ja robię zawsze wszystko odwrotnie, to zaczynamy od lewej dolnej strony. W Reaction menagerze wybieramy czarny krzyżyk. Jest on masterem. Czyli wybieramy naszego tatusia, ma on gromadkę dzieci. Jak tatuś machnie ręką prawą w prawą stronę to dzieci polecą do Tesco na zakupy, jak tatuś machnie ręką prawą w lewą stronę to dzieci polecą wyrzucić śmieci ;) Mam nadzieje, że jest to zrozumiałe. Wybieramy naszego tatusia, ja zaczynam od Lewego_Kacika_Ust (face_controlera), pojawia nam się takie coś – nawet nie wiem jak to nazwać – menu – wybieramy transform -> Position -> X position -> Limited. Teraz musimy ustalić co będzie się działo jak Lewy_Kacik_Ust zacznie się ruszać po osi X.

 

Rys. 16

fc16nf4.jpg

 

Po wybraniu osi X pojawiła nam się nazwa naszego controlera / X position. Teraz wybieramy krzyżyk szary na prawo (ADD_SLAVE) od czarnego i wybieramy dzieci, które pobiegną do sklepu i te które pójdą wyrzucić śmieci. Po wciśnięciu krzyżyka clickamy sobie w naszą główkę, pojawia znowu nam się menu, wybieramy Modified Object -> Morpher - > Teraz z listy wybieramy nasz Target morph który odpowiada za ruch lewą stroną twarzy po osi X.

 

Rys. 17

fc17ix8.jpg

 

U góry pojawił nam się hierarchicznie ustawiony nasze „dziecko”. W dziale STATES pojawiło nam się taka linijka

 

- State01 value – 0 (oznacza to, że jeżeli nasz controler jest w pozycji 0 na osi X to ma się stać)

 

Nazwa naszego target morpha value – 0 (Morph działa w zakresie od 0 – 100, jeżeli pozostawimy 0 to nic się nie zmieni, jeżeli zmienimy na 100 to morph się uruchomi, ale chyba niechcemy, żeby w tej pozycji 0 kontrolera już morph nam chodził, więc robimy kolejny stan)

 

Na rysunku zaznaczyłem taką strzałeczkę czarną ciskamy w nią myszką. Stworzył nam się – State02 tym razem wpisujemy wartość value – Czyli, jeżeli przesuniemy nasz controler twarzy w lewo od punktu 0 to stanie się to. W moim przypadku mam -5 ograniczenie, które sobie wcześniej narzuciłem – więc jeżeli przesunę mój controler Lewy_Kacik_Ust to stanie się -> )

 

Nazwa naszego Morph Targeta – value – wpisujemy 100

 

 

Rys. 18

fc18tu0.jpg

 

Możecie poruszyć teraz naszym Lewym_Kącikiem_Ust w lewo i sprawdzić czy działa .. ŁAŁA ŁI ŁA – działa.. no to jedziemy dalej

 

Rys. 19

fc19ol5.jpg

 

Wracamy do reaction menagera. W górnej części (Tatusiowie i ich dzieci) wybieramy dzieci teraz, które pójdą wyrzucić śmieci. Znowu walimy mychą w szary krzyżyk o skromnej nazwie ADD_SLAVE clickamy w naszą główkę wybieramy z naszego morphera odpowiedniego targeta, tak jak poprzednio. Zaraz mnie tu zaczną wyzywać od pedofili jak za dużo będzie o tatusiu i jego dzieciach ;)

 

Rys. 20

fc20qu7.jpg

 

U góry w reactions pojawił nam się nasz nowy morph target i stworzył nam się stan z nim o wartosci 0. Tworzymy kolejny stan 4, jak walniecie w Create State to pojawi wam się stan 04 ale tam prawdopodobnie pojawią się też 2 wasze zdefiniowane morph_targety, wykasujcie niepotrzebny – ten który został wcześniej zdefiniowany – za pomocą krzyżyka DELETE_State. Dla stanu – State04 ustawiamy value jeżeli nasz controler przesunie się w prawo o 5 to nasz drugi morph target o wartosci 100 zrobi to.

 

Podsumowanie Reaction Menagera – Jak sama nazwa mówi Jeżeli zrobimy coś jakimś obiektem (trzeba zdefiniować co) To jakiś inny obiekt/obiekty zrobią rekację no i zrobią odpowiednio coś ;)

 

Rys. 21

18dm3.jpg

 

Już mi się nudzi to pisanie ;) – w skrócie – Teraz dla naszego controlera Lewy_Kacik_Ust musimy zdefiniować oś Y, jakie kolejne Morph_targety (dzieci) będą działać pod wpływem ruchu Y. Definiujemy znowu 4 stany dwa dla wartości 0 i 2 dla mksymalnego i minimalnego ruchu Lewego_Kacika_Ust po osi Y, tak jak na rysunku.

 

Rys. 22

fc22ab1.jpg

 

Rys. 23

fc23ic6.jpg

 

Rys. 24

fc24xe5.jpg

 

Jeżeli wszystko dobrze zrobiłeś to przy poruszaniu naszym Lewym_Kacikiem_Ust otrzymacie różne deformacje odpowiadające waszym morph_targetom, czyli jak na rysunku przesuniemy nasz contrler twarzy w prawy górny róg to otrzymacie wartość 100 dla dwóch morph_targetów i otrzymacie jakiś tam wyraz twarzy.

 

Nie zrażajcie się od razu. Jak skumaliście czaczę :D to robi się to błyskawicznie w parenaście sekund. Dużo tłumaczenia, a pracy przy tym malutko.

 

Rys. 25

fc25mx8.jpg

 

Robimy to samo dla kolejnych naszych controlerów panela.

 

Rys. 26

fc26ne8.jpg

 

Rys. 27

fc27nc8.jpg

 

Dla powieki oczywiście robimy tylko stan ruchu po osi Y. Wartości wychylenia od punktu 0 są mniejsze bo zdefiniowałem wcześniej ograniczenie ruchu controlera_powiek do 5, czyli od punktu 0 wynosi max 2.5 i w minimum -2.5 i tak wpisujemy w stanach nasze wartości.

 

Rys. 28

fc28sl0.jpg

 

Rys. 29

fc29kg4.jpg

 

Jak zrobiliśmy już wszystkie stany w reaction menagerze dla wszystkich Face_controlerów to już nie mamy nic do roboty, TAK DOKŁADNIE TO JUŻ KONIEC. Nasz super panel jest zrobiony.

 

Małe podsumowanie.

 

Z tutorialka powiniście wynieść nie tylko budowę FACIAL CONTROL PANELA ale również podstawy działania reaction menagera, którego można używać do różnych rzeczy przy riggowaniu czego kolwiek. Mam nadzieję, że tutorial ten zadowoli nie jeden umysł, że pokazał wam, że nie tylko w MAY’i można robić takie rzeczy.

 

Jeżeli zainteresowanie będzie duże to napiszę część drugą jak zapisywać ustawienia konkretnych min (pressety), szybko i bezboleśnie je przywoływać w każdym miejscu i o każdej porze, a to wszystko przy pomocy genialnego scriptu PEN_Attribute_holder 2, autorstwa genialnego riggera Paul’a Neale.

 

Skończony facial control panel z morph targetami moimi, chcesz sprawdzić jak to działa to ściągnij tu (4.5mb)

http://rs23cg.rapidshare.com/files/66207498/facial_controlsy2_morphy1.max – link bezposredni – wersja zapisana w maxie v8 - limit float panel

  • Like 4
Napisano

Dzięki wielkie!

Łap repa z góry a ja już się biorę za czytanie!:D

 

I zanim zacznę, też pytanko małe:

da sie takie kontrolery zastosować do kości na twarzy zamiast pod morphy podpinać?

Napisano

rewelacja stary :) pełen szacuneczek, jezeli moge cos doradzic, to przerabiajac tuta troszke sie pogubilem :) jezeli chodzi o ustawienie limitow, ale to detalik, super rzecz opowiadasz koniecznie jedz dalej !

Napisano
Da sie .. robisz identycznie, w reaction menagerze uzywasz zamiast morpha, pozycje danego helperka danej kosci

 

No to super sprawa! Dzięki wielkie raz jeszcze!

Napisano
rewelacja stary :) pełen szacuneczek, jezeli moge cos doradzic, to przerabiajac tuta troszke sie pogubilem :) jezeli chodzi o ustawienie limitow, ale to detalik, super rzecz opowiadasz koniecznie jedz dalej !

 

Przeanalizowalem tuta -> Jezeli ty sie pogubileś to co dopiero inni. Postanowilem przerobic go i zrobic ograniczenia innym sposobem, prostrzym i lepszym. Poprawilem tekst i bedzie chyba bardziej czytelny. Takze czesc pierwsza jest od polowy zupelnie inna -> Zapraszam do przeczytania LEKTURY jeszcze raz.

 

Max na tyle jest elastyczny, ze daje nam mozliwosc robienia roznych rzeczy na tysiac sposobow. Mam nadzieje, ze teraz ten przepis na podstawie FLOAT LIMIT bedzie bardziej czytelny i prostrzy. Controler ten niestety jest dostepny chyba od versji 8.0 maxa dopier (poprawcie mnie jak sie myle).

  • Like 1
Napisano

serwus OKO :)

bardzo dobra inicjatywa. mało takich rzeczy jest . ciekawe czy teraz bedziemy mieli wysyp character animations? :)

Ze stretch bones to byłoby bardziej zakręcone (ktos o to pytał).

bardzo duże brawa :)

pozdrawiam i życze powodzenia :)

Napisano

Dzieki wszystkim za dobre slowa i cieple przyjecie tutka. Musialem popoprawiac ostatnio troche takich rzeczy w tekscie.. tu zmienic screena tam dac innego. Zrobilem rowniez nowy filmik promujacy tutorialka. Nie wyglada juz tak badziewnie jak pierwszy. Caly tekst juz mysle i wszystkie screeny sa poprawne. Wiecie jest to pewien schemat, którego trzeba sie trzymac. Wystarczy, ze zapomne dodac glupie jakies slowko aczkolwiek wazne i sie juz wszystko bedzie sypac. Takze, jak ktos przejdzie przez calego tuta to napiszcie mi tutaj czy oby napewno wszystko dobrze wychodzi.

 

Klicek - Niewatpliwie zacheciles mnie do ciagniecia watku. Napewno przemysle sprawe, ale czy w wersji tekstowej hmm chyba nie. Moze przygotuje kiedys cala serie vidio na temat riggowania w maxie. Poki co to jak wspomnialem wczesniej czasu prywatnego prawie, ze nie mam ostatnio.. a tutek jest cichaczem w robocie przygotowany. Takze poki co koncze tuta i jak mi sie ustabilizuje moja super sytuacja to pomysle o przygotowaniu mini serii.

 

Napewno tutek dal wszystkie podstawy jak cos takiego zrobic. Mozna go tylko ulepszac na miliardy sposobow. Tak jak na video promujacym czyli odbicia lustrzane contrloerow, pen attribut holder 2, skalowanie/streczowanie zrenic, podpinanie galek oczu.

Napisano

...boski tutorial :) mozliwe ze w scence, ktora dales nieco morph targety sie pokrzyzowaly dla "prawej" czesci powiek i brwi- ale to szczegol - grunt to pokazanie metody za co wielce dziekuje- nie bawilem sie tym nigdy a zawsze mnie interesowalo jak to sie montuje :) - raz jeszcze dzieki :) !

Gość Marioza
Napisano

o kurka wodna, :eek: pikny tutek , świetnie że się podziałkowałeś swoją wiedzą, teraz trza to na spokojnie przeanalizowac :) , rep dla Ciebie :D

Napisano

nigdy sie tym nie bawilem ( tzn probowalem sie nauczyc sam, ale szkoda mi bylo czasu) i szukalem tak dokladnego step-by-step tutka, i... nic(!) sensownego nie znalazlem. No i patrze a tu u nas na forum myster super oko zamiescil, dziex star. Jak mieszkasz w wawie to masz u mnie browarka, jak mame kocham.

 

+++

 

a, i zglaszam prosbe o podczepienie tego tematu.

Napisano (edytowane)

Troche to skomplikowane ale da się nauczyć :) etc to jest najlepszy tutorial na tym forum zawsze miałem doła jak takie coś wogole ruszyć :)

Edytowane przez Lauke1985

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