Jak rozwiązać problem Flikeringu w animacjach 3d

Dodany: 2015.11.12

Każdy pracujący z nowoczesnymi silnikami renderującymi (jak VRay, Mental Ray, Advanced render czy też Kray) wspierającym Globall Illumination z pewnością trafił na moment, w którym chciałby przygotować w pełni animowaną scenę. Renderowanie kilkusekundowej animacji z GI na pojedynczym (nawet bardzo szybkim komputerze) może zająć dni lub nawet tygodnie. I tutaj właśnie pojawia się nasza farma. Jednak jak przygotować scenę pod „wiele” komputerów, tak żeby nie otrzymać flickerującego GI, przenikających się cieni lub tzn. „light splitches” ?

W zależności od użytego softwaru (skupmy sie na wiodących technologiach - Vray/KRay/Advanced render/Arnold) techniki pozwalające uniknąć flickeringu można podzielić na 3 „szkoły”.
Brute force - czyli kalkulacja GI z użyciem QMC (C4D) /MonteCarlo (Lightwave ) /BruteForce (Vray). Brute force polega na ustawieniu GI w bardzo dużej ilości sampli w odpowiednim rozmiarze i gęstości. Mimo wzrastającej mocy obliczeniowej procesorów i renderingu z użyciem kart graficznych kalkulacje GI z brute force są przeważnie od 2 do nawet 100 razy wolniejsze niż przy innych metodach.
Brute force sprawdza się więc na niezbyt skomplikowanych scenach (w stylu still shoty / animacje w obiektami „wyłączonymi” z GI) i w stosunkowo niewielkich rozdzielczośćiach (np. do 720p). Dla porównania dodamy że rendering 100 klatek animacji Cinema4D+Vray z IrradianceMap i Lightcache (zcachowanym przed renderingiem) na domowym komputerze zajął ponad 18 godzin zaś z BruteForcem (BruteForce+BruteForce) - ponad 150 godzin. Wyjątkiem od reguły jest „Arnold”. Obecnie najszybszy na rynku render engine pracujący tylko i wyłącznie z Brute Forcem.


Druga - bakowanie sceny. W nowoczesnych aplikacjach grafiki 3D bakować/cachować w scenie można praktycznie wszystko począwszy od obiektów, scieżek animacji przez symulacje, oświetlenie czy też textury. W kwestii Global Illumination, aby uniknąć flickeringu textury/materiały na obiektach, należy najpierw „zbakować”.
W każdej aplikacji do grafiki 3d i różnych silnikach renderujący proces ten wygląda trochę inaczej, jednakże sama idea jest identyczna. Otóż należy wyrenderować tylko textury znajdujące się na obiektach przy finalnym oświetleniu/antyaliasingu/rozdzielczości itd. Bake textur z GI tworzy nowe mapy - które automatycznie nakładane są na textury w miejsce tych „z przed bake”.
Proces bakowania textur wielokrotnie przyspiesza rendering, gdyż finalny render wykonujemy już bez GI (wszystkie textury oświetlne w scenie są już policzone z GI). Podstawowym minusem tej metody jest to, że po zbakowaniu textur nie możemy już nic zmienić w scenie. Każda zmiana - przesunięcie światła, przesunięcie obiektu lub zmiany na materiałach - spowoduje konieczność powtórzenia procesu bakowania od początku.


Trzecia - odpowiedni GI setup i cachowanie. Rozwiązanie 3cie jest najsensowniejszą opcją jeżeli chodzi o rendering bez użycia BruteForca i bakowania materiałów. Każdą scenę idzie odpowiednio przygotować pod rendering (serio tak! - mozna policzyć coś bez brute force i mieć czysty render - sprawdzone!) tak, aby przy użyciu renderingu w systemie farmy renderującej (tzn. z użyciem wielu komputerów na raz) uniknąć flickeringu.
Cachowanie GI ma ten plus, że zawsze możemy coś zmienić i po prostu zrobić nowy GI cache. Trwa to zdecydowanie krócej niż cały process bakowania textur i materiałów lub re-rendering z wielokrotnie wolniejszym bruteforcem. Jako doskonały przykład możemy podać renderowanie animacji z użyciem VRaya w najpopularniejszych trybach - Irradiance Map + Light Cache. System na farmie działa dokładnie jak w przypadku domowej maszyny. Najpierw ustawiamy Irradiance map na animation prepass a light cache - na progressive path tracking. Jeżeli mamy kamerę w ruchu - oczywiście korzystamy z odpowiednich switch (np. use camera path itd).
Następnie podajemy parametr "interpolation frames”. Jako standardowe ustawienie vray podaje „2”. Parametr interpolation frames określa na ilu klatkach Vray będzie „blendować” GI. Należy pamiętać, aby dodać do frame range odpowiednią wartość równą interpolation frames. Do tego używamy opcji „store direct light”. Spowoduje ona, że do finalnego renderu bedziemy mogli wyłączyć całkowicie Lightcache (upraszczając - zostanie on zapisany „w środku” irradiance map). Tak przygotowaną scene wrzucamy na farmę. Każdy render node (a jest ich ponad 200) zacznie przeliczać po 1 klatce Irradiance map. Tym sposobem możemy zcachować 200 klatkową animację w 15 minut całkowicie pozbawiając ją flickeringu. Tyle jeżeli chodzi o cachowanie GI. Do renderu - GI przechodzi z trybu animation prepass do animation rendering (zcachowane mapy GI są automatycznie podłączane w odpowiednie miejsce w setupie vraya) i zaczyna sie finalny render. Przy 100 klatkowej animacji i 15 minutach render time na 1 klatkę oraz użyciu 150 komputerów - gotową animację otrzymamy po…15 minutach.

Kategoria: Teksty branżowe
Oceń wpis:
2/0
  • Poleć wpis na:
     
     
Komentarze:
Jeszcze nikt nie zamieścił komentarza do wpisu.