Principy výkonu pro hybridní realitu
Tento článek je úvodem k pochopení významu výkonu vaší Mixed Reality aplikace. Pokud vaše aplikace neběží s optimální obnovovací frekvencí, může se výrazně snížit uživatelské prostředí. Hologramy se budou zdát nestabilní a sledování hlavy prostředí bude nepřesné, což uživatele může vést k horšímu prostředí. Výkon musí být považován za prvotřídní funkci pro vývoj pro hybridní realitu, a ne za dokonalou úlohu.
Hodnoty výkonné snímkové frekvence pro každou cílovou platformu jsou uvedené níže.
Platforma | Cílová frekvence snímků |
---|---|
HoloLens | 60 SNÍMKŮ ZA SEKUNDU |
Windows Mixed Reality Ultra počítačů | 90 SNÍMKŮ ZA SEKUNDU |
Windows Mixed Reality počítačů | 60 SNÍMKŮ ZA SEKUNDU |
Níže uvedená architektura popisuje osvědčené postupy pro dosažení cílových snímkových frekvencí. Tipy k měření a vylepšení snímkové frekvence v prostředí Unity doporučujeme přečíst si článek s doporučeními k výkonu pro Unity.
Vysvětlení kritických bodů výkonu
Pokud má vaše aplikace podvýkonnou snímkovou frekvenci, prvním krokem je analyzovat a pochopit, kde je vaše aplikace výpočetně náročná. Za vykreslení scény zodpovídají dva primární procesory: procesor a GPU, z nichž každý zpracovává různé aspekty Mixed Reality aplikace. Kritické body mohou nastat ve třech klíčových bodech:
- Vlákno aplikace – procesor – zodpovídá za logiku aplikace, včetně zpracování vstupu, animací, fyziky a další logiky aplikace.
- Vlákno vykreslování – PROCESOR na GPU – zodpovídá za odesílání volání draw do GPU. Když vaše aplikace chce vykreslit objekt, jako je datová krychle nebo model, odešle toto vlákno požadavek na gpu k provádění operací.
- GPU – nejčastěji zpracovává grafický kanál vaší aplikace a transformuje 3D data (modely, textury atd.) na pixely. Nakonec vytvoří 2D obrázek, který se odešle na obrazovku vašeho zařízení.
Obecně platí, že aplikace HoloLens budou vázané na GPU, ale ne vždy. Pomocí níže uvedených nástrojů a technik zjistěte, kde je vaše konkrétní aplikace kritická.
Jak analyzovat aplikaci
Existuje mnoho nástrojů, které vám umožní porozumět profilu výkonu a potenciálním kritickým bodům aplikace hybridní reality.
Níže najdete některé běžné nástroje, které vám pomůžou shromáždit podrobné informace o profilaci vaší aplikace:
- Intel Graphics Performance Analyzers
- Visual Studio Graphics Debuggers
- Unity Profiler
- Unity Frame Debugger
- Unreal Insights
- PIX
- Profilace GPU v Unreal
Jak profilovat v libovolném prostředí
Jedním ze způsobů, jak zjistit, jestli je vaše aplikace svázaná s GPU nebo procesorem, je snížit rozlišení cílového výstupu vykreslení. Snížením počtu pixelů, které se mají vypočítat, snížíte zatížení GPU. Zařízení se vykreslí na menší texturu a pak vzorek up-sample pro zobrazení konečného obrázku.
Po snížení rozlišení vykreslování, pokud:
- Zvýšení snímkové frekvence aplikace, pak jste pravděpodobně vázaní na GPU
- Snímková frekvence aplikace beze změny, pak jste pravděpodobně vázáni na procesor
Poznámka
Unity poskytuje možnost snadno upravit cílové rozlišení vykreslení vaší aplikace za běhu prostřednictvím XRSettings.renderViewportScale vlastnost. Konečný obrázek prezentovaný na zařízení má pevné rozlišení. Platforma bude vzorkovat výstup s nižším rozlišením a sestavit obrázek s vyšším rozlišením pro vykreslování na displejích.
UnityEngine.XR.XRSettings.renderScale = 0.7f;
Jak vylepšit aplikaci
Doporučení k výkonu procesoru
Obecně platí, že většina práce v aplikaci hybridní reality na procesoru zahrnuje "simulaci" scény a zpracování aplikační logiky. Optimalizace se zaměřuje na následující oblasti:
- Animace
- Fyzika
- Přidělení paměti
- Složité algoritmy (tj. inverzní kinematice, hledání cest)
Doporučení k výkonu GPU
Vysvětlení šířky pásma vs. rychlosti vyplňování
Při vykreslování snímku na GPU je aplikace vázána šířkou pásma paměti nebo rychlostí vyplnění.
- Šířka pásma paměti je rychlost čtení a zápisů, které GPU může provádět z paměti.
- Pokud chcete zjistit omezení šířky pásma, snižte kvalitu textury a zkontrolujte, jestli se zlepšila snímková frekvence.
- Pokud chcete zjistit omezení rychlosti vyplňování, snižte rozlišení obrazovky a zjistěte, jestli se zvýší snímková frekvence.
Poznámka
Pokud pracujete s Unity, projděte si naše doporučení k výkonu GPU specifická pro Unity. – V Unity použijte vlastnost XRSettings.renderViewportScale .
Šířka pásma paměti obecně zahrnuje optimalizaci pro:
- Nižší rozlišení textury
- Používejte méně textur (normální, specular atd.)
Míra vyplnění se zaměřuje na snížení počtu operací, které je potřeba vypočítat pro konečný vykreslovaný pixel, včetně:
- Počet objektů, které se mají vykreslit/zpracovat
- Počet operací na shader
- Počet fází GPU do konečného výsledku (shadery geometrie, efekty následného zpracování atd.)
- Počet pixelů, které se mají vykreslit (rozlišení obrazovky)
Snížení počtu mnohoúhelníku
Vyšší počet mnohoúhelníku má za následek více operací pro GPU, takže snížením počtu mnohoúhelníků ve scéně se zkrátí doba vykreslování. Existují i další faktory, kvůli kterým je stínování geometrie nákladné, ale nejjednodušší metrika, která určuje, kolik práce bude trvat vykreslení scény, je počet mnohoúhelníku.
Limit překreslení
K vysokému překreslení dochází, když je vykresleno více objektů, ale nezobrazují se na obrazovce, protože jsou skryté objektem occluding. Představte si, že se díváte na zeď, za kterou jsou objekty. Celá geometrie by se zpracovala pro vykreslení, ale musí se vykreslit pouze neprůsledná stěna, což má za následek zbytečné operace.
Shadery
Shadery jsou malé programy, které běží na GPU a dělají dva důležité kroky při vykreslování:
- Určení, které vrcholy by se měly nakreslit a kde se nacházejí v prostoru obrazovky (shader vrcholů)
- Shader vrcholů se spouští pro každý vrchol pro každou síť.
- Určení barvy každého pixelu (shader pixelu)
- Pixel shader se spouští na pixel a vykreslí se geometrií na cílovou texturu vykreslení.
Shadery obvykle dělají mnoho transformací a výpočtů osvětlení. I když komplexní modely osvětlení, stíny a další operace mohou generovat fantastické výsledky, mají také cenu. Snížení počtu operací vypočítaných ve shaderech může výrazně snížit množství práce potřebné pro GPU na každém snímku.
Doporučení pro kódování shaderu
- Používejte bilineární filtrování, kdykoli je to možné.
- Změna uspořádání výrazů tak, aby používaly vnitřní funkce MAD k násobení a sčítání současně
- Co nejvíce přepočítat na procesoru a předávat jako konstanty do materiálu
- Upřednostnění operací přesunu z shaderu pixelů do shaderu vrcholů
- Obecně platí, že počet vrcholů je mnohem menší než počet pixelů (720p je 921 600 pixelů, 1080p je 2 073 600 pixelů atd.).
Odebrání fází GPU
Následné zpracování může být nákladné a zvýšit míru vyplňování vaší aplikace, včetně technik ochrany před aliasy, jako je MSAA. Na HoloLensu doporučujeme vyhnout se těmto technikám a dalším fázím shaderu, jako je geometrie, trup a výpočetní shadery.
Doporučení k paměti
Nadměrné přidělení paměti a operace zrušení přidělení paměti můžou mít za následek nekonzistentní výkon, zablokování rámců a další škodlivé chování. Při vývoji v Unity je obzvláště důležité porozumět aspektům paměti, protože správu paměti řídí systém uvolňování paměti.
Sdružování objektů
Sdružování objektů je oblíbená technika, která snižuje náklady na průběžné přidělování a rušení přidělení objektů. To se provádí přidělením velkého fondu identických objektů a opětovným použitím neaktivních dostupných instancí z tohoto fondu místo neustálého vytváření a ničení objektů v průběhu času. Fondy objektů jsou skvělé pro opakovaně použitelné komponenty, které mají proměnlivou životnost během aplikace.
Viz také
- Doporučení k výkonu pro Unity
- Doporučená nastavení pro Unity
- Doporučení k výkonu pro Unreal
- Material recommendations in Unreal
- Optimalizace 3D modelů
- Osvědčené postupy pro převod a optimalizaci 3D modelů v reálném čase
- Pokyny k představení pro umělce a návrháře pro Unreal
- Osvědčené postupy pro virtuální realitu pro Unreal