Shadery dla opornych

MBI
2006/06/01 16:00

Zabawa matką postępu

Zabawa matką postępu

Od czasu powstania pierwszych gier wykorzystujących środowisko 3D, jesteśmy świadkami niezwykle prężnego rozwoju komputerów. Niewielu bowiem zaprzeczy, że to właśnie gry są jednym z głównych, jeśli nie najważniejszym, motorem postępu w grafice komputerowej oraz sprzęcie w ogóle. Kolejne tytuły z rosnącą ilością efektów specjalnych oraz komplikacją tworzonych scen 3D, stawiają naszym PC coraz wyższe wymagania. W przeszłości karty graficzne posiadały tylko kilka zaszytych sprzętowo algorytmów, mogących posłużyć do przetwarzania danych o geometrii i teksturach renderowanej sceny. W 2001 roku pojawiły się pierwsze akceleratory mające możliwość programowej obsługi tytułowych Shaderów, dając twórcom gier nowe narzędzie do pracy i pole do popisu. Najprościej mówiąc Shader to mini program służący w grafice 3D do cieniowania, określania ostatecznej powierzchni obiektu lub obrazu. Zanim jednak powiemy o nim więcej – parę słów o podstawach tworzenia obiektów w grafice trójwymiarowej.

Od wierzchołków do tekstury Zabawa matką postępu, Shadery dla opornych

Model 3D składa się z jednej lub więcej siatek zbudowanych z wierzchołków, czyli punktów w trójwymiarowej przestrzeni. Wierzchołki modeli połączone są w trójkąty, najprostsze płaskie figury geometryczne. Z połączenia trójkątów otrzymujemy natomiast siatkę modelu trójwymiarowego. W aplikacjach czasu rzeczywistego bardzo rzadko używa się innych prymitywów niż trójkąty, ponieważ ich renderowanie jest zdecydowanie najszybsze. Siatka modelu reprezentuje jego kształt w przestrzeni, a za wygląd odpowiedzialny jest materiał pokrywający obiekt. Materiał jest zestawem parametrów opisujących powierzchnię renderowanej siatki, a także sposób jej renderowania, czyli to, jakiego koloru będzie siatka modelu lub jaką teksturą zostanie on pokryty.

Shader – narzędzie co najmniej dobre

Jak już wspomnieliśmy wcześniej Shader to mini program. Jest on pisany zwykle w specjalnym języku (shading language) i wykonywany w podzespołach akceleratora graficznego, odpowiedzialnych za jego realizację – Pixel Shaderach (jednostka cieniowania pikseli) i Vertex Shaderach (jednostka cieniowania werteksów). Shadery pozwalają programiście na użycie, podczas tworzenia scen 3D, szerokiej gamy efektów jak pochłanianie światła, refrakcja, dyfuzja, odbicia lustrzane, rozmycie obrazu i wiele innych. Wszystkie operacje wykonywane są w wyżej wymienionych Pixel i Vertex Shaderach w czasie rzeczywistym i jednocześnie. To pozwala na dużo bardziej skomplikowane modelowanie oświetlenia i tekstury oraz uniezależnienie się od T&L, dzięki czemu oprócz poprawy jakości wyświetlanego obrazu wzrasta szybkość generowania klatek animacji. Pojawienie się Shaderów przyniosło także sprzętową obsługę LOD (poziom uszczegółowienia grafiki), który do tej pory był implementowany programowo, co poważnie spowalniało silniki gier 3D. Odrobina historii, czyli nVidia vs ATI

Era sprzętowego cieniowania nastała wraz z pojawieniem się bibliotek DirectX 8.0 i wprowadzonych w nich operacjach na potokach, z których korzystały Shadery. Pierwszymi kartami graficznymi posiadającymi Pixel i Vertex Shadery były GeForce3 oraz ATI Radeon 8500. Początkowo akceleratory graficzne posiadały zaledwie kilka Shaderów, a ich poprawną obsługę zapewniał zestaw funkcji Shader Model 1.0. DirectX 9.0b przyniósł ze sobą specyfikację SM 2.0 obsługiwaną przez karty ATI, oparte na silniku graficznym Smatrshader HD. Odpowiedzią nVidii była rodzina akceleratorów GeForce 6xxx, zgodna z DirectX 9.0c oraz SM 3.0 (silnik graficzny Cine FX 3.0). O ile różnica pomiędzy SM 1.0 a 2.0 i skok w jakości grafiki 3D był bezdyskusyjny, to w przypadku porównania Smartshader HD z Cine FX 3.0 tak różowo już nie było. Na papierze specyfikacja Shader Model 3.0 prezentowała się znacznie lepiej od swojego poprzednika, co zrozumiałe, gdyż była technologią nowszą, natomiast w praktyce bywało różnie. Pierwsze tytuły gier obsługujące SM 3.0 wcale nie rzucały nas na kolana, tak jak zapowiadali producenci, a na forach dyskusyjnych niejednokrotnie zwolennicy ATI udowadniali, że na ich „Radkach” z SM 2.0 grafika nie wygląda gorzej, a czasami nawet i lepiej. Ponadto ATI zarzuciła nVidii, iż nie wszystkie jej karty w pełni i poprawnie obsługują nową specyfikacje. Przyprawiło to pewnie o ból głowy niejedną osobę noszącą się z zamiarem kupna nowego akceleratora graficznego. Sytuacja ta spowodowana była w naszej opinii lenistwem programistów i chęcią producentów gier do jak najszybszego wydania nowego tytułu ze znaczkiem SM 3.0, którzy dostając nowe narzędzie do ręki, wykorzystywali je tylko w niewielkiej części. Ale to już temat na oddzielny artykuł.

GramTV przedstawia:

Na dziś – SM 3.0, na jutro – cień Visty

Aktualnie Shader Model 3.0 obsługują wspomniane GF6xxx i GF7xxx oraz rodzina kart Radeon X1xxx. Warto zwrócić uwagę na fakt, iż najnowsze układy nVidii i ATI posiadają już kilkakrotnie więcej jednostek cieniowania – GF7900GTX zaopatrzony jest w 24 Pixel Shadery i 8 Vertex Shaderów, natomiast Radeon X1900XTX w odpowiednio 48 i 8. Obrazuje to dobrze jak szybko ewoluowała ta technologia, i jak ważne stały się Shadery dla najnowszych gier. Producentów akceleratorów graficznych, przynajmniej częściowo, powinno pogodzić ukazanie się DirectX 10 wraz z SM 4.0, o czym pisaliśmy w poprzednim artykule. Microsoft zapowiada, iż będzie to milowy krok w rozwoju grafiki, szkoda tylko, że dostępny jedynie dla użytkowników Visty. DX 10 na WindowsXP ponoć nie uświadczymy ...

Słowniczek Pixel Shader (jednostka cieniowania pikseli) – pozwala na szybkie obliczanie kolorów każdego piksela renderowanego obrazu. Uzyskana barwa jest składową wyników obliczeń Vertex Shadera, analizy parametrów tekstury oraz funkcji opisującej efekt specjalny jak mgła, przezroczystość czy stopień odbicia światła. Vertex Shader (jednostka cieniowania werteksów) - służy do wykonywania przekształceń geometrycznych renderowanego obrazu na podstawie informacji opisujących werteksy. Werteks - wierzchołek trójkąta. Z trójkątów składają się renderowane obiekty budujące scenę 3D. Transform & Lighting – T&L to operacje przetwarzania położenia, kształtu i oświetlenia przedmiotów, z których składa się obraz w grafice trójwymiarowej. Zwykle wykonywane są przez procesor komputera. LOD (level of detail) – poziom uszczegółowienia grafiki, polegający na wewnętrznym podziale wielokątów z zadaną dokładnością. Podział ten jest nieliniowy, czyli zależny od odległości obserwatora od obiektu – im bliżej tym większy, im dalej tym mniejszy. Biblioteka – zbiór procedur i danych, z których korzystają różne programy.

Komentarze
36
Usunięty
Usunięty
05/06/2006 19:31

No cieszę się że zrozumiałeś częściowo."Następnym razem najpier postaraj się zrozumieć o co chodziło autorowi lub Twojemu rozmówcy, a dopiero wtedy broń swojej opinii." - a może ty poprostu źle sformułowałeś swoją myśl. Dwa ostatnie zdania pomijasz bo są lekko beszczelne? Ja nie obrażam ludzi za ich opinie i myśli jeżeli się z nimi nie zgadzam. Tylko pytałem i przy okazji rzuciłem uwagę. Nie bądź taki przewrażliwiony bo życie jest ciężkie. Fajnie się dyskutowało i powodzenia przy pisaniu kolejnych artykułów.

Usunięty
Usunięty
05/06/2006 15:45

Może inaczej bo nie zrozumiałeś kompletnie o czym mówiłem. Nie chodziło mi o konkretne rozwiązania tylko o poziom dostępności jakiejś technologii ze względu na cenę sprzętu i stopień komplikacji w jej tworzeniu. Dzięki rozwiązaniom dla gier efekty uzyskiwane na drogich stacja graficznych przez sztab wysokiej klasy grafików/programistów stają się dostępne na domowym sprzęcie i dla początkującego grafika/programisty. To tak jak by wymyślono lekarstwo na raka, które dla jednego chorego kosztuje 10 mln złotych. Świetnie - postęp. Zgadzam się. Ale równie dużym, a czasami większym będzie uczynienie tegoż lekarstwa dostępnym dla każdego. I to miałem na myśli pisząc wstęp do którego się odwołujesz. Nie negowałem wkładu przemysłu filmowego- zaznaczałem drugie źródło postępu. Zrozumiałeś?Twoje dwa ostatnie zdania pominę, bo są lekko bezczelne. Następnym razem najpier postaraj się zrozumieć o co chodziło autorowi lub Twojemu rozmówcy, a dopiero wtedy broń swojej opinii.

Usunięty
Usunięty
05/06/2006 01:40

M B I, liczyłem na konkretne argumenty ale zawiodłem się. Przecież mówimy cały czas o tym co jest głównym motorem postępu w grafice komputerowej, tak? Pofatyguj się i sprawć skąd wywodzą się, z myślą o jakim przemyśle stworzone zostały czołowe pakiety do modelowania, animacji i renderingu (bo o malowaniu i obróbce graficznej nie wspomnę choć najbardziej znany, do niej wykorzystywany Photoshop powstał także dla potrzeb filmu i może z niego i z pozostałych programów od dawna korzystać każdy - to a propos tego że każdy może wbijać gwoździe). Jakby tego było mało sposoby przetwarzania grafiki (w celu jej wyświetlenia w jak najwyższej jakości) doskonalono i rozwijano także w odpowiedzi na potrzeby wynikające z produkcji filmowej/telewizyjnej. Growy przemysł przy branży filmowej, telewizyjnej, reklamowej wykorzystującej technologię cyfrową do tworzenia grafiki wiekowo jest poprostu smarkaczem.Twoje gwóździe w filmie i telewizji wbija się od lat w dodatku z roku na rok coraz sprawniej i nie jest to (i nie była nigdy) bynajmniej domena wyłącznie jednej firmy zza ocenau."wbija się nim trzy gwoździe dziennie" - rozumiem że za mało i za wolno, tak? To porównaj sobie w takim razie czas produkcji 1 gry i postprodukcji 1 filmu gdy powstaje grafika komputerowa (powiem tylko że nie trwa on kilka lat jak tworzenie gry). Już nie mówię o jakości nawet."Pewnego dnia pojawia się młotek i każdy może już wbić gwóźdź" - pewnego to znaczy kiedy? Jak powiedziałem te Twoje gwoździe wbijać można było w filmie już 20 lat temu (i oglądać mógł to też każdy) A w grze?Czy pytałem już czy ty wogóle oglądasz filmy?Tak to jest jak chcesz żeby początek fajnie brzmiał...




Trwa Wczytywanie