Na progu rewolucji - część 3

Utworzono: 19 sierpnia 2018
Autor: tbxx
Odsłon:

283

"Prawdziwa" szósta generacja - czyli Gamecube oraz Xbox.

Część pierwsza - ta o technologiach i efektach graficznych na konsolach szóstej generacji  ->LINK<-

Część druga - ta o konsolach Dreamcast oraz PlayStation 2 ->LINK<-

 

Nintendo Gamecube (14.09.2001)

 

Sprzedaż konsoli Nintendo 64 ciężko uznać za sukces, ale nie można też nazwać porażką. Do „sukcesu”, czyli PlayStation zabrakło około trzy razy więcej, ale od „porażki”, czyli Saturna było około cztery razy lepiej. Jak powszechnie wiadomo, zdobywca drugiego miejsca jest pierwszym z tych, którzy przegrali. Honorowi inżynierowie z Kyoto ochoczo zabrali się do projektowania kolejnej (i jak się okazało ostatniej) najmocniejszej na rynku konsoli od Nintendo pod kryptonimem „Project Dolphin.”

Zadanie zaprojektowania procesora głównego konsoli zostało powierzone firmie IBM, która dostarczyła zmodyfikowaną wersję znanego z komputerów iMac G3 układu PowerPC 750CXe. W porównaniu do wersji „komputerowej” procesor został wzbogacony o 50 nowych instrukcji związanych z przetwarzaniem danych grafiki 3D. W rezultacie znany później pod nazwą „Gekko” układ charakteryzował się dwoma 32-bitowymi jednostkami stałoprzecinkowymi, oraz jedną jednostką zmienno przecinkową 64-bitową (z możliwością wykonywania obliczeń 2x32bit), która przy taktowaniu 486MHz osiągała wydajność 1.9 GFLOPS.

Drugi z układów konsoli – procesor graficzny „Flipper” został zaprojektowany przez inżynierów z firmy ArtX – byłych pracowników Silicon Graphics, odpowiedzialnych za układ RCP z konsoli Nintendo 64. W lutym 2000 roku ArtX zostało przejęte przez ATI i to właśnie logo tej firmy znajdziemy na obudowie konsoli Gamecube. Podobnie jak układ z Nintendo 64 Flipper potrafi samodzielnie oświetlać oraz transformować polygony, jednak w przeciwieństwie do „starszego brata” nie jest reprogramowalny. W kwestii wydajności – przy taktowaniu 162MHz procesor jest wstanie wykonać 8.6 GFLOPS.

 

Jak pamiętamy z artykułu „Na poligonie” największą bolączką konsoli Nintendo 64 były rodzaj zastosowanej zunifikowanej pamięci RAM oraz ilość dostępnej pamięci podręcznej tekstury (4kB.) Jak powszechnie wiadomo, jedynie głupiec popełnia dwa razy ten sam błąd. W konsoli Gamecube zrezygnowano z unifikacji pamięci, oddając do dyspozycji programistów 24MB bardzo szybkiej pamięci podstawowej 1TSRAM (pamięci typu SRAM są do 10 razy szybsze od pamięci DRAM, jednak zajmują do 6 razy więcej miejsca, natomiast pamięci zastosowane w konsoli Nintendo posiadają zbliżony do DRAM rozmiar przy tej samej prędkości działania), 16MB pamięci „dodatkowej” (używanej między innymi do danych dźwięku, oraz różnego rodzaju buforów danych). Dodatkowo układ Flipper posiada 1MB 1TSRAM pamięci podręcznej tekstur oraz 2MB 1TSRAM pamięci bufora ramki i bufora Z.

 

Możliwości układu Flipper

Flipper jak przystało na zaawansowany układ graficzny składa się z kilku współpracujących ze sobą jednostek:

- Command Processor (CP) – zajmuje się interpretacją danych przesyłanych przez procesor Gekko, oraz indeksowaniem/sortowaniem tablic wierzchołków polygonów.

- Transform Processor (XF) – czyli układ odpowiadający za transformację oraz oświetlenie prymitywów. XF posiada stały zestaw przekształceń położeń wierzchołków, dlatego też nieujęte w układzie przekształcenia możliwe są jedynie za pomocą procesora głównego. Wszelkie operacje mogą być przeprowadzane na punktach, liniach, ciągach linii, trójkątach, ciągach trójkątów, wachlarzach trójkątów oraz czworokątach. Bardzo interesującą funkcją układu jest nie mająca wpływu na ogólną wydajność konsoli możliwość użycia ośmiu źródeł światła (które mogą być zarówno globalne jak i lokalne, a także wielokolorowe), przy czym jedynym ograniczeniem jest możliwość oświetlenia za pomocą jednego źródła jedynie 25 milionów wierzchołków na sekundę. Kolejnymi funkcjami XF jest wycinanie niewidocznych polygonów, korekcja perspektywy tekstur, projekcja tekstur, oraz generowanie dynamicznych cieni.

- Texture Processor (TX) – jak sama nazwa wskazuje zajmuje się obsługą tekstur, których potrafi nałożyć w jednym przebiegu do ośmiu warstw na polygon. Tekstury mogą być zarówno w formacie skompresowanym (S3TC) jak i bez kompresji (16 i 24-bitowy kolor). Faktury mogą być filtrowane z użyciem metod dwuliniowej, trójliniowej oraz anizotropowej. TX posiada też pewną unikalną funkcję nazwaną „wirtualizacją tekstur” polegającą na sprawdzaniu zawartości bufora Z przed wszelkimi operacjami na teksturach, dzięki czemu do dalszej obróbki przesyłane są jedynie widoczne na ekranie fragmenty tekstur. Operacje na teksturach przeprowadzane są przy użyciu ogromnej (jak na tamte czasy) pamięci podręcznej o objętości 1MB, dzięki czemu w (niektórych) grach na Gamecube mogliśmy podziwiać największe podczas szóstej generacji tekstury o rozdzielczości 512x512 tekseli.

- Texture Envoronment Processor (TEV) – prawdopodobnie najpotężniejszy element Flippera. TEV zajmuje się „łączeniem w całość” informacji wygenerowanych przez jednostki XF oraz TX. Całość przypomina nieco łączenie warstw obrazu w programach do edycji grafiki. Ponieważ Flipper nie jest układem „re-programowalnym” jak np. RCP w N64, posiada wbudowany zestaw operacji łączących poszczególne warstwy tekstur. Mimo to, jednostka TEV jest bardzo elastyczna, ze względu na dużą ilość parametrów wywołujących poszczególne funkcje. Maksymalnie w jednym przebiegu możemy wykonać 16 operacji, przy czym każda z nich zmniejsza wydajność wyświetlania tekseli (od ½ maksymalnej szybkości przy dwóch operacjach do 1/16 przy szesnastu). Operacje na teksturach nie muszą być przeprowadzane na sąsiadujących ze sobą warstwach (można np. połączyć ze sobą warstwę 1 z 3) i mogą być również przeprowadzane na wynikach wcześniejszych łączeń (np. łączenie 4 warstwy tekstury z wynikiem łączenia warstw 2 i 6). Dzięki jednostce TEV możliwe jest: mapowanie światła, mapowanie wybojów, mapowanie normalnych z odblaskami (jedynie dla oświetlenia globalnego, w przypadku oświetlenia lokalnego normalne trzeba mapować za pomocą procesora głównego), mapowanie środowiskowe (sferyczne i paraboidalne), środowiskowe mapowanie wybojów, efekt refrakcji oraz mgła. Pewnego rodzaju niedopatrzeniem można nazwać brak sześciennego mapowania środowiska – Flipper potrafi dynamicznie wygenerować sześcienne tekstury, natomiast nie potrafi ich nałożyć (w tym wypadku trzeba się uciekać do pomocy procesora głównego). Natomiast w przypadku obsługiwanych mapowań środowiska, nie ma (prostej) możliwości dynamicznego generowania odpowiednich tekstur.

- Pixel Engine (PE) – ostatni element Flippera mający za zadanie przesłanie całości obrazu do bufora ramki oraz wykonywanie operacji na tym buforze. Dodatkowymi funkcjami są pełnoekranowe wygładzanie obrazu (supersampling) oraz dekompresja video w formacie MPEG. Flipper posiada 2MB szybkiej pamięci przeznaczonej na (pojedynczy) bufor ramki oraz bufor Z, przez co maksymalna rozdzielczość obrazu zostaje ograniczona do 480p (NTSC) oraz 528p (PAL – nigdy niewykorzystana). W przypadku potrzeby użycia podwójnego lub potrójnego buforowania, dowolną liczbę (ograniczoną pojemnością) buforów możemy tworzyć w pamięci głównej RAM. Przy użyciu pełnoekranowego wygładzania, wydajność wyświetlania texeli/pixeli spada o połowę, przy czym używając 2 operacji TEV (również spadek o połowę) wygładzania możemy użyć bez spadku wydajności.

Wydajność w grach

Nintendo - firma, której developerzy niezbyt dobrze radzą sobie z wyciskaniem ostatnich soków z projektowanych przez siebie konsol. Gamecube według zapowiedzi miało być konsolą przynajmniej tak dobrą, jak ta od „kolegów” z Sony. Na kilka miesięcy przed premierą wydajność kostki została określona pomiędzy 6 a 12 milionów polygonów na sekundę, czyli trochę powyżej maksymalnych osiągnięć Dreamcasta i trochę poniżej maksimum, jakie udało się wycisnąć z PS2. Kolejne dane otrzymaliśmy od programistów EA, – którzy okazali się trochę lepsi od „kolegów” z Nintendo. W tym wypadku wydajność została określona na 7 milionów polygonów przy 8 warstwach tekstur, oraz 14 milionów przy 4 warstwach. Premierowe pozycje zazwyczaj nie grzeszą pokazem możliwości i w tym przypadku nie było wyjątku – 3 miliony wielokątów na sekundę przy zastosowanych efektach i tak robiło wystarczające wrażenie. Na sensację jednak nie musieliśmy czekać zbyt długo – w trzymiesięcznym okienku premierowym wszystkie wyliczenia postanowiła wyśmiać ekipa Factor 5 – 18 listopada 2001r. na rynku pojawia się gra „Star Wars: Rogue Squadron II” wyświetlająca do 15 milionów polygonów na sekundę ustanawiając rekord w tej dziedzinie do końca roku 2001r. Obok niesamowitej ilości wielokątów Factor5 w swojej grze wykorzystali do 8 warstw tektur na obiekt (przy średniej liczbie 5 warstw), oraz większości możliwych do uzyskania efektów na teksturach (mapowanie normalnych, środowiskowe mapowanie wybojów, dynamiczne cieniowanie…) a także niedostępne sprzętowo mapowanie przesunięć (obie wydane na Gamecube części Rogue Squadron to jedyne gry z szóstej generacji, gdzie autorzy pochwalili się wykorzystaniem tego efektu). Broni nie zamierzali składać również chłopaki (oraz dziewczyny) z RARE, mimo iż „Star Fox Adventures” było ostatnią grą Brytyjczyków przygotowaną dla Nintendo, całość została przygotowana na bardzo wysokim poziomie. Star Fox Adventures może nie imponuje w kwestii ilości wyświetlanych wielokątów, natomiast zachwyca doskonałym opanowaniem jednostek TEV do generowania efektów na teksturach. Przepiękne efekty kolorowego oświetlenia, najlepszy podczas szóstej generacji efekt futra/włosów (tytuł współdzielony z inną grą od RARE), a także najbardziej zaawansowana woda (efekty środowiskowego mapowania wybojów połączone z refrakcją). Na kolejny ustanowiony przez Gamecube rekord nie musieliśmy czekać zbyt długo – 12 listopada 2002 roku Capcom wypuszcza grę „Resident Evil 0” w której został wykorzystany najbardziej dopakowany wielokątami model postaci podczas tej generacji konsol – 25000 polygonów. Nie może bardziej pomylić się jednak ten, który pomyślał, że to już koniec rekordów ustanowionych przez graj kostkę – oto 15 października 2003 roku po raz drugi do głosu dochodzi ekipa Factor5, która grą „Star Wars: Rogue Squadron III” ustanawia oficjalny rekord szóstej generacji – 20,25 miliona polygonów na sekundę.

Największym problemem Gamecube jest fakt, że zbyt mało developerów miało chęci poznania działania jednostek TEV, przez co jedynie kilka gier pokazuje prawdziwe możliwości konsoli. Tych, którym się chciało można policzyć na palcach jednej ręki – Factor5, RARE, Retro Studios, Capcom… Wewnętrzne ekipy Nintendo wyspecjalizowały się przede wszystkim w generowaniu efektów wody – Wave Race, Super Mario Sunshine, The Legend of Zelda Twilight Princess (w tym przypadku warto zwrócić uwagę na efekt refrakcji, którego zabrakło w remake HD na konsoli Wii U).

 

 

Microsoft Xbox (15.11.2001)

USA – kolebka gier video, od czasów sukcesu Atari 2600 bez szans w rywalizacji z urządzeniami produkowanymi w kraju kwitnącej wiśni. Po kilku nieudanych próbach, porażką konsoli Atari Jaguar w 1996r. amerykanie wycofują się z produkcji sprzętu do gier video. Stan ten postanowiła zmienić znana z rynku PC firma Microsoft przygotowując największą i najpotężniejszą konsolę do gier pod nazwą Xbox. Korzystając z doświadczeń wyniesionych z rynku komputerów osobistych, nowa amerykańska konsola konstrukcyjnie bardzo przypomina działający pod kontrolą systemu Windows laptop, aczkolwiek korzystający ze zmodyfikowanych podzespołów.

Jako bazę CPU Xbox’a wykorzystano 32 bitowy (32bit jednostka stałoprzecinkowa oraz 32bit jednostka zmiennoprzecinkowa) procesor Pentium III o taktowaniu 733MHz ze zmniejszoną o połowę pamięcią podręczną L2, co czyniło by tą konstrukcję podobną do układów Celeron, jednakże pozostawiono obecny w PIII 8 kierunkowy dostęp do pamięci podręcznej zamiast 4 kierunkowego dostępnego w Celeronach. Układ charakteryzuje wydajność operacji zmiennoprzecinkowych na poziomie 2.9GFLOPS.

Podstawę GPU stanowi wyprodukowany przez Nvidia obecny na kartach GeForce3 układ NV20, w którym dodano drugą jednostkę geometryczno-oświetleniową. Nazwany NV2A układ jest zgodny ze modyfikowaną biblioteką DirectX 8.0 obecną w zarządzający konsolę systemie opartym na Windows 2000. Pewne niejasności pojawiają się przy próbie określenia wydajności układu w dziedzinie operacji zmiennoprzecinkowych – analizując materiały opublikowane na stronach internetowych znajdziemy zarówno bardzo wysokie liczby 120, 80, 20 GFLOPS, jak też bardziej „realne” 6.5-7.3GFLOPS. Wszystko z powodu niestandardowego sposobu mierzenia wydajności stosowanego przez Nvidia (tzw. Nvidia FLOPS).

Pewnego rodzaju niespodzianką (niekoniecznie pozytywną) jest zastosowanie zunifikowanego układu pamięci w postaci 64MB DDR SDRAM.

Pomysł oparcia architektury konsoli na podzespołach komputerowych nie jest nowy, że wspomnę tylko o takich porażkach jak Atari XEGS, Commodore 64GS, Amstrad GX4000 czy też Amiga CD32. Xbox nie jest też pierwszą konsolą opartą na podzespołach pochodzących z komputerów PC – tutaj kłania się FM Towns Marty. A odpierając zarzuty krzykaczy, mówiące że Xbox to PeCet w konsolowej obudowie, odpowiadam – konsola Microsoftu ma najbardziej zamkniętą architekturę z pośród konsol szóstej generacji. Do konsoli możemy podpiąć jedynie kontrolery, oraz przewody: zasilający, ethernet oraz AV.

 

Możliwości XGPU (NV2A)

Sercem(?) NV2A są w pełni programowalne jednostki Vertex Shader (2szt.), oraz Pixel Shader(4szt .) -pierwsza z nich odpowiada za transformację oraz oświetlenie wierzchołków prymitywów, natomiast druga odpowiada za ostateczny kolor oraz jasność każdego piksela obrazu. Działanie jednostek programujemy za pomocą tzw. Shader Language, co nieco przypomina obsługę jednostki VU1 z konsoli PS2, przy czym jest dużo łatwiejsza w opanowaniu, dając dużo lepsze efekty końcowe. Dla mniej zdolnych lub bardziej leniwych programistów przygotowano także wbudowany „stały” zestaw funkcji.

Wracając na chwilę do pierwszej części „Na progu rewolucji” XGPU możemy określić układem „wszystkomającym” (oczywiście pomijając mapowanie przesunięć, możliwe do realizacji za pomocą CPU.) Aczkolwiek to, że NV2A coś może, nie oznacza od razu, że może wszystko na raz. Głównym ograniczeniem układu jest zastosowana zunifikowana pamięć (czyli natrafiamy na podobne problemy jak w przypadku Nintendo 64). Wszelkie operacje związane z przetwarzaniem grafiki odbywają się w pamięci współdzielonej z kodem oraz innymi danymi „programu”. Nie znajdziemy, więc oddzielnej pamięci dla buforów ramek, czy też bufora Z. Prawdopodobnie nie znajdziemy też pamięci podręcznej tekstur (XGPU posiada 4kB pamięci podręcznej jednostki Vertex Shader, oraz prawdopodobnie maksymalnie 256kB pamięci podręcznej jednostki Pixel Shader).

W jednym przebiegu NV2A potrafi nałożyć 4 warstwy tektur, które zostają następnie złączone (generując odpowiednie efekty) za pomocą programów dla jednostki Pixel Shader, przy czym łączenie następuje w takiej kolejności, jak były nakładane tekstury.

Z ciekawostek – konsola Xbox posiada najbardziej zaawansowane techniki pełnoekranowego wygładzania krawędzi ze wszystkich konsol szóstej generacji, jednakże wydajność pamięci często skutecznie ogranicza możliwości ich wykorzystania.

Wydajność w grach

W licytacji na „miliony” polygonów Xbox jest niekwestionowanym liderem, począwszy od 300 milionów polygonów na sekundę, na 120 milionach skończywszy. Jak wiadomo podawania wydajności w „czystych” wielokątach nie ma żadnego sensu, dlatego też należy poszukać wydajności osiąganej w wydanych na Xboxa grach. I w tym właśnie miejscu natrafiamy na mur nie do przebicia – praktyczny brak informacji w tym temacie, a jeśli już znajdziemy coś ciekawego jest to oparte na pogłoskach i domysłach.  Ciężko stwierdzić czy 10-15 tys. polygonów na postać w Dead or Alive 3 to dużo czy mało nie mając danych odnośnie „lokacji”. Na ten sam problem natrafimy przy 2000 polygonach Master Chiefa w Halo. Rozwiązaniem problemu mogłaby być tworzona przez Boss Games Studio (Top Gear Rally, World Driver Championship) gra RacerX, której autorzy chwalili się osiągnięciem 30 milionów polygonów na sekundę, gdyby nie fakt, że gra nie została nigdy ukończona a studio zbankrutowało. Opierając się na plotkach i domysłach maksymalną osiągniętą wydajność w grach określa się na poziomie 10-13 milionów polygonów. Aczkolwiek tak samo jak było w przypadku Nintendo 64, musimy pamiętać o tym, że liczy się nie tylko ilość wyświetlanych wielokątów, ale także to co z nimi potrafimy zrobić, a w tej dziedzinie Xbox jest bardzo mocną konsolą. Polecam zwrócenie uwagi na futro w „Conker Live and Reloaded”, animację materiałów miękkich w serii „Splinter Cell”, mapowanie normalnych w Chronicles of Riddick, czy też sugestywne efekty świetlne w „Doom 3”.

 

Jeden komentarz dla “Na progu rewolucji - część 3

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Ładowanie