Logo VIVEVýkon vykreslování VR
Tuning a optimalizace

Zavedení

Dosažení optimálního zážitku VR na hardwaru s omezenými zdroji je klíčem k zajištění hladkého a pohodlného uživatelského zážitku. Pokud snímková frekvence vykreslování obsahu klesne nebo je nestabilní pod obnovovací frekvencí zařízení, povede to k trhání snímků a zadrhávání, nevolnostem z pohybu atd. nakonec negativně ovlivní uživatelskou zkušenost. Proto je optimalizace výkonu obsahu velmi důležitá pro zajištění příjemného zážitku.
Před zahájením ladění výkonu je důležité pochopit, kde jsou úzká místa výkonu, abyste se vyhnuli neefektivnímu ladění. Tento dokument je navržen tak, aby pomohl vývojářům identifikovat problémová místa výkonu a nabídl řešení problémů s výkonem vykreslování.
Dokument je uspořádán do následujících sekcí:

  • Kapitola 2: Identifikace úzkých míst – Tato část pomáhá vývojářům identifikovat úzká místa.
  • Kapitola 3 a 4: Nastavení VIVE Wave a VIVE OpenXR – Tyto části popisují konkrétní nastavení, která mohou ovlivnit výkon CPU/GPU pro aplikace VIVE Wave a OpenXR. Vývojáři mohou experimentovat s povolováním nebo zakazováním těchto funkcí na základě zjištěných problémů s výkonem, aby zjistili, zda dochází ke zlepšení.
  • Kapitola 5: Běžná optimalizace – Tato část sdílí některé běžné optimalizační postupy a zkušenosti.

Identifikujte úzké hrdlo

Pokud se při pohybu HMD objeví chvění snímků nebo černé okraje v aplikaci VR/MR, obvykle je to způsobeno špatným výkonem vykreslování. Problémy s výkonem vykreslování lze obvykle rozdělit do dvou typů: vázané na CPU a vázané na GPU. Je velmi důležité na začátku pochopit, jaké typy omezení se vztahují k vaší aplikaci, abyste se vyhnuli neefektivnímu ladění.
V této kapitole uvádíme jednoduché kroky, které vám umožní rychle identifikovat problémy s výkonem.

2.1 Zkontrolujte FPS vykreslování obsahu
Nejprve začneme kontrolou FPS obsahu, což je počet snímků, které obsah vykreslí za sekundu. Měl by se udržovat na úrovni snímkové frekvence displeje a být stabilní. Jinak by mohl způsobovat chvění snímků.
Pokud vaše aplikační SDK používá VIVE WAVE SDK 6.0.0 nebo novější, můžete k ověření FPS použít následující příkaz adb. DK 6.0.0
$adb Logcat -s VRMetric
Zobrazí se následující data protokolu.
VRMetric:FPS=89.8/89.8,CPU-27/1,GPU=72/3,GpuBd=0,LrCnt=1,2Stag=1,Pstat=2,AQ=1,FOVED=0/0, FSE=1,TWS-2,PT=0(0), RndrBK=0,GLTA=2D,EB=1720×1720
„FPS=89.8/89.8“ První číslo představuje FPS obsahu, zatímco druhé číslo představuje snímkovou frekvenci displeje.
Pokud je vaše verze Wave SDK nižší než 6.0.0, doporučuje se upgradovat na nejnovější verzi, aby se zvýšil výkon vykreslování a další optimalizace.
Pokud je vaše aplikační SDK sestaveno s VIVE OpenXR, můžete k ověření FPS použít následující příkaz adb.
$adb Logcat -s RENDER_ATW
Uvidíte následující data protokolu
RENDER_ATW: [FPS] nová textura: 90.00
RENDER_ATW: [FPS] R přítomno: 90.00 přeskočeno: 0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L současné:90.00 přeskočení:0 (0.592301, -0.015502, 0.805539, 0.006773)

Číslo následující za „novou texturu“ představuje aktuální FPS obsahu. Číslo následující za „přítomnost R“ a „přítomnost L“ představuje snímkovou frekvenci displeje.
Někdy se může počet snímků za sekundu (FPS) obsahu a snímková frekvence displeje mírně lišit.
Napřamptj. ve výše uvedeném případě lze 89.8 FPS považovat za 90 FPS.
Pokud je FPS obsahu aplikace trvale nižší než snímková frekvence displeje nebo zůstává nestabilní, signalizuje to problém s výkonem vykreslování. Dalším krokem je proto zjistit, zda úzké hrdlo pochází z CPU nebo GPU.
2.2 Zkontrolujte využití CPU a GPU
Pokud vaše aplikační SDK používá VIVE WAVE SDK 6.0.0 nebo novější, můžete k ověření FPS použít následující příkaz adb.
$adb logcat -s VRMetric
Zobrazí se následující data protokolu.
VRMetric:FPS=89.8/89.8,CPU=27/1,GPU=72/3,GpuBd=0,LrCnt=1,2Stag=1,Pstat=2,AQ=1,FOVED=0 /0, FSE=1,TWS=2,PT=0(0),RndrBK=0,GLTA=2D,EB=1720×1720
Jak vidíte ve výše uvedeném protokolu, využití CPU je 27 % a využití GPU je 72 %. Pokud je vaše verze Wave SDK nižší než 6.0.0, doporučuje se upgradovat na nejnovější verzi, aby se zlepšil výkon vykreslování a další optimalizace.
Pro aplikaci VIVE OpenXR můžete použít následující příkaz ke kontrole využití CPU a GPU.
# na linux/ubuntu
$ adb logcat | grep CPU_USAGE
# v PowerShellu
$ adb logcat | Select-String -Pattern CPU_USAGE
Uvidíte následující protokol
Průměr CPU CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 GPU VYUŽITÍ CPU [LOAD] 25.67 % 32.22 % 25.29 % 30.77 % 29.35 % 21.35 % 22.09 % 18.39 % 24.14 % 73 %
Pokud zjistíte, že FPS nedokáže udržet snímkovou frekvenci displeje a využití GPU je také velmi vysoké, obvykle přesahuje 85 %, můžete zkusit upravit rozlišení Eyebuffer (část 3.1.2, část 4.1.2), abyste zjistili, zda to zlepší FPS. Pokud tato úprava povede k lepšímu
výkonu, můžeme dojít k závěru, že problém souvisí s GPU, a podle toho zaměřit naše optimalizační úsilí.
Na druhou stranu, pokud úprava rozlišení Eyebufferu nevede ke znatelnému zlepšení výkonu, je problém pravděpodobně vázán na CPU a měli bychom se zaměřit na optimalizaci výkonu CPU.
Je také možné, že aplikace je současně vázána na CPU i GPU. V takových případech by mělo být optimalizační úsilí aplikováno na CPU i GPU, aby bylo dosaženo vyváženého zlepšení výkonu.
2.3 vázaný na GPU
Pokud je VR aplikace vázána na GPU, znamená to, že GPU je primárním úzkým hrdlem a nedokáže držet krok s požadavky aplikace na vykreslování. Chcete-li zmírnit problémy vázané na GPU, zvažte následující doporučení:
Nejprve použijte nástroje pro profilování, jako je RenderDoc nebo Game Engine profiler (Unity Profiler, Unreal Insights) k analýze toho, kde GPU tráví většinu času. Identifikujte nejnákladnější operace a zaměřte se na jejich optimalizaci.
Pro nativní vývojáře můžete použít RenderDoc k identifikaci, které volání kreslení způsobuje nadměrné zatížení GPU.
Vývojáři v Unity se mohou řídit tímto dokumentem v Unity nebo použít RenderDoc k analýze problémů s výkonem vykreslování a poté se řídit dokumentací k optimalizaci grafiky v Unity, kde najdete pokyny k optimalizaci vaší aplikace.
Pro vývojáře v Unreal Developer můžete k analýze problémů s výkonem vykreslování použít GPU Visualizer nebo RenderDoc a k optimalizaci aplikace se řídit pokyny k výkonu v Unreal Performance Guidelines.
Za druhé, můžete také zkusit upravit určité funkce nebo nastavení Wave, abyste snížili zatížení GPU.

  1. Nastavte pomalejší obnovovací frekvenci displeje (kapitola 3.1.1, kapitola 4.1.1)
  2.  Úprava rozlišení očního vyrovnávací paměti (kapitola 3.1.2, kapitola 4.1.2, 14.1.1)
  3.  Zkuste povolit Foveation (oddíl 3.1.4, oddíl 4.1.4).

Pokud je vaše aplikace také aplikací MR, můžete upravit také nastavení Passthrough.

  1. Snižte kvalitu obrazu procházejícího pásma. (kapitola 3.2.1)
  2. Zpomalte průchozí snímkovou frekvenci (kapitola 3.2.2).

Další nastavení výkonu GPU naleznete v kapitole 2.6.

2.4 Vázaný na CPU
Pokud je VR aplikace vázána na CPU, znamená to, že CPU je primárním úzkým hrdlem. Zvažte následující doporučení:
Nejprve použijte nástroje pro profilování, jako je Systrace nebo Game Engine Pro.filer (Unity Profiler, Unreal Insights) k analýze a identifikaci částí vašeho kódu, které spotřebovávají nejvíce zdrojů CPU. Zaměřte se na optimalizaci těchto oblastí a refaktorujte výpočetně náročné algoritmy, abyste snížili zatížení CPU.

  • Pro nativní vývojáře můžete použít Systrace k profesionálnímu...fileváš projekt.
  • Pro vývojáře v Unity můžete použít CPU Usage ProfileModul r pro nalezení problému s výkonem CPU.
  • Pro vývojáře v Unrealu můžete k nalezení problémů s výkonem CPU použít nástroj Unreal's Insights.

Za druhé, můžete také zkusit upravit určité funkce nebo nastavení Wave, abyste snížili zatížení GPU.

  1. Nastavte pomalejší obnovovací frekvenci displeje (kapitola 3.1.1, kapitola 4.1.1)
  2.  Použijte vícenásobnéView Vykreslování (oddíl 3.1.4, oddíl 4.1.4)

Pokud je vaše aplikace také aplikací MR, můžete upravit také nastavení Passthrough.

  1. Zpomalte rychlost průchodu (kapitola 3.2.2).

Další nastavení týkající se výkonu CPU naleznete v kapitole 2.6.

2.5 Shrnutí
Nakonec jsme výše uvedený pracovní postup kontroly výkonu uspořádali do obrázku 2-5-1. Začněte kontrolou FPS obsahu. Pokud je nižší než snímková frekvence displeje nebo zůstává nestabilní, analyzujte využití GPU/CPU a určete, zda je vázané na GPU nebo CPU. Nakonec použijte profíkafiler identifikovat potenciální problémy s výkonem nebo upravit funkce nebo nastavení Wave pro optimalizaci výkonu CPU.

Výkon vykreslování VIVE VR – obr. 1

2.6 Stručný přehled Která nastavení mohou zlepšit zatížení CPU/GPU

Vyjmenujte nastavení SDK, která se týkají zatížení CPU/GPU, jak je uvedeno níže. Při kontrole příslušných nastavení optimalizace můžete vycházet z úzkého hrdla aplikace.

Související s CPU:

  • Nastavení SDK VIVE Wave
    o Obsah VR
    ▪ 3.1.1 Obnovovací frekvence displeje
    ▪ 3.1.4 VícenásobnéView Vykreslování
    ▪ 3.1.6 Adaptivní kvalita
    ▪ 3.1.7 Adaptivní pohybový kompozitor
    o Obsah MR
    ▪ 3.2.2 Úprava snímkové frekvence průchodu
  • Nastavení sady VIVE OpenXR SDK
    o Obsah VR
    ▪ 4.1.1 Obnovovací frekvence displeje
    ▪ 4.1.4 VícenásobnéView Vykreslování
  • Běžná optimalizace
    5.5% přetížení CPU

Související s GPU:

  • Nastavení SDK VIVE Wave
    o Obsah VR
    ▪ 3.1.1 Obnovovací frekvence displeje
    ▪ 3.1.2 Rozlišení očního bufferu
    ▪ 3.1.3 VícenásobnéView Vykreslování
    ▪ 3.1.4 Foveace
    ▪ 3.1.5 Zvýšení ostrosti snímku (FSE)
    ▪ 3.1.6 Adaptivní kvalita
    ▪ 3.1.7 Adaptivní pohybový kompozitor
    ▪ 3.1.8 Renderovací maska ​​[Nepodporuje Unreal] o MR obsah
    ▪ 3.2.1 Úprava kvality průchodu
    ▪ 3.2.2 Úprava snímkové frekvence průchodu
  • Nastavení sady VIVE OpenXR SDK
    o Obsah VR
    ▪ 4.1.1 Obnovovací frekvence displeje
    ▪ 4.1.2 Rozlišení očního bufferu
    ▪ 4.1.3 VícenásobnéView Vykreslování
    ▪ 4.1.4 Foveace [Nepodporuje Unreal] ▪ 4.1.5 Renderovací maska ​​[Nepodporuje Unreal]
  • Běžná optimalizace
    o 5.1 Vypnutí režimu vysokého výkonu
    o 5.2 Vícenásobnéampling
    5.3 Načtení/uložení GMEM
    5.4 Vrstva kompozice (více vrstev)

Nastavení VIVE Wave

VIVE Wave je otevřená platforma a sada nástrojů, která vám umožní snadno vyvíjet obsah VR a poskytuje vysoce výkonnou optimalizaci zařízení pro partnery třetích stran. VIVE Wave podporuje herní enginy Unity a Unreal.
Neustále optimalizujeme a řešíme různé chyby, proto doporučujeme udržovat SDK aktuální.
Aktuálně VIVE Wave podporuje pouze OpenGL ES. Zde jsou uvedeny funkce seřazené podle vlivu na výkon GPU. Rozdělíme to na dvě části: obsah VR a obsah MR.
3.1 Obsah VR
3.1.1 Obnovovací frekvence displeje

Higher refresh rates offer smoother visuals, but come at the cost of increased system load. Conversely, lower refresh rates reduce system load, but result in less smooth visuals. If App has CPU/GPU bound issue, you can try decreasing the display refresh rate to alleviate the issue.

  • Pro nativní vývojáře viz WVR_SetFrameRate.
  • Pro vývojáře Unity se řiďte touto příručkou.
  • Pro vývojáře Unrealu se řiďte touto příručkou.

3.1.2 Rozlišení Eyebuffer
Rozlišení Eyebuffer je velikost textury obsahu aplikace, která má být vykreslena, vykreslená textura bude odeslána do běhového prostředí, aby provedla proces odesílání a zobrazila se na displeji HMD.
Větší velikost vyrovnávací paměti oka sice může vést k jasnějšímu a detailnějšímu zobrazení, ale také výrazně zatěžuje GPU. Proto je zásadní najít správnou rovnováhu mezi vizuální kvalitou a výkonem.
If App has GPU bound issue, you can try decreasing the eyebuffer size by multiply a scale factor. Howerver, we recommend not reducing the scale factor below 0.7, as this may result in unacceptable visual quality.

  • Pro nativní vývojáře viz WVR_ObtainTextureQueue. Při úpravě velikosti byste měli vynásobit šířku a výšku poměrem.
  • Pro vývojáře Unity viz WaveXRSettings.
    Případně můžete provést změny pomocí kódu uvedeného níže.
    XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C#
  • Pro vývojáře Unrealu viz SetPixelDensity.

3.1.3 VícenásobnéView Vykreslování
V tradičním renderování kreslíme levé a pravé oko odděleně, což vyžaduje dvě volání metody draw pro stejnou scénu.View Renderování řeší tento problém provedením pouze jednoho volání draw.
This feature reduces CPU load by decreasing the number of draw calls. The GPU also has some benefits, vertex shader’s workload is also reduced as it doesn’t need to run an additional shader for the other eye, but the fragment shader’s workload remains  unchanged since it still needs to evaluate each pixel for both eyes. We recommand enabling this feature.

  • Pro nativní vývojáře se můžete podívat na wvr_native_hellovr sample.
  • Pro vývojáře v Unity se podívejte do režimu renderování, jeden průchod je vícenásobný.view funkce.
  • Pro vývojáře Unrealu se řiďte touto příručkou.

3.1.4 Foveace
Foveated rendering je primárně navržen tak, aby snížil zátěž grafického procesoru. Snižuje detaily snímku v okrajových částech displeje a zachovává detaily s vysokým rozlišením ve středu obrazového pole. view. Pokud má aplikace problém s GPU, můžete zkusit povolit vykreslování Foveation.

Výkon vykreslování VIVE VR – obr. 2

Při používání foveace je třeba si uvědomit následující:

➢ Uživatelé si obvykle při použití výchozího režimu foveace nevšimnou snížených detailů v periferních oblastech. Pokud je však periferní kvalita foveace nastavena příliš nízko, uživatel si toho může všimnout.
➢ Účinky foveace mohou být znatelnější u určitých materiálů nebo textur, což by mohlo upoutat pozornost uživatele. Vývojáři by si toho měli být vědomi a podle toho to vyhodnotit.
➢ Povolení funkce foveated renderingu s sebou nese fixní náklady na výkon GPU, které se mohou pohybovat mezi 1 % a 6 % v závislosti na velikosti vyrovnávací paměti oka. Při použití jednoduchého shaderu ve scéně může být zvýšení výkonu z úspory zdrojů nižší než fixní náklady na výkon GPU, což má za následek pokles výkonu.

  • Pro nativní vývojáře se řiďte touto příručkou.
  • Pro vývojáře v Unity se řiďte touto příručkou. Je třeba poznamenat, že pokud povolíte následné zpracování nebo HDR, nelze plně využít foveaci. Unity totiž bude vykreslovat objekty na vlastní vygenerovanou renderovací texturu, nikoli na texturu renderu generovanou za běhu, která foveaci podporuje.
  • Pro vývojáře Unrealu se řiďte touto příručkou. Je třeba poznamenat, že foveaci nelze plně využít na Multi-View Vykreslování, protože Unreal nemůže přímo vykreslovat objekty na texturu vykreslení generovanou runtime, která podporuje foveation.

3.1.5 Vylepšení ostrosti snímku (FSE)
FSE poskytuje výsledek zostření vykreslování prostřednictvím zavedení filtru zostření, může učinit obsah jasnějším a být docela užitečný pro zlepšení jasnosti textu ve scéně. Pokud má aplikace problém s GPU, můžete zvážit deaktivaci FSE, pokud to není nezbytné.

Výkon vykreslování VIVE VR – obr. 3

  • Pro nativní vývojáře se řiďte touto příručkou.
  • Pro vývojáře Unity se řiďte touto příručkou.
  • Pro vývojáře Unrealu se řiďte touto příručkou.

3.1.6 Adaptivní kvalita
Aby se šetřila baterie a zachoval se výkon vykreslování zařízení, tato funkce automaticky upravuje úrovně výkonu hodin CPU/GPU na základě jejich využití. Kromě toho lze implementovat další strategie pro zvýšení výkonu, jako je automatické zapnutí/vypnutí Foveation nebo obsah se může sám upravit, pokud přijímá události s vysokým/nízkým zatížením.

  • Pro nativní vývojáře se řiďte touto příručkou.
  • Pro vývojáře v Unity se řiďte touto příručkou. V našem pluginu Unity lze velikost vyrovnávací paměti očí automaticky upravovat na základě aktuálního výkonu; Velikost textu odfiltruje hodnoty měřítka, které jsou v seznamu Rozlišení příliš malé. Doporučujeme velikost textu alespoň 20 dmm nebo větší.
  • Pro vývojáře Unrealu se řiďte touto příručkou.

3.1.7 Adaptive Motion Compositor
Tato funkce je experimentální funkcí, která zahrnuje UMC a PMC. UMC sníží snímkovou frekvenci na polovinu a extrapoluje nový snímek v reálném čase, aby byla zachována vizuální plynulost. Přichází však s určitou latencí, artefakty a načítáním GPU.
PMC primárně používá Depth Buffer, aby umožnil ATW zohlednit překlad HMD, rozšířit až na 6-dof kompenzaci. Tato funkce může snížit latenci překladu o 1–2 snímky, ale zvýšit zatížení GPU.

  • Pro nativní vývojáře se řiďte touto příručkou.
  • Pro vývojáře Unity se řiďte touto příručkou.
  • Pro vývojáře Unrealu se řiďte touto příručkou.

3.1.8 Maska vykreslení [Nepodporováno neskutečné]
Pixely na okrajích se po zkreslení stanou téměř neviditelnými. Renderovací maska ​​upraví hodnoty hloubkové vyrovnávací paměti těchto neviditelných pixelů. Pokud povolíte testování hloubky, nebudou tyto neviditelné pixely kvůli early-z vykresleny, čímž se sníží zatížení GPU. Tato funkce je užitečná, pokud se v těchto neviditelných oblastech nacházejí objekty pro renderování s vysokým zatížením. V opačném případě, pokud se v těchto oblastech žádné objekty pro renderování nenacházejí, doporučuje se ji vypnout, protože spotřebuje jen malou část GPU.

  • Pro nativní vývojáře se řiďte touto příručkou. Před voláním RenderMask je nutné navázat vyrovnávací paměť hloubky, jinak bude funkce neúčinná.
  • Pro vývojáře Unity se řiďte touto příručkou.
  • Pro vývojáře Unrealu momentálně nepodporuje funkci Render Mask.

3.2 Obsah MR
3.2.1 Úprava kvality průchodu
Existují 3 úrovně kvality obrazu pro průchozí režim:
➢ WVR_PassthroughImageQuality_DefaultMode – vhodné pro MR obsah bez specifických požadavků.
➢ WVR_PassthroughImageQuality_PerformanceMode – vhodné pro MR obsah, který vyžaduje více GPU zdrojů pro vykreslování virtuální scény.
➢ WVR_PassthroughImageQuality_QualityMode – vhodné pro MR obsah, který umožňuje uživatelům jasně vidět okolní prostředí, ale virtuální scéna obsahu vyžaduje jemnější doladění výkonu.
Kvalitu průchodu můžete upravit na PerformanceMode, abyste snížili využití GPU.

  • Pro vývojáře nativních, Uunity nebo Unreal se řiďte touto příručkou.

3.2.2 Úprava snímkové frekvence průchodu
Stejně jako obnovovací frekvence displeje nabízí vyšší snímková frekvence průchodu plynulejší obraz, ale za cenu zvýšeného zatížení systému. Naopak nižší obnovovací frekvence snižují zatížení systému, ale vedou k méně plynulému obrazu. Existují 2 režimy snímkové frekvence průchodu: Boost a Normal.

  • Pro nativní vývojáře je možné upravit kvalitu průchodu pomocí WVR_SetPassthroughImageRate.
  • Pro vývojáře v Unity lze změnit pomocí kódu, např.ampnastavení jsou následující // C#
    Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode);
  • Pro vývojáře v Unrealu viz nastavení metody v uzlu blueprintu na obrázku 3-2-2.

Výkon vykreslování VIVE VR – obr. 4

Nastavení VIVE OpenXR

OpenXR je otevřený standard, který poskytuje společnou sadu API pro vývoj XR aplikací, které běží na široké škále VR zařízení, vyvinutých Khronos Group. VIVE Focus 3 a VIVE XR Elite také podporují OpenXR, VIVE OpenXR SDK poskytuje komplexní podporu pro zařízení HTC VR a umožňuje vývojářům vytvářet Allin-One a obsah s enginem Unity a Unreal na zařízeních HTC VR. Neustále optimalizujeme a řešíme různé chyby, proto se doporučuje, aby vývojáři aktualizovali verzi FOTA jejich zařízení, aby ji udržovali aktuální. Aktuálně VIVE OpenXR SDK podporuje OpenGL ES a Vulkan.

4.1 Obsah VR
4.1.1 Obnovovací frekvence displeje
Koncept je zde podobný jako u obnovovací frekvence displeje v bodě 3.1.1.

  • Pro nativní vývojáře viz XrEventDataDisplayRefreshRateChangedFB.
  • Pro vývojáře Unity se řiďte touto příručkou.
  • Pro vývojáře Unrealu se řiďte touto příručkou.

4.1.2 Rozlišení Eyebuffer
Koncept je zde podobný jako v bodě 3.1.2 Rozlišení očního bufferu. Doporučujeme nesnižovat faktor měřítka pod 0.7, protože to může vést k nepřijatelné vizuální kvalitě.

  • Pro nativní vývojáře se podívejte na xrCreateSwapchain. Při úpravě velikosti byste měli vynásobit šířku a výšku poměrem.
  • Pro vývojáře Unity se podívejte na následující příkladample // C#
    XRSettings.eyeTextureResolutionScale = 0.7f; //doporučeno 1.0f~0.7f
  • Nastavení Unreal najdete v tomto průvodci.

4.1.3 VícenásobnéView Vykreslování
Koncept je zde podobný jako u 3.1.3 Multi-View Vykreslování. Tato funkce snižuje zátěž CPU, GPU má také některé výhody. Doporučujeme tuto funkci povolit.

  • Pro nativní vývojáře poskytuje KhronosGroup OpenXR Multi-View example, viz tento návod.
  • Pro vývojáře v Unity se podívejte do režimu renderování, jeden průchod je vícenásobný.view funkce.
  • Pro vývojáře v Unrealu, stejně jako pro nastavení VIVE Wave, se řiďte touto příručkou.

4.1.4 Foveation [Not Support Unreal]
Koncept je zde podobný jako u verze 3.1.4 Foveation. Foveované vykreslování je primárně navrženo ke snížení zátěže GPU, ale jeho povolení povede k fixním nákladům na výkon GPU a pokud je foveace nastavena příliš nízko a jsou použity určité materiály nebo textury, může se stát velmi...
pro uživatele znatelné. Proto je vhodné tuto funkci povolit nebo zakázat na základě vašich specifických požadavků a výkonnostních hledisek. V současné době je funkce Foveated podporována pouze v OpenGL ES na VIVE OpenXR SDK.

  • Pro nativní vývojáře je tato funkce k dispozici, ale v současné době neexistují žádné exampjsou poskytovány.
  • Pro vývojáře Unity se řiďte touto příručkou.
  • Pro vývojáře Unrealu tato funkce momentálně nepodporuje.

4.1.5 Maska vykreslení [Nepodporováno neskutečné]
Koncept je zde podobný jako u Render Mask ve verzi 3.1.8.

  • Pro nativní vývojáře použijte XrVisibilityMaskKHR k získání sítě. Před vykreslením scény použijte tuto síť k naplnění hodnot hloubkové vyrovnávací paměti.
  • Pro vývojáře v Unity je funkce Render Mask ve výchozím nastavení pro OpenGL ES povolena a lze ji zakázat pomocí následujícího kódu; Vulkan tuto funkci v současné době nepodporuje. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
  • Pro vývojáře Unrealu momentálně nepodporuje funkci Render Mask.

4.2 Obsah MR
OpenXR aktuálně nepodporuje nastavení Passthrough Quality a Frame Rate. Budeme pokračovat v optimalizaci a opravě funkce Passthrough, proto doporučujeme, aby vývojáři aktualizovali verzi FOTA zařízení, aby byla stále aktuální.

Běžná optimalizace

5.1 Vypnutí režimu vysokého výkonu
Vypnutí „Režimu vysokého výkonu“ může zmenšit velikost displeje zařízení, a tím i využití grafického procesoru. Nevýhodou je snížení rozlišení obrazovky. Můžete se rozhodnout, zda jej zapnout, a to na základě vyvážení kvality a výkonu.
Umístění pro nastavení zařízení VIVE Focus 3 je znázorněno na obrázku 5-1-1:

Výkon vykreslování VIVE VR – obr. 5

Umístění zařízení VIVE XR Elite je znázorněno na obrázku 5-1-2:

Výkon vykreslování VIVE VR – obr. 6

5.2 multisampling Anti-Aliasing
Multisampling is an anti-aliasing technique used to smooth out jagged edges, usually is accelerated through hardware, which incurs GPU performance cost. We recommend not setting MSAA higher than 2x because more hight value will consume more gpu usage.

  • Pro nativní vývojáře, MSAA OpenGL ES exsample může odkazovat na toto; MSAA Vulkan exampler může odkazovat na toto.
    Adreno GPU poskytuje rozšíření, které optimalizuje MSAA.
  • Pro vývojáře Unity se podívejte na tento cech.
  • For Unreal developer, refer to this guild. Unreal also has provide post processing anti-aliasing, refer to this guild.

5.3 Načtení/uložení GMEM
V architektuře GPU Adreno existuje funkce, kdy při vázání cíle vykreslení, pokud se cíl vykreslení nevymaže nebo nezneplatní, pokaždé, když dojde k vykreslení, hodnoty v cíli vykreslení se načtou do grafické paměti, což se nazývá GMEM Load. Pokud předchozí hodnoty nejsou potřeba, vymažte nebo zneplatněte cíl vykreslení před vykreslováním, můžete této situaci předejít a zlepšit výkon GPU.
GMEM Load se můžete vyhnout pomocí následujících metod. V OpenGL ES můžete po navázání FBO zavolat glClear a glClearDepth pro vymazání vyrovnávací paměti barev, hloubky a šablony, nebo zavolat glInvalidateFramebuffer pro zrušení platnosti zadaného cíle vykreslení. Ve Vulkanu nejsou další pokyny nutné; ve VkAttachmentDescription.loadOp můžete explicitně nastavit, zda se má příloha před použitím vymazat.
Podobně ukládání výsledku dlaždicového vykreslení zpět do hlavní paměti z grafické paměti se nazývá GMEM Store; tato operace je také drahá pro GPU. Abyste tomu zabránili, doporučujeme svázat pouze požadované cíle vykreslení, abyste předešli zbytečným operacím úložiště.

5.4 Kompoziční vrstva (vícevrstvá)
Textury zobrazené pomocí Multi-Layer mají lepší vizuální kvalitu. Tato funkce však výrazně zvyšuje výkon GPU s počtem vrstev a velikostí textur. Doporučujeme ne více než tři vrstvy.

  • Pro nativního vývojáře,
    o VIVE Wave SDK používá WVR_SubmitFrameLayers k předávání dat pro každou vrstvu.
    o VIVE OpenXR SDK umístí data vrstvy do XrFrameEndInfo a odešle je přes xrEndFrame.
  • Pro vývojáře v Unity,
    o nastavení sady VIVE Wave SDK, viz tato příručka,
    o Nastavení VIVE OpenXR naleznete v této příručce.
  • Pro vývojáře Unrealu,
    o Nastavení sady VIVE Wave SDK naleznete v této příručce.
    o Nastavení VIVE OpenXR naleznete v této příručce.

5.5 nárůstu zatížení CPU
Pokud je zatížení CPU vyšší, některé vlákna na pozadí zpracovávají procesy s vysokou prioritou, což může přerušit nativní provádění. Nemůžeme zaručit, že aplikace pro obsah nebude přerušena jiným vláknem.
If such issues arise, you can try increasing the thread priority to see if it resolves the problem. But if you change the thread configuration to optimize for devices, you need to check if this has any negative impact.

  • Pro vývojáře v Unity se řiďte funkcí konfigurace vláken v systému Android. Pokud používáte sadu VIVE Wave SDK, máme v nabídce WaveXRSettings funkci, která umožňuje upravit prioritu, jak je znázorněno na obrázku 5-5-2. Menší hodnota představuje vyšší prioritu.

Výkon vykreslování VIVE VR – obr. 7

  • Neexistuje způsob, jak změnit herní vlákno, renderovací vlákno a prioritu RHI vláken pomocí externích nastavení, pokud neupravíte kód enginu.

Copyright © 2024 HTC Corporation. Všechna práva vyhrazenaLogo VIVE

Dokumenty / zdroje

Výkon vykreslování VIVE VR [pdfUživatelská příručka
Výkon vykreslování VR, výkon vykreslování, výkon

Reference

Zanechte komentář

Vaše emailová adresa nebude zveřejněna. Povinná pole jsou označena *