Reverb G2 (2): optimalizace DCS

V dnešním článku se podíváme na to, jak nejlépe optimalizovat VR headset HP Reverb G2 pro použití v simulátoru DCS. Vycházet budu samozřejmě z vlastních zkušeností, které jsem získal na svém HW: CPU i7-7700K (5.0 GHz), 32 GB DDR4 RAM (3000 MHz), nVidia RTX3080 (10 GB), disky SSD. Jak je zřejmé, nejedná se o ideální kombinaci HW, protože velmi výkonné grafické kartě, která však má pro potřeby VR poměrně malou VRAM, sekunduje dnes už zastaralý procesor byť na vysokém taktu a paměti sice s dostatečnou kapacitou, avšak s pomalejším taktem.

Reverb G2 není třeba asi nijak podrobně představovat, jedná se o headset s nejvyšším rozlišením na trhu, konkrétně 2160 x 2160 px na každé oko a s frekvencí 90 Hz. Heaset má čtyři kamery zajišťující tracking a proto funguje pod WMR (Windows Mixed Reality).

Pokud ladíme nastavení simulátoru pro HW, který není optimální, je nezbytné uchýlit se ke kompromisům tak, abychom dostali výsledek, co nejvíce se blížící našim představám. Osobně jsem si stanovil své priority takto:

  1. Hladký chod bez celkového trhání i v náročnějších scénářích.
  2. Maximální možnou absenci “shimmeringu” (chvění okrajů objektů a horizontu, způsobené nedostatečným vyhlazováním).
  3. Graficky pěknou renderovanou scénu (stíny, odlesky, detaily,…).

V praxi to znamená, že jsem se rozhodl být ochoten “obětovat” do jisté míry kvalitu zobrazení (bod 3), abych upřednostnil splnění požadavků v bodech 1 a 2.

Pro zpětnou vazbu výkonu (FPS, timing aj.) používám fpsVR, který se zobrazuje jako překrytí (overlay) v simu (lze ho ale také zobrazit i na desktopu). Důležité je, aby timing GPU i CPU byl v oranžových hodnotách, tj. někde mezi 13-18 ms. Jakmile se timing dostane do červené barvy (nad 20 ms) nastává trhání scény. Proto je při ladění třeba sledovat, spíše než hodnotu FPS, zda především dosahujeme konstantního nízkého timingu na GPU i CPU.

  1. Hladký chod bez trhání

Reverb G2 vyžaduje 90 FPS (alternativní nbízená frekvence 60 FPS je v praxi nepoužitelná). Zmíněných 90 FPS však žel v DCS není stabilně dostažitelných ani na maximálně “ořezaném” nastavení grafické kvality. Jakmile totiž FPS klesne na 70-80, vzniká trhání vykreslené scény a VR se stává nepoužitelným. Proto nezbývá, než se uchýlit k tzv. reprojekci. Tím se nám sníží požadované FPS na polovinu, tj. 45 (dosaženo je vkládáním uměle vytvořeného snímku za každý snímek renderovaný simulátorem). Benefit je zřejmý: získáme hladký chod tam, kde by jinak byl obraz trhaný.

Samozřejmě nic není ideální a reprojekce proto také přináší své nevýhody: rychle se pohybující objekty v našem zorném poli mají trhaný pohyb a patrný “ghosting.” A to je velmi nepříjemné, především u bojového simulátoru, kdy k tomu jevu dochází právě v nejvypjatějších chvílích, kdy se letadla (objekty) míjejí v těsných blízkostech. Přesto je reprojekce podle mého menším zlem a v podstatě jedinou možností, dokud nebude existovat dostačně silný HW, který by utáhl simulátor na stabilních 90 FPS za všech okolností. Osobně jsem s reprojekcí schopen žít, navíc, jak uvidíme níže, její projevy se dají do jisté míry eliminovat vyšším renderovaným rozlišením.

2. Jak eliminovat “shimmering”

Možná to je věc osobní preference, ale “shimmering” považuji za nepřítele číslo jedna. Tento problém můžeme při nevhodném grafickém nastavení pozorovat i na desktopu, ale ve VR je celá záležitost se shimmeringem mnohem viditelnější. Konstantní frekventované chvění hran objektů a horizontu je něco, co u mne zcela ničí pozitivní dojem z renderované scény a přispívá k únavě a diskomfortu očí.

Se shimmeringem lze bojovat dvěma způsoby: vyšším antialiasingem a/nebo vyšším rozlišením renderované scény. Žel obě řešení jsou obvykle značně náročná na systémové prostředky a případný úspěch či neúspěch závisí na nalezení jistého “ekvilibria” tj. vhodného nastavení, které váš systém ještě zvládne a které dostačuje na eliminaci shimmeringu. Po mnoha pokusech a testování na svém HW jsem nakonec dospěl k závěru, že je nutný MSAA 2x, který hra nabízí. Bez něj to prostě nejde. MSAA žel není nejefektivnější způsob vyhlazování (TXAA by pravděpodobně bylo efektivnější), ale jinou možnost v DSC nemáme (pokud vás napadá využít voleb AA v NVCP panelu, tak na to zapoměňte, v DCS simulátoru jsou tyto volby zcela bez efektu). Na druhou stranu MSAA 4x implementované v DCS nepřináší prakticky žádné vizuální vylepšení ve srovnání s MSAA 2x, a proto ho také nedoporučuji.

Ovšem ani samotné MSAA 2x nestačí, je nutné ho doplnit o pařičně kvalitní renderované rozlišení. Pro VR se nastavuje rozlišení jednak v simulátoru DCS parametrem PD (Pixel Desity) na záložce VR, kde dopoučuji ponechat defaultních 1, a pak v SS (SuperSample) nastavení SteamVR. Zkoušel jsem vše v rozsahu 50 až 100% a musím konstatovat, že teprve při nastavení 100%, což je podle SteamVS ideální nastavení pro Reverb G2 (pozor jedná se o vyšší rozlišení, než je nativní rozlišení displejů headsetu), je shimmering eliminován na únosnou (tj. velmi málo znatelnou) úroveň (nepočítáme-li novou implementaci mraků na horizontu, ale o tom se ví a ED na opravě údajně opracuje).

Lze tedy konstatovat, že elimace shimmeringu v DCS je do značné míry zajištěna kombinací MSAA = 2x, PD = 1.0 a rozlišení SteamVR = 100%. Navíc jako bonus získáme při tomto nastavení méně znatelné trhání rychle se pohybujících objektů v důsledku reprojekce.

P.S. Velmi podobných výsledků lze dosáhnout také MSAA = OFF, PD = 1.0 a Steam VR = 150%. Osobně se mi ale o málo graficky lepší jeví varianta s MSAA 2x (je to však velmi subjektivní, rozdíly jak v grafice tak v požadavcích na výkon jsou, zdá se, minimální).

Jak ale jistě tušíte, uvedená kvalita zobrazení je vykoupena značnými nároky na výkon grafické karty, které ani RTX 3080 neustojí, pokud si nepomůžeme snížením a optimalizací jiných parametrů. A proto se dostáváme k bodu 3:

3. Optimalizace grafických efektů

Aby byla eliminace “shimmeringu” popsaná v předchozím bodě funkční, je třeba dvou věcí:

Snížit řadu grafických nastavení a oželet tak mnoho “hezkých” vlastností, jako jsou ostré textury země, kvalitní stíny v kokpitu, odlesky, renderovaná vzdálenost aj. moje nastavení nelépe ukáže screenshot:

Textures = textury kokpitu, ponechat vždy na High
Terrain textures = rozdíl mezi High a Low je ve VR zásadní pro využití kapacity VRAM! Máte-li 10 GB nebo méně, volba Low významně pomůže k lepšímu výkonu. V mém případě, mělo snížení tohoto parametru dramatický výrazný pozitivní efekt na výkon.
Water = Low se od vyšších nastavení liší, zdá se, pouze absencí bílých hřebenů vln.
Visibilty Range = ideálně Medium/High (pozor, je to výchozí hodnota pro nastavení Forest visibilty)
Shadows = stíny v kokpitu + stíny pro objekty v malém radiusu kolem vaší pozice (letadla, stromy, auta, budovy). Velký rozdíl v dopadu na výkon i na vizuální stránku! Pokud to vaše grafická karta utáhne, doporučuji Low jinak Flat nebo OFF. Výkonnostní dopad lze částečně kompenzovat mody – viz níže.
Resolution = nemá vliv na VR
Res. of cockpit displays = stačí 512 (pozor, týká se i zpětných zrcátek)
Clouds = ve 2.7 zatím ve VR není vizuální rozdíl mezi Low a Ultra.
SSAA = účinný, ale na výkon náročný a pro VR se nehodící AA, získávaný renederováním ve vyšším rozlišení a následným zmenšením rozlišení na původní velikost (podobného efektu se dosahuje posuvníkem pro SS ve SteamVR).
SSLR = odlesky, metalický povrch letadel, efetk je ve VR neznatelný, OFF
SSAO = stíny kolem přístrojů a hran v kokpitu, efetk pro VR také neznatelný, OFF
Clutter/Grass = minimální dopad na výkon, ale pozor tráva je náchylná na shimmering
Forest Visibilty = máme-li Visibilty Range na rozumné hodnotě, lze nastavit naplno
Forest Detail Factor = kvalita zobrazení stromů (stačí polovina, pak už není ve VR pozorovatelný efekt)
Scenery Details Factor = kvalita domů a objektů (stačí polovina, pak už není ve VR pozorovatelný efekt)
Preload Radius = nastavit ani málo ani hodně, ideálně kolem 40 000
Anisotropic Filtering = stačí 4x, na rozdíl od jiných her je AF v tomto simu poměrně náročné a snižuje výkon
Terrain Object Shadow = globální stíny stomů, budov a terénu na mapě; Flat (pokud karta nezvládá tak OFF), Flat lze poladit mody pro lepší výkon – viz níže.
vSync = OFF, není potřeba ve VR
Full Screen = ON

Další tip na zvýšení výkonu:
Pokud odškrtneme Full Screen, Use DCS System Resolution a Crop to Rectangle máme o něco málo lepší výkon, než kdybychom ponechali uvedené checkboxy zaškrtnuté a spouštěli DCS defaultně ve full screenu.

Za zmínku stojí také Force IPD distance na záložce VR: zde je třeba zadat menší (!) hodnotu, než jakou má vaše reálné IPD (rozpětí zorniček očí), aby měl vykreslený svět správné rozměry. Jak moc hodnotu ponížit, záleží na vašem IPD, ale jako obecné vodítko mohou posloužit hodnoty cca o 11 – 14 nižší, než jaké je vaše IPD. Př. já mám své IPD 59 a zde nastavuji hodnotu 47, pak vidím vše v reálné velikosti.

Nezapomeňte také vypnout Wake turbulence – je to funkce extrémně náročná na výpočet! Simuluje proudění vzduchu za letounem, které je citelné pro letoun v relativně těsné blízkosti za zádí prvního letounu. Pro WWII moc význam nemá, hodí se spíše pro proudové letouny, např. když tankují ve vzduchu a pod.

Pro další upřesnění doporučuji ke shlédnutí následující video (od autora scriptovaných kampaní pro DCS):

A ještě jeden přehledný návod na optimalizaci DCS 2.7 ZDE.

II. Je třeba si také pomoci MODy, které dále sníží nároky na výkon grafické karty a na využití její paměti VRAM. Pro DCS 2.7 používám následujcí tři mody, které neomezí vstup na MP (tj. projdou přes Integrity Check):

A) Mod od autora Heat-of-speed (jedná se o mírně modifikovaný Kagetyseho MOD). Info a download ZDE.
Před instalcí modu pomocí mod manageru (např. OVMGE nebo OpenMod Manager) je třeba nastavit podle uvážení parametry v souboru …/bazar/shaders/deffered/ _HMD.hlsl. Moje nastavení pro maximální výkon vypadá takto:

V sekci “Optimization” doporučuji vypnout SIMPLE_GLASS (způsobuje horší průhlednost kabiny) a v sekci “Improvements” nenastavovat TERRAIN_SHADOW_MS ani ATOC, pokud plánujete použít Mustangův “Flat Shadow removal mod” – viz níže bod C)

pozn. Pokud létáte pouze Single Player a tedy nepotřebujete projít přes IC (Integrity Check), doporučuji spíše původní Kagetsyho mod, který nabízí větší optimalizaci a získáte s ním proto o něco lepší výkon.

B) Mod od autora Mustang. Snižuje především mlhu/opar na horizontu (plus upravuje pár dalších grafických detailů, jako jsou brázdy za loděmi apod.)
Info a download ZDE.

C) Flat Shadow Removal Mod také od Mustanga. Pro celkový výkon velmi přínosný MOD, který deaktivuje Flat shadows stromů a budov a ponechá pouze stín vlastního letadla, blízkých objektů a především ponechá stíny v kokpitu. Pozor: funguje pouze, když je nastaveno Terrain Object Shadows = Flat. Info a download ZDE.

Pozn. MODY instalujte vždy ve výše uvedeném pořadí (některé soubory z modů se vzájemně přepisují a chceme v DCS mít ty správné). Před prvním spuštěním po instalování modů je také potřeba smazat obsah adresářů, kde jsou předkompilovány shadery. Jedná se o adresáře:

…\Saved Games\DCS.openbeta\fxo\
…\Saved Games\DCS.openbeta\metashaders2\
…\DCS World OpenBeta\Mods\terrains\[mapa]\misc\metacache\dcs\

Závěr by tedy mohl být pozitivní: výše uvednou kombinací modů a popsaného nastavení se v případě mého HW dosáhne jistých 45 FPS ve většině SP misí, které jsem zkoušel. Renderovaná scéna je většinu času plynulá a bez výrazně rušivého shimmeringu.

Ale nic nebývá ideální, a tak se v mém případě díky svému slabšímu CPU dostávám mimo akceptovatelný limit při výpočetně náročných scénách (např. mnoho B-17 střílejících ze všech střelišť po stíhačích). A pak žel k mému velkému zklamání mám pro mne zatím neřešitelný problém na velkých WWII MP serverech s mnoha objekty a scriptovací zátěží, jako jsou Storm of War a LFDM, kde už při spawnu v hangáru u mne dochází k nadměrnému kolísání timingu na GPU. Výsledkem je neakceptovatelných 30-35 FPS. Naopak u MP serverů s menší grafickou a scriptovací zátěží je vše OK, viz např. server Clash of Wings, kde mám výkon srovnatelný se SP misí.

Popravdě stále úplně nerozumím, proč v mém případě dochází k tak značnému kolísání timingu GPU na některých serverech, když na stejné mapě a s velkým počtem objektů v SP problém nemám. Zátěž CPU nebývá na MP serverech nijak výrazně odlišná (nepřesahuje 15 ms).

Server LFDM (mapa Normandie) – nehratelné :-(
(MSAA 2x, PD= 1.0, SteamVR = 100%)
Server Clash of Wings (mapa Kavkaz)
stabilních 45 FPS s reprojekcí
( MSAA 2x, PD= 1.0, SteamVR = 100%)

Uvedené kolísání timingu GPU se u mne však na serverech Storm of War i LFDM vyskytuje i pokud výrazně snížím procenta SS SteamVR a dokonce i pokud zcela vypnu MSAA! Pokud snížím nároky na GPU, je pokles timingu CPU i GPU pouze minimální a výsledné FPS je dokonce ještě nižší!

Server LFDM ( MSAA = OFF, SteamVR= 50%)

Pozn. Average FPS je ve výše uvedených příkladech nevypovídající hodnota, protože screenshoty jsou pořízené z doby velmi krátce po začátku mise a do průměrné FPS jsou započítány i úvodní velmi nízké FPS při spawnu. Uvedný údaj aktuálních FPS je v obou uvedených příkladech stabilní hodnota.

Celé mi to nějak nedává smysl, protože v obecných benchmarcích má moje grafická karta i celá sestava slušné skore a připojení k netu mám výborných 500 MBit/s. Ani zátěžové testy neodhalily žádný problém HW (jako např. throttling) a samozřejmě jsem vyzkoušel různé verze grafických ovladačů nVidia. Ze zbývajících možností mne napadá snad jen problém s neoptimalizovaným net kódem DCS nebo přílišné scriptování na uvedených serverech spojené s velkým množstvím objektů, ale pak bych zároveň očekával také výrazněji vytížené CPU. Navíc pokud DCS spouštím na desktopu, nemám s výkonem na obou serverch žádný problém ani na maximální grafické nastavení. Prostě záhada…

TIP na závěr: pokud ladíte nastavení, je vhodné používat stále stejnou misi, aby bylo možné pozorovat rozdíly. Pokud vlastníte modul P-47D a mapu The Channel, pak takovou vhodnou misí, která do jisté míry může plnit roli “benchmarku” pro VR, může být defaulní mise Yardwork. P-47 je nejnovější modul pro DCS, který je díky tomu v porovnání s ostatními warbirdy nejnáročnější na grafiku, a to samé platí také o mapě Kanálu v porovnání s mapou Normandie. Po spawnu stojíte na letišti, kde je plno objektů; kromě vašeho flightu čtyř Thunderboltů ihned po nastartování mise vzlétá ve vašem zorném poli čtveřice Spitfirů a zároveň na jiném místě mapy vzlétá další čtveřice Mustangů. Pokud vaše FPS ustojí prvních 60s této mise bez ztráty kytičky, je zřejmé, že máte plynulost zaručenou ve většině SP misí :-)

SP mise Yardwork s původním Kagetsyho modem
stabilních 45 FPS s reprojekcí
(MSAA 2x, PD= 1.0, SteamVR = 100%)

Poznámka na závěr: pro účely ladění výkonu je samozřejmě vhodné vždy také deaktivovat veškerý doplňkový SW pro DCS, jako TacView, VAICOM doplněk pro VoiceAttack, SRS radio, SimShaker apod. které mohou generovat na pozadí stream dat a tím někdy i výrazně navýšit vytížení celé PC sestavy.

V následujícím článku se budu věnovat dalším tipům, jak je možné zvýšit a optimalizovat výkon celé herní sestavy pro VR.