Rendering dla opornych (część 1)

MBI
2006/07/06 16:00

W poprzednich artykułach parokrotnie pojawiało się pojęcie renderingu, które zapewne nie jest obce większości czytelników. Tak dla przypomnienia i w skrócie: rendering to w grafice 3D przeliczenie danej sceny i modyfikowanie jej przez efekty graficzne. W związku z tym, że jest to bardzo czasochłonna operacja, robią to zamiast procesora komputera karty graficzne. Wynikiem ich pracy jest obraz statyczny lub animacja. Skoro mówimy o renderingu i wspominamy o animacji, to prędzej czy później pomyślimy o grach 3D. Ich wykonanie pod względem graficznym coraz bardziej zbliża się do poziomu zarezerwowanego do tej pory tylko dla kina, telewizji i pracujących na ich użytek stacji graficznych. Samo zawrotne tempo rozwoju akceleratorów, to oczywiście nie jedyny powód takiego stanu rzeczy. Ewolucja wspomnianych wyżej efektów przebiega równie sprawnie jak sprzętu i to właśnie one będą tematem dzisiejszego artykułu. Antialiasing, filtrowanie anizotropowe, filtrowanie tekstur, bump mapping, mipmappiing, to pojęcia kojarzone przez graczy, ale już nie zawsze tak dobrze, jak tytułowy rendering. Zainteresownych poszerzeniem swej wiedzy zapraszamy do lektury.

W poprzednich artykułach parokrotnie pojawiało się pojęcie renderingu, które zapewne nie jest obce większości czytelników. Tak dla przypomnienia i w skrócie: rendering to w grafice 3D przeliczenie danej sceny i modyfikowanie jej przez efekty graficzne. W związku z tym, że jest to bardzo czasochłonna operacja, robią to zamiast procesora komputera karty graficzne. Wynikiem ich pracy jest obraz statyczny lub animacja. Skoro mówimy o renderingu i wspominamy o animacji, to prędzej czy później pomyślimy o grach 3D. Ich wykonanie pod względem graficznym coraz bardziej zbliża się do poziomu zarezerwowanego do tej pory tylko dla kina, telewizji i pracujących na ich użytek stacji graficznych. Samo zawrotne tempo rozwoju akceleratorów, to oczywiście nie jedyny powód takiego stanu rzeczy. Ewolucja wspomnianych wyżej efektów przebiega równie sprawnie jak sprzętu i to właśnie one będą tematem dzisiejszego artykułu. Antialiasing, filtrowanie anizotropowe, filtrowanie tekstur, bump mapping, mipmappiing, to pojęcia kojarzone przez graczy, ale już nie zawsze tak dobrze, jak tytułowy rendering. Zainteresownych poszerzeniem swej wiedzy zapraszamy do lektury.

Na początek próbkowanie i „pikseloza”. W scenie 3D, po powstaniu siatki modelu, przychodzi czas na położenie tekstury. Tekstura to nic innego jak mapa bitowa, czyli obrazek, który przeniesiony na wszystkie piksele płaszczyzny modelu nada mu „kolorowy” wygląd. czyniąc go rozpoznawalnym zarówno ze względu na kształt, jak i materiał. Gdyby bitmapa miała dokładnie ten sam rozmiar co powierzchnia podlegająca teksturowaniu, proces renderingu dobiegłby końca. Oczywiście nie zdarza się to zbyt często. W celu nałożenia tekstury na elementy o różnym rozmiarze i kształcie bitmapę bazową rozciąga się (upsampling) lub kurczy (downsampling). W celu uzyskania tego efektu karty graficzne posługują się następującymi sposobami: -Próbkowanie punktowe (Point sampling) -Filtrowanie dwuliniowe (Bilinear filtering) -Filtrowanie trójliniowe (Trilinear filtering) -Filtrowanie anizotropowe (Anisotropic filtering) Próbkowanie punktowe wykonuje upsampling i downsampling w najprostszy możliwy sposób. Przykładowo, jeśli tekstura o rozmiarze 16x16 pikseli ma zostać nałożona na powierzchnię czterokrotnie większą (64x64 pikseli), każdy teksel bitmapy bazowej zajmie cztery teksele tekstury wyjściowej. Podczas pomniejszania w tych proporcjach, na płaszczyźnie o wymiarze 4x4 znajdzie się co czwarty piksel źródłowy. W przypadku skalowania innego niż wielokrotność 100%, używa się statystycznie wyliczonego punktu. Proces ten, czyli utworzenie nowego piksela na podstawie danych z tekstury źródłowej nazywamy interpolacją. Celem interpolacji jest też, jak najlepsze dopasowanie optycznie otrzymanego teksela, do przetwarzanego obrazu. Próbkowanie punktowe jest najmniej obciążającym pamięć akceleratora sposobem zmiany wielkości tekstur i stanowi podstawę mapowania we wszystkich stosowanych obecnie technikach filtrowania. Tekstury przy upsamplingu techniką próbkowania cierpią na potocznie zwaną „pikselozę”, a w przypadku dużego downsamplingu potrafią zmienić się w zlepek punktów przypominających wyjściową bitmapę tylko pod względem kolorystyki. Mipmapping czyli szybciej. Zanim przejdziemy do filtrowania i jego rodzajów, parę słów o mipmapach wspomnianych w ostatniej części artykułu o kartach graficznych. Proces mipmappingu to tworzenie kopii tekstury źródłowej i przechowanie ich w pamięci akceleratora. Tworzy się je poprzez pomniejszenie bitmapy bazowej, dzieląc ją kolejno przez dwa, aż do uzyskania rozmiaru 1x1. Przykładowo tekstura 64x64 piksele utworzy mipmapy o wielkości 32x32, 16x16, 8x8, 4x4, 2x2 i 1x1. Tak utworzone tekstury nakłada się na obiekty, które oddalają się od obserwatora. Dobrym przykładem takiego obiektu, może być ciągnąca się w scenie trójwymiarowej w głąb ekranu podłoga, utworzona z powtarzającej się tej samej bitmapy bazowej. Gdyby każda kolejna nałożona tekstura, z prozaicznego powodu istnienia perspektywy, musiała przejść proces zniekształcenia i interpolacji, karta graficzna renderująca scenę 3D zmuszona byłaby do poświęcenia temu zadaniu olbrzymiej ilość cykli zegara. Najnowsze akceleratory i ich moc obliczeniowa, wystarczałyby zaledwie do płynnej gry w tytuły sprzed paru lat. Dodatkowo oglądaniu trójwymiarowej grafiki stworzonej bez użycia mipmappingu często towarzyszy efekt migoczących pikseli. Pojawia się przy małych obszarach, na które nałożono duże tekstury i gdy każdemu tekselowi pomniejszonego obiektu przypada kilka kolorów z różnych punktów bitmapy źródłowej. W celu usprawnienia tworzenia naszej podłogi, używane są przygotowane wcześniej w różnych rozmiarach (Level of Detail) mipmapy, dobierane pod względem wielkości do coraz mniejszych wielokątów tworzących obiekt.

Filtrowanie to podstawa. Proces mipmappingu, oprócz znacznego przyśpieszenia przetwarzania obrazu 3D, tak jak próbkowanie punktowe, jest nieodzowną częścią filtrowania. Technika ta obecna w renderingu obiektów trójwymiarowych już od dłuższego czasu zadomowiła się w grach. Filtrowanie dwuliniowe to drugi ze sposobów powiększania i pomniejszania tekstur. Przy upsamlingu odpowiednią mipmapę powiększa się za pomocą próbkowania punktowego. Następnie wylicza się kolor każdego piksela tekstury poprzez uśrednienie wartości kolorów czterech tekseli z nim sąsiadujących po skalowaniu, co w znacznym stopniu łagodzi efekt „pikselozy” po interpolacji. W przypadku downsamplingu proces filtrowania dwuliniowego działa w odwrotną stronę. Wartości kolorów wyliczane są zawsze w obrębie tej samej mipmappy, co podczas filtrowania dwuliniowego objawia się wyraźnymi liniami oddzielającymi kolejne poziomy mipmap.

GramTV przedstawia:

Filtrowanie trójliniowe eliminuje ten problem. Kolor piksela wyliczany jest przy pobraniu danych zarówno z mipmappy na której punkt się znajduje, jak i tej sąsiadującej. Wartość kolorów wyliczana jest ze średniej pobranej z ośmiu sąsiadujących tekseli, dzięki czemu uzyskany obraz staje się dokładniejszy, a przejścia pomiędzy mipmapami są płynne. Filtrowanie anizotropowe stosuje się, aby podczas obracania i zniekształcania obiektów zachować ich możliwie najlepszą jakość, uniknąć powstawania artefaktów oraz w celu wyostrzenia tekstur znajdujących się z tyłu sceny. Jest to najbardziej efektywny sposób filtrowania, a jego podstawą, oprócz próbkowania punktowego, jest filtrowanie dwu- i trójliniowe. Do standardowych obliczeń koloru piksela, po uprzedniej interpolacji, używa się średniej z maksymalnie szesnastu sąsiadujących pikseli. Ponadto, przy filtrowaniu anizotopowym, wartość koloru teksela liczona jest przy uwzględnieniu ukształtowania tekstury – próbkowane piksele odliczane są w kierunku rozciągnięcia.

Za tydzień zapraszamy do kolejnej części artykułu, w której zajmiemy się m.in. antialiasingiem i bump mappingiem. Jeśli w tekście pojawiły się pojęcia niezrozumiałe warto zerknąć czy nie zostały wytłumaczone w poprzednich artykułach z serii „dla opornych”.

Słowniczek Piksel - najmniejszy element obrazu bitmapowego w całości wypełniony jednym kolorem. Pikselem określamy też najmniejszy element obrazu wyświetlanego na monitorze, którego tryby pracy podajemy właśnie w ilości pikseli w poziomie i pionie. Bitmapa - rastrowy obraz graficzny składający się z pikseli. Bitmapa określa położenie każdego punktu składowego oraz jego koloru. Obiekt - wirtualny twór zbudowany z polygonów w procesie renderingu. Obiekty mogą posiadać właściwości zarówno optyczne, jak i fizyczne. Artefakty - w grafice powstają podczas kompresji obrazu lub procesach renderingu. Są to zauważalnie wady w tworzonej scenie 3D lub grafice. W przypadku kompresji za mniejszy rozmiar pliku płacimy wyraźniejszymi i częstszymi artefaktami. Teksel - (Texture Element) pojedynczy i najmniejszy wyświetlany element tekstury. Tekstura - dwuwymiarowy obiekt graficzny (np. bitmapa) nakładany na powierzchnię trójwymiarowych elementów. Każdy element tekstury (teksel) może składać się np.: z barwy, jasności oraz współczynnika przezroczystości.

Komentarze
17
Usunięty
Usunięty
14/07/2006 16:40

fajy tekst duzoo nowosci

Usunięty
Usunięty
07/07/2006 11:13

Żeby jeszcze mieć czas na takie zajęcie.

Usunięty
Usunięty
07/07/2006 08:43

Dobra, teraz CDP moze kazdemu kto przeczyta kupic 3DS MAX''a 7 i wszyscy beda szczesliwi :D




Trwa Wczytywanie