Principy výkonu pro hybridní realitu

Tento článek je úvodem k pochopení významu výkonu pro vaši Mixed Reality aplikaci. Uživatelské prostředí může mít velký snížený výkon, pokud vaše aplikace nespouštěla optimální snímkovou frekvenci. Hologramy se bude jeví jako nestabilní a sledování hlavy v prostředí bude nepřesné, což pro uživatele povede ke špatnému prostředí. Výkon musí být považován za prvotřídní funkci pro vývoj hybridní reality, nikoli za úlohu polštiny.

Nedávno jsme vydali aplikaci s názvem Základy kvality, která se zabývá běžnými problémy s výkonem, návrhem a prostředím a jejich řešeními HoloLens 2. Tato aplikace je skvělou ukázkou vizuálu pro následující obsah.

Níže jsou uvedené výkonné hodnoty snímkové rychlosti pro každou cílovou platformu.

Platforma Cílová snímková frekvence
HoloLens 60 FPS
Windows Mixed Reality Ultra Počítačů 90 FPS
Windows Mixed Reality Počítačů 60 FPS

Následující rámec popisuje osvědčené postupy pro dosáhnete cílových snímkových kmitočtů. Tipy k měření a vylepšení snímkové frekvence v prostředí Unity najdete v článku s doporučeními k výkonu pro Unity.

Vysvětlení kritických míst výkonu

Pokud má vaše aplikace méně výkonné snímkové rychlosti, prvním krokem je analýza a pochopení, kde je aplikace výpočetně náročná. Za vykreslení scény zodpovídají dva primární procesory: procesor a GRAFICKÝ PROCESOR, z nichž každý obsluhuuje různé aspekty vaší Mixed Reality aplikace. Tady jsou tři klíčová místa, kde může docházet k kritickým místům:

  1. Vlákno aplikace – procesor - Zodpovídá za logiku aplikace, včetně zpracování vstupu, animací, fyziky a další logiky aplikace.
  2. Vykreslení vlákna – z CPU na GPU – zodpovídá za odesílání volání draw do GPU. Pokud vaše aplikace chce vykreslit objekt, například datovou krychli nebo model, odešle toto vlákno do GPU požadavek na provádění operací.
  3. GPU – Nejčastěji zpracovává grafický kanál vaší aplikace k transformaci 3D dat (modelů, textur atd.) na pixely. Nakonec vytvoří 2D obrázek, který se odešle na obrazovku vašeho zařízení.

Doba života rámce

Obecně platí, HoloLens aplikace budou vázané na GPU, ale ne vždy. Pomocí níže uvedených nástrojů a technik můžete pochopit, kde je konkrétní aplikace kritickým bodem.

Jak analyzovat aplikaci

Existuje mnoho nástrojů, které vám umožní porozumět profilu výkonu a potenciálním kritickým místům v aplikaci hybridní reality.

Níže jsou uvedeny některé běžné nástroje, které vám pomůžou shromáždit podrobné informace o profilaci pro vaši aplikaci:

Profilovat v libovolném prostředí

Jedním ze způsobem, jak zjistit, jestli je vaše aplikace vázaná na GPU nebo procesor, je snížit rozlišení cílového výstupu vykreslování. Snížením počtu pixelů, které se má vypočítat, snížíte zatížení GPU. Zařízení se vykreslí do menší textury a pak se v ukázce zobrazí konečný obrázek.

Po snížení rozlišení vykreslování, pokud:

  1. Frekvence snímků aplikace se zvýší, pravděpodobně jste vázaná na GPU.
  2. Frekvence snímků aplikace se nezměnila, pravděpodobně jste vázaná na procesor.

Poznámka

Unity poskytuje možnost snadno upravit cílové rozlišení vykreslování vaší aplikace za běhu prostřednictvím vlastnosti XRSettings.renderViewportScale. Konečný obrázek prezentované na zařízení má pevné rozlišení. Platforma bude vzorkovat výstup s nižším rozlišením, aby se sestavil 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 provedení "simulace" scény a zpracování logiky aplikace. Pro optimalizaci jsou zacílené následující oblasti:

  • Animace
  • Fyzika
  • Přidělení paměti
  • Složité algoritmy (tj. inverzní kinematika, hledání cesty)

Doporučení k výkonu GPU

Vysvětlení šířky pásma a rychlosti výplně

Při vykreslování rámce na GPU je aplikace buď svázaná šířkou pásma paměti, nebo rychlostí výplně.

  • Šířka pásma paměti je rychlost čtení a zápisů, které MŮŽE GPU dělat z paměti.
    • Pokud chcete identifikovat omezení šířky pásma, snižte kvalitu textury a zkontrolujte, jestli se snímková rychlost zlepšila.
    • V Unity změňte v nabídce Edit Project Nastavení Quality > (Kvalita Project Nastavení > textury) Nastavení.
  • Fill rate (Rychlost výplně) označuje pixely, které může GPU vykreslit za sekundu.
    • Pokud chcete zjistit omezení rychlosti výplně, snižte rozlišení zobrazení a zkontrolujte, jestli se zlepšila snímková rychlost.
    • V Unity použijte vlastnost XRSettings.renderViewportScale.

Šířka pásma paměti obecně zahrnuje optimalizace těchto:

  1. Rozlišení textury nižší
  2. Používejte méně textur (normály, odlesky a tak dále).

Míra výplně se zaměřuje na snížení počtu operací, které je potřeba vypočítat pro konečný vykreslený pixel, včetně:

  1. Počet objektů, které se mají vykreslit nebo zpracovat
  2. Počet operací na shader
  3. Počet fází GPU až do konečného výsledku (shadery geometrie, účinky po zpracování a tak dále)
  4. Počet pixelů k vykreslení (rozlišení zobrazení)

Snížení počtu mnohoúhelníků

Vyšší počet mnohoúhelníků má za následek více operací pro GPU, takže snížení počtu mnohoúhelníků ve scéně zkracuje dobu vykreslování. Stínování geometrie je nákladné i na dalších faktorech, ale počet mnohoúhelníků je nejjednodušší metrikou, která určuje, kolik práce bude trvat k vykreslení scény.

Omezení překreslení

K překreslení dochází, když se vykresluje více objektů, ale nezobrazují se na obrazovce, protože jsou skryté ukryté objektem. Imagine se na zeď, která má za sebou objekty. Veškerá geometrie by se zpracuje pro vykreslení, ale musí se vykreslit jenom neprůhledná zeď, což vede k zbytečným operacím.

Shadery

Shadery jsou malé programy, které běží na GPU a při vykreslování dělají dva důležité kroky:

  1. Určení vrcholů, které se mají nakreslit a kde jsou v prostoru obrazovky (shader vrcholů)
    • Vertex shader se provádí pro každý vrchol každé sítě.
  2. Určení barvy jednotlivých pixelů (pixel shader)
    • Pixel shader se provádí na pixely a vykresluje se geometrií do cílové textury vykreslení.

Shadery obvykle prochová mnoho transformací a výpočtů osvětlení. I když složité modely osvětlení, stíny a další operace mohou generovat vynikající výsledky, mají také cenu. Snížení počtu operací vypočítaných ve shaderu může výrazně snížit práci potřebnou pro GPU na snímek.

Doporučení pro kódování shaderu
  • Pokud je to možné, používejte bilineární filtrování.
  • Změna uspořádání výrazů pro použití vnitřních objektů MAD k násobení a přidání ve stejnou dobu
  • Co nejvíce předpočítejte procesor a do materiálu předejte jako konstanty.
  • Upřednostňovat přesun operací z pixel shaderu na vertex shader
    • Obecně platí, že počet vrcholů je mnohem menší než počet pixelů (720p je 921 600 pixelů, 1080p je 2 073 600 pixelů a tak dále).

Odebrání fází GPU

Účinky po zpracování mohou být nákladné a zvýšit míru výplně vaší aplikace, včetně technik ochrany před aliasy, jako je MSAA. Na HoloLens se doporučujeme vyhnout se těmto technikám a dalším fázím shaderu, jako je geometrie, tesaři a výpočetní shadery.

Doporučení pro paměť

Nadměrné přidělení paměti a operace navracení může vést k nekonzistentnímu výkonu, zamrzlým snímkům a dalšímu škodlivému chování. Při vývoji v Unity je důležité porozumět důležitým informacím o 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, jak snížit náklady na průběžné přidělování a navracení objektů. To se provádí přidělením velkého fondu identických objektů a opakovaného použití neaktivních dostupných instancí z tohoto fondu namísto neustálého zplošování a ničení objektů v průběhu času. Fondy objektů jsou vhodné pro opakovaně použitelné komponenty s proměnlivou životností během aplikace.

Viz také