Funkcjonalność i możliwości kart graficznych NVIDIA GF100 Fermi
W chwili premiery architektury GF100 znanej też pod kodową nazwą Fermi
na naszych łamach przedstawiliśmy relację z odbywającej się podczas targów CES
konferencji dotyczącej nowych kości graficznych NVIDII (patrz:
http://www.frazpc.pl/artykuly/820/Technologie/Architektura/Fermi/NVIDIA/GF100).
W relacji skupiliśmy się wówczas na architekturze. Warto jednak uzupełnić te
informacje o opis funkcjonalności i możliwości nowych układów 3D – tym bardziej,
że NVIDIA udostępniła już publicznie, w dobrej jakości, materiały i dokumenty ze
wspomnianej konferencji.
Oczywiście, uczestnicy konferencji Fermi Deep Dive, w tym redakcja FrazPC,
dysponowali już wcześniej również tymi materiałami, ale były one
spersonalizowane i co ciekawe, w taki sposób, że uniemożliwiały swobodną
publikację. Otóż przez wszystkie slajdy w poprzek ciągnął się napis z danymi
osobowymi uczestnika konferencji, dlatego nikt praktycznie nie opublikował tych
materiałów w Sieci. Niedawno otrzymaliśmy jednak od NVIDII „czyste” PDF-y, oraz
dodatkowe materiały, które możemy bez problemu wykorzystać w niniejszym
artykule.
Dla przypomnienia, GF100 składa się z 512 procesorów strumieniowych, które przez
konstruktorów karty nazwane zostały procesorami CUDA. Układy te pogrupowane
zostały w 16 bloków Streaming Multiprocessor (SM), które połączono w cztery
moduły GPC (Graphics Processing Cluster). Sam układ graficzny wykonany jest w 40
nanometrowym procesie technologicznym, wykorzystano w nim 384-bitową magistralę
danych współpracującą z pamięcią GDDR5. Karta zasilana jest dodatkowo dwoma
złączami 6 i 8-pinowym, a więc można spodziewać się większego poboru mocy.
Nieoficjalnie mówi się o 250 watach, ale przedstawiciele NVIDII nie komentują w
ogóle tej informacji – tak samo jak spekulacji na temat częstotliwości pracy
układu, która ma podobno wynosić 600-750 MHz. Potwierdziło się natomiast to, że
karty GF100 obsługują nowy typ wygładzania CSAA 32x (Coverage Sampled
Anti-Aliasing) informacja o trzech wyjściach monitorowych, które podobnie jak w
wypadku kart ATI mogą pracować w trybie jednoczesnego „rozciągnięcia” obrazu na
trzy monitory. Technologia ta, która jest odpowiednikiem techniki ATI EyeFinity,
nosi nazwę 3D Vision Surround.
Teselacja (ang. tessellation) to po prostu dzielenie wygenerowanych podczas
tworzenia obrazu 3D wielokątów na mniejsze elementy (trójkąty). Dzięki temu
zabiegowi wyświetlany na ekranie obiekt 3D lub jego fragment może być znacznie
dokładniej narysowany. Podczas przeprowadzanej przez kartę graficzną teselacji
powstaje znacznie gęstsza siatka trójkątów (trójwymiarowy szkielet), który
pozwala na znacznie bardziej realistyczne odwzorowanie chropowatych powierzchni,
nierówności lub zwiększenie gładkości powierzchni obłych. Wyjątkowo dobre
rezultaty w realistycznym odwzorowania obiektów uzyskuje się przy połączeniu
techniki teselacji i displacement mappingu.
Fot. 04 – Przykład realizacji algorytmu teselacji do wygładzenia powierzchni
głowy postaci. Charakterystyczną strukturę skóry, wraz z jej nierównościami i
zmarszczkami osiągnięto następnie dzięki zastosowaniu displacement mappingu.
Źródło: ATI
Fot. 05 – Przykład realizacji algorytmu teselacji, a następnie zastosowania
displacement mappingu do wygenerowania postaci potwora.
Źródło: NVIDIA
Realizowana sprzętowo teselacja, pod nazwą technologii TruForm, pojawiła się po
raz pierwszy w Radeonie 8500 w 2001 roku. Jedną z pierwszych gier wykorzystująca
tę technikę była zaś gra „Return to Castel Wolfenstain”.
Fot. 06 – Demo technologiczne „Dolphins” z 2001 roku przedstawiające
działanie teselacji i technologii TruForm.
Źródło: ATI
Fot. 07 – Teselacja krajobrazu realizowana na karcie z układem NVIDIA GF100.
Źródło: NVIDIA
Fot. 08 – Przykład efektów 3D uzyskanych dzięki teselacji poszczególnych
elementów sceny (skóra smoka, dachówki) realizowana na karcie z układem NVIDIA
GF100.
Źródło: NVIDIA
Za automatyczną teselację w kartach z układem graficznych GF100 NVIDII odpowiada
silnik teselacyjny o nazwie PolyMorph. Silników tych w Fermim jest 16 – po
jednym na każdy z 16 bloków Streaming Multiprocessor. Silniki PolyMorph Engine
równolegle realizują obliczenia w ramach graficznego potoku geometrycznego,
dzięki czemu wydajność teselacji w GF100 ma być, według NVIDII, do sześciu razy
większa niż w wypadku układu RV870 czyli kości Radeon HD 5870. Co ważne, liczba
przydzielanych do poszczególnych silników tesalacjnych jest skalowalna i może
się zmieniać w zależności od obciążenia zadaniami werteksowymi – stąd w NVIDIA
chwali się w swoich materiałach, że dzięki PolyMorph Engine zaimplementowano w
kości GF100 pierwszy na świecie skalowalny potok geometryczny.
Przejdźmy teraz do displacement mappingu nazywanego też po polsku mapowaniem
przemieszczeń. Technika ta zadebiutowała w świecie kart graficznych wraz z
premierą układu Matrox Parhelia 512 w 2002 roku. Mapowanie przemieszczeń pozwala
na wygenerowanie wypukłości obiektów na scenie 3D na bazie specjalnych tekstur
(zwykle przygotowanych w skali szarości) nazywanych mapami przemieszczeń. Mapa
przemieszczeń obrazuje po prostu wszystkie nierówności i chropowatości
odwzorowywanego obiektu jako zbiór jaśniejszych i ciemniejszych punktów. Te
pierwsze odpowiadają miejscom oświetlonym i widocznym dla obserwatora, drugie to
reprezentacja cieni i miejsc niewidocznych. Mapa przemieszczeń jest następnie
łączona z nakładaną na przedmiot teksturą, co w efekcie daje wrażenie powstania
nierówności i wypukłości dzięki naniesieniu na podstawową teksturę z mapy
przemieszczeń wspomnianych „cieni i świateł”.
Fot. 09 – Realizacja techniki mapowania przemieszczeń w połączeniu z
teselacją.
Źródło: Matrox, NVIDIA
Fot. 10 – Przykład uzyskanego obrazu dzięki zastosowaniu prostej mapy
wypukłości
Źródło: NVIDIA
Fot. 11 – Wykorzystanie displacement mappingu w grach. Dzięki tej technice
uzyskano tutaj ślady po kulach na metalowych drzwiach.
Źródło: NVIDIA
Zastosowanie teselacji i displacement mappingu do generowania obrazu ma wiele
zalet. Przede wszystkim ilość danych potrzebnych do wygenerowania obiektu nie
jest duża (co oznacza niskie zużycie pamięci karty graficznej i mniejsze
wymagania dotyczące jej przepustowości) oraz łatwo dostosować ją do mocy
obliczeniowej wykorzystywanej karty graficznej. Jednak najważniejszą zaletą jest
tutaj sprzętowo realizowana skalowalność dokładności odwzorowywania obiektów bez
ingerencji ze strony centralnego procesora komputera. Układ graficzny zgodny z
DirectX 11 po wcześniejszym określeniu dokładności, czynnik ten to parametr LOD
(Level of Details), sam z określoną dokładnością odwzorowuje obiekty bez
potrzeby przesyłania dodatkowych danych z systemu. Teselacja i przygotowywanie
map przemieszczeń realizowane są w całości przez kartę graficzną – twórca gry
nawet nie musi przygotowywać specjalnych algorytmów, a jedynie określa on jakość
odwzorowania i przekazuje ten parametr za pośrednictwem API DX 11.
Fot. 12 – Przykład identycznej sceny wygenerowanej przez kartę graficzną z
układem GF100 przy zastosowaniu różnych parametrów LOD.
Źródło: NVIDIA
Jakość obrazu
Na poprawę jakości (bez straty szybkości) generowanych przez układ GF100
przyczyniają się m.in. dwie techniki opisane w dokumentacji NVIDII – wspomniane
wygładzanie CSAA 32x oraz ulepszone fluktuacyjne próbkowanie punktów (jittered
sampling), które może być wykorzystywane m.in. przy skalowaniu tekstur,
filtrowaniu obrazu, zmniejszaniu wielkości sceny i antyaliasingu. Technologia
próbkowania jittered sampling generuje próbki punktów w sposób losowy, ale w
taki sposób, że otrzymane wartości są w miarę równomiernie rozłożone w
przestrzeni.
Fot. 13 – Wykorzystanie jittered samplingu – tu w teście 3Dmark 2006.
Źródło: NVIDIA
Ponieważ GF100 zgodny jest z bibliotekami DirectX 11, to jego jednostki
teksturujące muszą wspierać sprzętowo funkcje Gather4 oraz obsługiwać specjalne
formaty tekstur. Funkcja Gather4 pozwala m.in. na wykorzystanie niefiltrowanych
bloków tekstur w obliczeniach związanych z filtrowaniem dwuliniowym. Co więcej
obliczenia te mogą być realizowane z wyprzedzeniem na podstawie danych
otrzymanych z algorytmów przewidujących na kilka kroków do przodu operacje
graficzne, które będą za chwilę realizowane w potoku graficznym DX11. W układzie
GF100 wykorzystano tę właściwość funkcji Gather4 do „wydobywania” czterech
tekseli z matrycy 128x128 punktów przy pomocy jednej „teksturowej” instrukcji.
Dzięki temu tworzona jest bardzo szybko losowa, fluktuacyjna maska punktów,
przyspieszająca mapowanie cieni (shadow mapping), cieniowanie powierzchni
obiektów przestrzennych metodą ambient occlusion oraz realizację algorytmów
postprocessingowych, w tym anttyaliasingu.
Fot. 14 – Tworzenie fluktuacyjnej maski (jittered sampling) przy
wykorzystaniu zawartej w DX 11 funkcji Gather4.
Źródło: NVIDIA
Fot. 15 – Antyaliasing – różnice i rezultaty przy próbkowaniu 8x i CSAA.
Źródło: NVIDIA
Przejdźmy teraz do wygładzania krawędzi CSAA (Coverage Sampled Anti-Aliasing).
Ten typ antyaliasingu zadebiutował w układzie G80 (GeForce 8800). Wygładzanie to
polega na wykorzystaniu do określenia parametrów wynikowego punktu dodatkowo
próbek koloru oraz informacji z bufora Z. Dzięki temu przejścia tonalne na
wygładzanym obrazie są zdecydowanie płynniejsze, a krawędzie w efekcie wydają
się znacznie gładsze. Co ważne, przy wykorzystaniu techniki CSAA możliwe jest
też antyaliasingowanie obrazów HDR.
Fot. 16 – Szybkość antyaliasingu przy próbkowaniu 8x i CSAA.
Źródło: NVIDIA
Fot. 17 – Porównanie jakości obrazu dla CSAA 16x (badanie 16. punktów
otaczających piksel wynikowy – GT200) i CSAA 32x (32 punkty, GF100).
Źródło: NVIDIA
Jeśli chodzi o modyfikacje wygładzania, to, jak pamiętamy, w GeForce’ach z serii
7000 zadebiutował sterowany przezroczystościami tryb wygładzania zawartości
tekstur – Transparency Multisample Anti-Aliasing (TMAA). W ten sposób, za pomocą
tekstur z nadaną im wartością kanału alpha, wyświetla się w wielu grach m.in.
cienkie, liny, przewody, balustrady czy źdźbła trawy. Innymi słowy, metoda TMAA
pozwala na pozbycie się artefaktów w generowanym obrazie, jeśli na obiekt
nałożona zostanie przezroczysta tekstura. Dzięki temu np. gałęzie drzew czy
siatki płotu mają gładkie krawędzie (patrz:
http://www.frazpc.pl/artykuly/360/GeForce/7800/GTX/NVIDIA/na/tronie).
Teraz w układzie GF100 tryb TMAA wygładzania wewnętrznych krawędzi w teksturach
z nadanym im parametrem przezroczystości został ulepszony.
Fot. 18 – Porównanie jakości TMAA.
Źródło: NVIDIA
Obliczenia fizyczne
Spory nacisk funkcjonalny konstruktorzy układu Fermi położyli na obliczenia
związane z fizyką w grach. Rdzeń GF100 jest w pełni kompatybilny ze wszystkimi
obecnie najważniejszymi interfejsami programistycznymi. Programiści gier bez
problemu mogą napisać procedury wykonywane następnie przez układ graficzny
korzystając z języka C++ albo skorzystać z DirectCompute, PhysX-a lub OpenCL –
wszystkie one będą poprawnie działać.
Co ważne, poprawiono zarządzanie wątkami. Dzięki technologii, która nazwano
GigaThread udało się dziesięciokrotnie zwiększyć szybkość przełączania trybu
pracy karty graficznej między trybem przetwarzania grafiki, a trybem wykonywania
obliczeń np. związanych z fizyką czy sztuczną inteligencją. Dlatego, jak
twierdzi NVIDIA, gry przyszłości będą mogły nie tylko być bardzie złożone pod
względem graficznym, ale również wyświetlać większą liczbę obiektów, które będą
na siebie oddziaływać, a postacie będą mogły zachowywać się w jeszcze bardziej
naturalny sposób.
Istotną ciekawostką jest to, że dzięki pełnej obsłudze API DirectCompute z DX 11
przez układ GF100, można na drodze obliczeniowej, a nie graficznej uzyskać
efekty postprocessingowe (czyli realizowane już po wygenerowaniu sceny 3D) takie
jak rozmycie poruszających się obiektów (motion blur), miękkie cienie (soft
shadow), zmiany głębi ostrości oraz operacje cząsteczkowe, a więc wygenerować
dym, kurz czy mgłę. Taka obliczeniowa realizacja tych operacji jest według
NVIDII do 20 razy szybsza niż w wypadku wykorzystania tradycyjnych metod
graficznych.
Fot. 19 – Przykłady wykorzystania „czystej” mocy obliczeniowej karty
graficznej GF100 w grach przyszłości.
Źródło: NVIDIA
Fot. 20 – Gra Dark Void wykorzystuje możliwości układu GF100 do obliczeń
cząsteczkowych (kurz i efekty rozbicia obiektów za pomocą broni).
Źródło: NVIDIA
Fot. 21 – Efekty cząsteczkowe.
Źródło: NVIDIA
Supersonic Sled
Na końcu parę chwil warto poświęcić technologicznemu demu Supersonic Sled.
Przygotowane ono zostało po to, aby zaprezentować możliwości układów z serii
GF100, a jednocześnie pozwala użytkownikowi analizować szczegółowo wszystkie
parametry dotyczące grafiki oraz fizyki poruszających się w demie obiektów. Co
ważne, można też obserwować skutki własnych poczynań, które zgodne są z
obowiązującymi w świecie realnym prawami fizyki. Co ciekawe, zmieniając lekko
parametry nigdy nie otrzymamy, tak jak w realnym świecie, tych samych efektów
końcowych.
Fot. 22 – Supersonic Sleed.
Źródło: NVIDIA
Fot. 23 – Realizowane w demie Supersonic Sleed różne rodzaje symulacji
efektów fizycznych i zastosowanie nowych technik wykorzystywanych do generowania
obrazu.
Źródło: NVIDIA
I na zakończenie chcieliśmy zaprezentować krótki film prezentujący demo
Supersonic Sleed - źródło: NVIDIA.