Je cosi shnilého v postapokalyptickém New Yorku
Balíku Ultra Upgrade pro Crysis 2, který díky využití DirectX 11 obohatil hru o mnohé grafické vychytávky, jsme se na ExtraHardware již věnovali. Pokud jste článek Adama Vágnera přehlédli, rozhodně to nyní napravte (důležité jsou kapitoly se srovnáním detailů před a po patchi a testy výkonu).
Damien Triolet se již ve svém článku ze 7. července/júla podivoval nad tím, proč má obrubník (který je v DX11 verzi k nerozeznání od své původní neteselované podoby) nezvykle mnoho polygonů…
Zdroj: http://www.hardware.fr/articles/838-6/tessellation-loupe.html
(najdete tam obrázky stejné scény v DX9 a DX11, taktéž si je můžete zobrazit v plném rozlišení)
…nebo proč se wireframe model teselované vodní hladiny generuje i tam, kde žádná voda není a hladinu tak zakrývají ostatní objekty.
Mimochodem, jednou z hlavních výhod teselace je, že geometrický model
objektů se může dynamicky měnit podle toho, jak daleko od hráče se
nacházejí – blízké objekty tudíž mohou být hezky propracované, zatímco
vzdálenější nespotřebovávají příliš mnoho výkonu. Tento dynamický aspekt
teselace ale u Crysis 2 poněkud nefunguje – vodní hladina je stále stejně detailní, v dálce se zvýrazněný geometrický model slévá do jednolitého růžového pole. A to navzdory tomu, že úroveň jiných detailů se vzdáleností škáluje poměrně agresivně.
Na Damiena navázal Scott Wasson z The Tech Report. Pomocí programu GPU PerfStudio zjišťoval, co při renderování snímku dlouho trvá, a taktéž sledoval geometrické modely objektů. Tak například tato betonová zábrana, velice častý to objekt v ulicích New Yorku…
Zdroj: http://techreport.com/articles.x/21404/2 (najdete tam i screenshoty z jiných úhlů)
…po aplikace patche získala teselované výstupky na vrchní straně (poutka pro zachycení na jeřáb). Ačkoliv to tak na první pohled nevypadá, betonová bariéra je jedním z nejdetailnějších objektů, které v Crysis 2 najdete. Takto vypadá její geometrický model. Pokud se díváte dostatečně z dálky, některé polygony budou menší než jeden pixel (což ostatně platí i o výše zmíněném obrubníku).
Zdroj: http://techreport.com/articles.x/21404/5
Prkna na podlaze jsou s teselací hezky zohýbaná. Některá jsou ovšem perfektně rovná a i přesto je jejich geometrický model až neuvěřitelně detailní. A podobných příkladů je víc. Obyčejné objekty, na nichž má teselace minimální efekt (pokud vůbec nějaký), jsou složeny z mnoha maličkých polygonů.
Propady výkonu a jejich řešení
Je zřejmé, že efekty, které do hry přidává balík Ultra Upgrade se musí nějak projevit na framerate, kterého grafické karty dosahují. Podle měření, které provedl kolega Adam Vágner, to nejsou ani tak textury ve vyšším rozlišení, jako právě „ultra“ efekty v DirectX 11, které dokáží výkon srazit klidně o desítky procent:
Vzhledem k tomu, že GeForce architektury Fermi mají jednotky pro zpracování bohatě naddimenzované, se ultra detaily projevují propadem výkonu o 17 % u karet s čipem GF110 a o 20–21 % u karet s čipy GF104/GF114 (ty mají totiž vyšší poměr shaderů a texturovacích jednotek vůči jednotkám obstarávajícím geometrii, nazývaných Polymorph Engine).
Zdroj: http://www.hardware.fr/articles/838-7/influence-tessellation-son-niveau.html
Daleko více, o 31–39 %, se ovšem propadá výkon Radeonů, jejichž geometrický výkon je o něco skromnější. Není divu – s teselací rovných ploch a trojúhelníky menšími než jeden pixel inženýři AMD nepočítali. Proč se v Crysis 2 takto plýtvá výkonem grafických karet? Může za to lenost vývojářů, kteří se s nastavením teselačního faktoru nepatlali a nastavili jej na maximum na všech objektech?
EA údajně tlačilo na Crytek, aby Crysis 2 vydalo co nejdříve, čemuž ostatně nasvědčuje i jeho technologická úroveň v době vydání. Je pak docela logické, že vydavatel nechtěl dávat příliš velký rozpočet projektu, který ze hry udělal výkladní skříň nových technologií, stejně jako tomu bylo v případě prvního dílu.
Existuje ale ještě jedno vysvětlení. Z mých úst by to mohlo znít zaujatě, pokusím se tedy o co nejvěrnější překlad z článku Scotta Wassona na The Tech Report (přesto nepochybuji, že lokální PR zastoupení Nvidie zanechá v redakční e-mailové schránce vřelý pozdrav).
Máme potvrzeno, že lidé z Nvidie byli zklamáni tím, jak Crysis 2 vypadal při vydání, stejně jako mnoho hráčů. Problém nastává, jak to tak občas bývá, když se vývojář hry a dodavatel GPU spiknou a přidají do hry trochu „speciální omáčky“ takovým způsobem, který pro širší komunitu hráčů nemá žádný přínos. Pro takové věci existuje v éře DX11 precedens. Jak techdemo Unigine Heaven, tak Tom Clancy's HAWX 2 pochybným způsobem navyšovaly počty polygonů na úrovně, které zvyšovaly zátěž na zpracování geometrie, aniž by poskytly proporcionální zvýšení kvality obrazu.“
Autor dodává, že málokterá hra se zapnutou teselací zpomalí Radeony natolik, jako Crysis 2, neboť jejich vývojáři neženou počty polygonů do zbytečně vysokých čísel.
Naštěstí existuje způsob, jak geometrické jednotce alespoň částečně ulehčit práci. Je to tento posuvník v Catalyst Control Centeru, kterým ovládá strop teselačního faktoru.
Přílišným snížením úrovně teselace se ale připravíte i o detaily na objektech, které teselace opravdu vylepšila. Damien Triolet tak radí nastavit úroveň na 32 a pokud jste ochotni na oltář výkonu obětovat malou část kvality obrazu, tak na 16. Jak se mění propady výkonu s různým nastavením posuvníku, zobrazuje následující graf.
Damien Triolet i Scott Wasson se shodují, že Crysis 2 není vhodným reprezentantem výkonu grafických karet v současných hrách. Redaktor serveru The Tech Report tedy přemítá, zdali by nebylo nejlepší v této hře grafické karty vůbec netestovat, nebo její výsledky v recenzích nezapočítávat do výsledných grafů průměrného výkonu a poměru výkon/cena. Průměrné hodnoty jsou vůbec ošemetné a jako vždy doporučejeme sledovat, z jakých testů je průměr vytvořen, a úplně nejlépe na jednotlivé herní testy.
Zeptali jsme se 3D grafika
Ve snaze lépe pochopit, co mohlo vést vývojáře Crysis 2 k poněkud kontroverzní implementaci teselace, jsme oslovili 3D grafika Štěpána Prokopa, kterého můžete znát pod přezdívkou SamanCZ. Za jeho věnovaný čas, navíc o víkendu, mu tímto děkujeme.
A za druhé opět zjemnění sítě, ale za účelem displacement mappingu nebo aplikaci height mapy. Tady je pro dosažení kvalitního výsledku již potřeba mít sít stejně jemnou, jako jsou samotné textury, a ideálně ještě jemnější. Pro příklad, pro texturu s rozlišením 128 × 128 aplikovanou na jeden polygon je dobré, aby teselace daný polygon zjemnila na 128 × 128 či více polygonů; v takovém případe se může plně využít potenciálu dané efektové mapy a každý pixel na textuře tam může mít svou výšku.
Pokud je takový polygon teselovaný na 256 × 256 polygonů, v tu chvíli se může mezi jednotlivými pixely textury použít i nějaký plynulejší přechod a objekt se bude zdát ještě hladší či plastičtější díky spojení efektu teselace a displacement/height mapy. Pro tento typ teselace je ale potřeba se na objekt dívat opravdu zblízka, kde narazíte právě na hranici zubatosti samotné textury. Tedy v případě onoho betonového bloku se skrčit a přijít až k němu, prostě co největší detail (například na obrázcích 14 a 15 v galerii na The Tech Report).
Proč jsou v Crysis 2 objekty teselované i na místech, kde jsou naprosto
rovné? Zřejmě kvůli problémům s příliš hubenými a dlouhými polygony.
Grafická karta se obtížně vypořádává s polygonem, který by byl široký třeba jeden milimetr a dlouhý pět metrů. Takovéto polygony mně dělaly problémy
ve všech enginech, co jsem kdy měl možnost používat a co si pamatuji.
Ale proč tomu tak je, netuším. Toto by částečně měla řešit dynamická
teselace i na singlemesh objektech, ale ta zřejmě v Crysis 2 není
přítomna a objekt se tak teseluje stejně na celé jeho ploše, ať je od
kamery místo na objektu jakkoliv daleko.“
Adam Vágner: Na tomto místě Lukáše i Štěpána doplním. Natípal jsem pár dalších snímků, na kterých už jsem se nezaměřoval na příliš jemné objekty jako takové, ale na konkrétní neduhy a vlastnosti polygonové sítě. Doporučuji u všech obrázků procházet originály v PNG, na zmenšených náhledech je velikost trojúhelníků zkreslená a také komprese jpeg tenkým fialovými liniím nesvědčí. Na náhledech to pak vypadá hůř než ve skutečnosti, a platí to i pro obrázky na zahraničních serverech.
Když se v současnosti bavíme o teselaci, máme téměř výhradně na mysli první Štepánem zmiňovaný přístup, tedy že se zjemní polygonová síť tak, aby se zaoblily hranaté modely s nízkým počtem polygonů, nebo že dojde k nějakému jednoduchému vyhloubení v místě spár či vyboulení v místě, kde z terénu vykukuje velký kámen nebo hrouda.
Když se ale podíváte na následující screenshoty, je z nich zřejmé, že se v Cryteku snažili implementovat náročnější displacement mapping s detailní výškovou mapou. Velmi dobře je to vidět na prkenném molu v jedné z úvodních úrovní. Na prvním snímku jsou detaily nastavené na „extreme“, takže je teselace vypnutá. Můžete si všimnout, že molo tvoří obrovské trojúhelníky, na kterých je textura prken.
Se zapnutím teselace se aplikuje displacement map, tedy ona náročná mapa výškových nerovnosti povrchu. Na náhledu ani zmenšeném obrázku to vidět není, ale pokud si otevřete originál komprimovaný v PNG, v levém dolním rohu si můžete všimnout, že jsou prkna vyhlodaná a jsou v nich důlky. Nejde tedy o to, že by byly rovné polygony zbytečně rozsekané na menší kousky, ale o vyvoření opravdových plastických nerovností, kterých by s hrubším meshem nebylo možné dosáhnout.
Výsledkem je krásná a autentičtější struktura prken ohlodaných časem a příšerný mesh s přibližně stejně miniaturními trojúhelníky po celé ploše. Poblíž kamery nejsou ještě tak malé, s větší vzdáleností se ale objekt nekompromisně barví do fialova.
Ať to vypadá sebevíc skvěle a podobně jako u cihel až přehnaně, otázka zní, kdo si něčeho podobného vůbec všimne a jestli to není s ohledem na výkon stávajících grafických karet příliš velký luxus.
Teď se podrobněji mrkneme na již zmíněné zábrany. Na prvním obrázku se můžete podívat na lowpoly model. Všimněte si svislé hrany. Na ní jsou Štěpánem zmiňované problematické dlouhé polygony. Zatímco na rovných plochách nevypadá síť zase tak tragicky, na dlouhých polygonech na obloucích hran je to téměr jednolitá fialová barva.
Na prvním snímku jsou na pak na hraně zřetelné zlomy, na druhém už jsou ale rohy hezky oblé. Ovšem daní za to je opět extrémně jemná polygonová síť.
Ani podobná síť nestačí na to, aby vytvořila jemnou strukturu betonového povrchu. S využitím normálové mapy a starších méně náročných technik se na jemnou síť přidává ještě detailnější hra světel a stínů na drobných nerovnostech.
Problém u implementace teselace v Crysis je v tom, že se mesh a velikost trojúhelníků se vzdáleností objektu od uživatele příliš nemění. Zatímco z Unigine Heaven máme zažito, že teselace znamená hlavně to základní dodatečné „sochání“ a tvarování jednodušších objektů, když se k nim přiblížíte, v Cysis 2 jde spíše o to modelování detailní struktury povrchu pomocí výškových map. Pro ilustraci jsem udělal ještě tuto trojici snímků:
originál | originál | originál
Pokud se podíváte na mesh na prvním obrázku, nevypadá hustota trojúhelníků zase tak tragicky. Dokonce lze říci, že když si stoupnete blíž, není kontura objektu dostatečně jemná a u ostřejších úhlů lze jasně rozeznat polygony.
Z větší vzdálenosti už síť houstne a u některých polygonů padá velikost už někam pod 16 pixelů, které AMD označuje za ideální. A z ještě větší dálky je zeď už téměř celá červená.
Z porovnání velikosti trojúhelníků na druhém a třetím obrázku lze zjistit, že se s větší vzdáleností trojúhelníky zvětšují a k jakési optimalizaci tedy dochází. Jejich velikost však naroste jen zhruba na dvojnásobek, přestože je objekt z větší vzdálenosti už několikrát menší.Výsledek má daleko k větším polygonům, na které jsme zvyklí ze stávajících technologických ukázek a možná proto to zahraniční autory při podrobnějším zkoumání tolik vyděsilo.
Není se ale co divit, že snímky vyvolaly takovou vlnu zájmu. S ohledem na to, jakým způsobem dosavadní hry teselaci využívaly, je pojetí implementace v Crysis 2 příliš velký luxus a dá se říci, že i plýtvání prostředky. Nikdo z nás ale neví, co za tím opravdu je (byť v tom někteří mají už od počátku této kauzy jasno). Vývojáři mohli chtít implementací displacement mappingu nabídnout něco víc, než mají dnes ostatní, náročnost mohli záměrně zvolit podle nejvýkonnějších grafických karet současnosti, nemuseli mít dostatek času a prostředků na větší optimalizace, a konečně nemůžeme vyloučit ani to, že hlavním důvodem náročnosti je skutečně to, že s implementací pomáhali programátoři Nvidie, kteří nemají povinnost řešit, jak to bude běhat na konkurenčních kartách (budeme-li předpokládat, že nešlo vysloveně o sabotáž konkurence).
A teď už zase předám slovo kolegům, aby se vyjádřili ke kauze „neviditelné“ vody, která je dalším trumfem v rukou konspiračních teoretiků.
S velkou pravděpodobností je tento objekt sice viditelný v podobě wireframe na oněch screenshotech, kde je polygonová síť růžově zvýrazněná, ale předpokládám, že má deaktivovanou viditelnost a pokud by se k němu hráč měl přiblížit nebo jím projít (například při sestupu do podzemí nebo metra), tak daný objekt neuvidí; viditelnost se aktivuje jen v misích, kde má význam coby moře a tedy hranice scény.
V některých případech takový objekt sloužit i jako dead kolize pro případ, že by se hráči jakkoliv podařilo dostat pod kolize scény a následně by padal do prázdna (známe kupříkladu z Dooma po zadání cheatu na procházení zdí, za zdí mimo místnosti scény pak zkrátka nic kromě pozadí není). U 3D her, kde kolize není, nebo ji hráč nedopatřením propadne třeba vinou fyziky, tak prostě padá a padá a padá donekonečna.“
Upřesněme, že konkrétně v Crysis 2 není skrytá vodní hladina všudypřítomná, nadbytečná polygonová síť se vyskytuje pouze v lokacích nedaleko vody (i když i stovky metrů ve vnitrozemí). Je ale možné, že vodní hladinu tvoří jeden nebo více čtverců či kruhů, s jejichž ohraničením se vývojáři příliš nepárali. Zvlášť když teselace a z ní plynoucí zátěž na geometrickou jednotku byla přidána až dodatečně.
GPU od Nvidie, ani to, že Crysis 2 je další hrou, kde se hledí na čas a peníze (což je naprosto drtivá většina komerčních her) a na ladění teselace prostě nebyl dostatek času.“